s3c2440之IO口--流水灯_嵌入式软件开发--我的人生_百度空间

1S3C2440A的多功能引脚概叙

S3C2440A130个多功能输入/输出管脚,8个端口组,如下所示:

     Port AGPA):25个输出端口

     Port BGPB):11个输入/输出端口

     Port CGPC):16个输入/输出端口

     Port DGPD):16个输入/输出端口

     Port EGPE):16个输入/输出端口

     Port FGPF):8个输入/输出端口

     Port GGPG):16个输入/输出端口

     Port HGPH):9个输入/输出端口

     Port JGPJ):13个输入/输出端口

每个端口都能由软件轻松地配置以适应不同的系统结构和设计要求。开始运行主程序之前你必须定义每个用到了的管脚的功能。如果一个管脚不用来做复合功能管脚,那这个管脚就能配置成I/O端口。

2:端口寄存器

端口配置寄存器GPACON~GPJCON用来决定复合引脚使用哪个功能。

端口数据寄存器GPADAT~GPJDAT若端口被配置成输出口,数据能写入PnDAT相应的位,若被配置成输入口,数据能从PnDAT相应位读出。

端口上拉寄存器GPBUP~GPJUP控制上拉电阻的使能。当相应位为‘0’此引脚的上拉电阻允许,为‘1’则禁止相应引脚的上拉电阻。若上拉寄存器使能则上拉电阻工作而不管引脚功能。

混合控制寄存器:控制数据端口在睡眠模式,USB padCLKOUT选择的上拉电阻。

外部中断控制寄存器EXTIN:选择外部中断请求的信号模式,如高电平,抵电平,下降沿,上升沿等。因为每个中断引脚都有一个数字滤波器,所以中断控制器能辨认出长于3 clocks的请求信号。EINT[150]被用作唤醒源。

32440的初始化代码

   该段代码主要用来初始化2440处理器,并跳转到C函数处。

.text         @ 声明代码段                           
.global _start            @ 作用类似于extern
_start:              
    ldr     r0, =0x53000000      @ WATCHDOG寄存器地址@
    mov     r1, #0x0                            
    str     r1, [r0]             @ 写入0,禁止WATCHDOG,否则CPU会不断重启 这里采用读-写-修改@

    ldr     r0, = 0x4C000014     @ CLKDINV
    mov     r1, #0
    str     r1,[r0]

    ldr      sp, = 4096           @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K@
    bl      main                 @ 调用C程序中的main函数
halt_loop:
    b       halt_loop

4:LED点灯C部分

硬件部分:mini2440GPB5~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是由GPBCONbit[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:编译,下载调试。



郑重声明:资讯 【s3c2440之IO口--流水灯_嵌入式软件开发--我的人生_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——