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:编译,下载调试。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值