S3C2410 CPU 共有 117 个多功能复用输入输出口,分为 8 组端口:
4 个 16 位的 I/O 端口 (PORT C、PORT D、PORT E、PORT G)
2 个 11 位的 I/O 端口 (PORT B 和 PORT H)
1 个 8 位的 I/O 端口(PORT F)
1 个 23 位的 I/O 端口(PORT A)
这些通用的 GPI/O 接口,是可配置的, PORTA 除功能口外,它们仅用作输出使用,剩下的 PORTB、PORTC、PORTD、PORTE、PORTF、PORTG 均可作为输入输出口使用。配置这些端口,是通过一些寄存器来实现的,这些寄存器均有各自的地址,位长 32 位。往该地址中写入相应的数据,即可实现功能及数据配置。
GPACON (0x56000000) //Port A control
GPADAT (0x56000004) //Port A data
GPBCON (0x56000010) //Port B control
GPBDAT (0x56000014) //Port B data
GPBUP (0x56000018) //Pull-up control B
GPCCON (0x56000020) //Port C control
GPCDAT (0x56000024) //Port C data
GPCUP (0x56000028) //Pull-up control C
GPDCON (0x56000030) //Port D control
GPDDAT (0x56000034) //Port D data
GPDUP (0x56000038) //Pull-up control D
GPECON (0x56000040) //Port E control
GPEDAT (0x56000044) //Port E data
GPEUP (0x56000048) //Pull-up control E
GPFCON (0x56000050) //Port F control
GPFDAT (0x56000054) //Port F data
GPFUP (0x56000058) //Pull-up control F
GPGCON (0x56000060) //Port G control
GPGDAT (0x56000064) //Port G data
GPGUP (0x56000068) //Pull-up control G
GPHCON (0x56000070) //Port H control
GPHDAT (0x56000074) //Port H data
GPHUP (0x56000078) //Pull-up control H 现用 C 口举例说明。
也就是说,在地址 0x56000020 中,给 32 位的每一位赋值,那么,在 CPU的管脚上就定义了管脚的功能值。当 C 口某管脚配置成输入端口,则在 GPCDAT对应的地址中的对应位上,得到 1,则该管脚的输入为高电平,得到 0,则该管脚的输入为低电平。当 C 口某管脚配置成输出端口,则在 GPGDAT 对应的地址中的对应位上,写入 1,则该管脚输出为高电平,写入 0,则该管脚输出为低电平。若配置为功能管脚,则该管脚变成具体的功能脚。本次实验可不设置 GPCUP 寄存器。
1. 实验平台中 LED 灯的硬件连接原理图如下:
2. 对 LED 灯控制的汇编程序:
AREA test, CODE, READONLY
CODE32
ENTRY
GPC5CON EQU 0x56000020 ;控制寄存器 EQU等值命令
GPC5DAT EQU 0x56000024 ;数据寄存器
start
LDR R0,=GPC5CON ; 地址中的值写入r0
LDR R1,=0X55555555; 1010101010101010101010101010101 GPC5,6,7定义为输出管脚
STR R1,[R0] ; r1的值存到r0指向的地址
Loop
LDR R0,=GPC5DAT
LDR R1,=0Xffffff1f ;11111111111111111111111100011111 GPC5,6,7低电平点亮
STR R1,[R0]
LDR R2,=0Xffffff ;延时
Loop1
SUB R2,R2,#1
CMP R2,#0
BNE Loop1;
LDR R1,=0Xffffffff ;11111111111111111111111111111111 GPC5,6,7高电平熄灭
STR R1,[R0]
LDR R2,=0Xffffff ;延时
Loop2
SUB R2,R2,#1
CMP R2,#0
BNE Loop2;
B Loop
END