<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 第3課: 點(diǎn)亮開(kāi)發(fā)板led燈

第3課: 點(diǎn)亮開(kāi)發(fā)板led燈

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
我們學(xué)習的是ARM周邊外設的控制,但外設有很多

我們寫(xiě)的程序分成2種:

本文引用地址:http://dyxdggzs.com/article/201611/316804.htm

無(wú)操作系統的直接驅動(dòng)

有操作系統的寫(xiě)出設備驅動(dòng)

以下介紹下主要的設備:

1外部存儲控制器 發(fā)送復雜的時(shí)序信號來(lái)控制SDRAM,有了它就比較方便擴展SDRAM

2LCD controller 工作在800X480

3 4個(gè)DMA通道 3個(gè)串口通道

4 2個(gè)SPI 串行數據接口(我們的板子無(wú)) IIC總線(xiàn)(板子上無(wú))

5 2種音頻總線(xiàn)IIS音頻與AC97音頻

6支持SD MMC

7 2個(gè)USB接口,1個(gè)USB控制器

8 4個(gè)PWM定時(shí)器,1個(gè)內部定時(shí)器,看門(mén)狗定時(shí)器

9 8個(gè)10bit的ADC模擬信號轉換

10 RTC日歷功能

11 camera 功能

12 130個(gè)i/o管腳 24個(gè)外部中斷源

13電源控制(normal slow idle slepp )

14我們板子上有獨立網(wǎng)卡芯片控制RJ45

2440比2410多了camera與ac97

cp15控制MMU和cache

AHB高速設備

============

APB低速設備

2440內部有個(gè)功能可以單獨關(guān)閉某個(gè)外設

我們是通過(guò)控制特殊的寄存器來(lái)控制外設的。

下面來(lái)看第一個(gè) 130個(gè)I/O管腳(pin)

共有9組 從GPA到GPJ(見(jiàn)數據手冊274頁(yè))

有9個(gè)配置寄存器GPACON~GPJCON

有9個(gè)內容寄存器GPADAT~GPJDAT

我們寫(xiě)的led燈是GPE12和GPE13這2個(gè)引腳控制的兩個(gè)燈。

根據數據手冊來(lái)看,CPECON控制的引腳是可以復用的,工具GPECON中設置的值來(lái)改變它的功能,它可以是I/O port功能也可以是其他功能。

在這里我們要點(diǎn)亮燈,就要讓GPECON設置到out port。然后改變CPEDAT中的數據到0.可以點(diǎn)亮燈。當GPEDAT中的響應位為地位時(shí),由于和高位產(chǎn)生電壓差從而產(chǎn)生電流,點(diǎn)亮燈泡。如果要熄滅燈的話(huà),就把GPEDAT相應位置1.

以下用匯編和C各寫(xiě)一個(gè)LED2個(gè)燈閃爍的驅動(dòng)。

.text
.global _start
delay:@這個(gè)是延遲程序,閃爍當中的間隔
nop
nop
nop
subs r4,r4,#1
bne delay
movpc,lr

_start:
ldr r0,=0x56000040 @r0 = GPECONs address
ldr r1,=0x5000000
str r1,[r0] @set GPECON register
ldr r0,=0x56000044 @r0 = GPEDATs address

movr2,#10 @set the times of loop
ldr r3,=0x3000 @r3 is the mask to turn off led
mov r1,#0
loop:
strr1,[r0] @亮燈,把GPEDAT相應位置0
ldrr4,=0x500000
bldelay

strr3,[r0] @滅燈,把相應位置1
ldrr4,=0x500000
bldelay

subsr2,r2,#1
bneloop

haltloop: @如果程序不在最后一直循環(huán)的話(huà)將不能執行
bhaltloop

接下來(lái)就是寫(xiě)makefile

light.bin:light.o//要編譯成light。bin 需要依賴(lài).o
arm-linux-ld -Ttext 0x00000000 light.o -o light.elf //我們這里不寫(xiě)連接文件,而是用Ttext的形式,指定程序開(kāi)始的段(text)
arm-linux-objcopy -O binary -S light.elf light.bin//把elf文件轉化成2進(jìn)制文件。正真的作用是定位地址和引入符號表。
arm-linux-objdump -D -b binary -m arm light.bin >light.dis //把light.bin反匯編,也可以把light.elf反匯編

light.o:light.s
arm-linux-gcc -c light.s -o light.o
clean:
rm -f light.o light.elf light.bin light.dis

之后我使用openjtag仿真槍?zhuān)ㄟ^(guò)jtag口燒入內存0x0(因為連接文件定的入口在那)當然也可以通過(guò)網(wǎng)絡(luò )下載等其他方法燒寫(xiě)內存SDRAM,不過(guò)沒(méi)有jtag給力 =。=!。記得燒寫(xiě)的時(shí)候用arm920t cp15 2 0把mmu和i-cache關(guān)了,這個(gè)東西的使用件使用手冊。

之后給出C程序的代碼。C寫(xiě)起來(lái)比較方便。主張用C。我們寫(xiě).h .c .s .lds makefile5個(gè)文件。其中crt0.s是用來(lái)引入C程序的。

.text
.globl _start
_start:
ldrr0, =0x53000000 @ WATCHDOG close
movr1, #0x0
strr1, [r0]
ldr sp, =1024*4 @set stack,but the capitcy of cache is only 4k

bl main @跳轉到C的main符號入口
halt_loop:
b halt_loop

之后寫(xiě)頭文件

#define GPECON (*(volatile unsigned int *)0x56000040) @volatile是用來(lái)讓編譯器不編譯GPECON寄存器的,免得它被當初常量,它可是會(huì )變化的需要一直從寄存器中讀取。
#define GPEDAT (*(volatile unsigned int *)0x56000044)

#define GPE12_out (1<<(12*2))
#define GPE13_out (1<<(13*2))

之后就是C文件

#include"led.h"
void wait(int time)
{
do{
time--;
}
while(time>0);
}

int main()
{
int i=10;
GPECON = GPE12_out|GPE13_out;
do{
GPEDAT = 0;
wait(300000);
GPEDAT = (3<<12);
wait(300000);
i--;}
while(i>0);
return 0;
}

主程序寫(xiě)完后,開(kāi)始寫(xiě)連接腳本lds文件。

SECTIONS {
. = 0x00;//從0x00開(kāi)始作為入口
.text : { *(.text) }//段名稱(chēng)起名.text 內容是 所有的.text段
.rodata ALIGN(4) : {*(.rodata)}// ALIGN(4)4字節對齊
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}

來(lái)看下makefile

CFLAGS := -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding
led.bin:led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
arm-linux-objdump -D -m arm led.elf > led.dis
led.elf:led.o crt0.o
arm-linux-ld -Tleds.lds crt0.o led.o -o led.elf
led.o:led.c led.h
arm-linux-gcc $(CFLAGS) -c led.c -o led.o
crt0.o:crt0.s
arm-linux-gcc $(CFLAGS) -c crt0.s -o crt0.o
clean:
rm -f led.bin led.dis led.elf led.o crt0.o



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>