本人使用的是TQ2440开发板,主芯片是S3C2440,它一共有130个I/O端口,分为9组:GPA、GPB...GPJ。
对于这几组GPIO引脚,它们的寄存器是相似的:
GPxCON:用于选择引脚功能
GPxDAT:用于读、写引脚数据
GPxUP:用于确定是否使用内部上拉电阻 ,其中无GPAUP寄存器!
注意:PORT A与PORT B~PORT J 在功能选择方面有所不同。
GPxCON (x:B~J):00-----表示输入
01-----表示输出
10-----表示特殊功能
11-----保留不用
GPXUP:某位为1时,相应的引脚无内部上拉电阻;为0时,相应的引脚使用内部上拉电阻。
我所使用的开发板LED部分的连接图:
其中: nLED_1------------GPB5
nLED_2------------GPB6
nLED_3------------GPB7
nLED_4------------GPB8
通过查S3C2440的手册,我们得到:
Register Address
GPBCON 0x56000010
GPBDAT 0x56000014
GPBUP 0x56000018
我们设置GPB5,GPB6,GPB7,GPB8为输出模式,则:
GPBCON应该设置为:0b0000,0000,0000,0001,0101,0100,0000,0000=0x15400。
GPBDAT 寄存器对应位为1 灯灭 ,为0灯亮!(由电路图可知)
GPBUP5--GPBUP8设置为禁止上拉电阻,即:
GPBUP设置为:0b0011,1110,0000=0x1E0。
到此,我们为程序所作的准备工作已经结束了,下面是程序代码:
GPBCON EQU 0x56000010
GPBDAT EQU 0x56000014
GPBUP EQU 0x56000018
EXPORT LEDTEST
AREA LEDTESTASM ,CODE,READONLY ;该指令定义了一个代码段,段名为LEDTEST,属性只读
ENTRY ;程序入口标示符
LEDTEST
ldr r0,=GPBCON ;设置GPB5--GPB8 为output
ldr r1,[r0]
bic r1,r1,#0xFFF00
orr r1,r1,#0x15400
str r1,[r0]
ldr r0,=GPBUP ;设置GPB5--GPB8禁止上拉电阻
ldr r1,[r0]
orr r1,#0x1E0
str r1,[r0]
looptest
ldr r2,=GPBDAT
ldr r3,[r2]
bic r3,r3,#0xFFF
orr r3,r3,#0x51F
str r3,[r2] ;全部点亮
ldr r0,=0x2ffff
bl delay
ldr r3,[r2]
bic r3,r3,#0xFFF
str r3,[r2] ;全部灭
ldr r0,=0x2ffff
bl delay
ldr r3,[r2]
bic r3,r3,#0xFFF
orr r3,r3,#0x51F
str r3,[r2] ;全部点亮
ldr r0,=0x2ffff
bl delay
ldr r3,[r2]
bic r3,r3,#0xFFF
orr r3,r3,#0x7DF
str r3,[r2] ;点亮与GPB5所连接的LED
ldr r0,=0x2ffff
bl delay
ldr r3,[r2]
bic r3,r3,#0xFFF
orr r3,r3,#0x7BF
str r3,[r2] ;点亮与GPB6相连的LED
ldr r0,=0x2ffff
bl delay
ldr r3,[r2]
bic r3,r3,#0xFFF
orr r3,r3,#0x77F
str r3,[r2] ;点亮和GPB7相连的LED
ldr r0,=0x2ffff
bl delay
bic r3,r3,#0xFFF
orr r3,r3,#0x5FF
str r3,[r2] ;点亮和GPB8相连的LED
ldr r0,=0x2ffff
bl delay
b looptest
delay
sub r0,r0,#1
cmp r0,#0x0
bne delay
mov pc,lr ;返回
END