1:S3C2440A的多功能引脚概叙 S3C2440A有130个多功能输入/输出管脚,8个端口组,如下所示: Port A(GPA):25个输出端口 Port B(GPB):11个输入/输出端口 Port C(GPC):16个输入/输出端口 Port D(GPD):16个输入/输出端口 Port E(GPE):16个输入/输出端口 Port F(GPF):8个输入/输出端口 Port G(GPG):16个输入/输出端口 Port H(GPH):9个输入/输出端口 Port J(GPJ):13个输入/输出端口 每个端口都能由软件轻松地配置以适应不同的系统结构和设计要求。开始运行主程序之前你必须定义每个用到了的管脚的功能。如果一个管脚不用来做复合功能管脚,那这个管脚就能配置成I/O端口。 2:端口寄存器 端口配置寄存器GPACON~GPJCON:用来决定复合引脚使用哪个功能。 端口数据寄存器GPADAT~GPJDAT:若端口被配置成输出口,数据能写入PnDAT相应的位,若被配置成输入口,数据能从PnDAT相应位读出。 端口上拉寄存器GPBUP~GPJUP:控制上拉电阻的使能。当相应位为‘0’此引脚的上拉电阻允许,为‘1’则禁止相应引脚的上拉电阻。若上拉寄存器使能则上拉电阻工作而不管引脚功能。 混合控制寄存器:控制数据端口在睡眠模式,USB pad,CLKOUT选择的上拉电阻。 外部中断控制寄存器EXTIN:选择外部中断请求的信号模式,如高电平,抵电平,下降沿,上升沿等。因为每个中断引脚都有一个数字滤波器,所以中断控制器能辨认出长于3 clocks的请求信号。EINT[15:0]被用作唤醒源。 3:2440的初始化代码 该段代码主要用来初始化2440处理器,并跳转到C函数处。 .text @ 声明代码段 ldr r0, = 0x4C000014 @ CLKDINV ldr sp, = 4096 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K@ 4:LED点灯C部分 硬件部分:mini2440的GPB5~8引脚分别连接着LED1~4。 #define GPBCON (*(volatile unsigned long *)0x56000010) /* GPB端口控制寄存器地址*/ #define GPBDAT (*(volatile unsigned long *)0x56000014) /* GPB端口数据寄存器地址*/ #define LOCKTIME (*(volatile unsigned long *)0x4C000000) #define MPLLCON (*(volatile unsigned long *)0x4C000004) /* MPLLCON寄存器地址 */ #define UPLLCON (*(volatile unsigned long *)0x4C000008)
#define GPB5_out (1<<(5*2)) /* GPB5是由GPBCON的bit[11:10]两位来控制 */ #define GPB6_out (1<<(6*2)) /* 00-input 01-output */ #define GPB7_out (1<<(7*2)) /* 明确由输出高电平还是由低电平来点亮 */ #define GPB8_out (1<<(8*2)) /* 故要将GPB5678四个IO口设置为输出 */
/* FCLK = 271.5M */ #define M_MDIV 0xad #define M_PDIV 2 #define M_SDIV 2 #define U_MDIV 0x38 #define U_PDIV 2 #define U_SDIV 2
/*** 延时函数*/ void wait(unsigned long time) { int i; for (i = 0; i < time; i++); }
int main(void) /* 主函数 */ { unsigned long j,i = 0;
GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out; /* 将LED对应的GPB5678四个引脚设为输出*/ LOCKTIME = 0xFFFFFF; UPLLCON = ((U_MDIV << 12) + (U_PDIV << 4) + U_SDIV); delay(0xffff); delay(0xffff); MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV); delay(0xffff); delay(0xffff);
while(1) { for (j = 0; j < 10; j++){ delay(0xffff); } GPBDAT = (~(i<<5)); if(++i == 16) i = 0; } return 0; } /**说明**/ S3c2440在时钟设置时,需要先设置UPLLCON寄存器,后设置MPLLCON寄存器,而且之间还需要有一定的延时。 5:编译,下载调试。 |