ATIME

嵌入式裸机程序之点亮LED

1.GPIO介绍

S3C2440A包含130个多功能输入输出引脚,共分为9组:GPA~GPJ。通过查看数据手册,可知每组接口有GPxCON,端口配置寄存器;GPxDAT,端口数据寄存器;GPxUP,端口上拉寄存器;但并不是每组GPIO都包含全部寄存器。除此之外,还有杂项控制寄存器、外部中断寄存器等。

2.本节目标

本节介绍最简单的GPIO应用——点亮LED灯。在程序模板的基础下,修改程序。需要准备的文档:S3C2440数据手册,TQ2440开发板电路原理图。
通过查看电路原理图,TQ2440的LED在GPB5~GPB8
通过查看数据手册,要控制一个GPIO需要配置GPxDAT、GPxCON、GPxUP三组寄存器即可。

《嵌入式裸机程序之点亮LED》

《嵌入式裸机程序之点亮LED》

3.程序分析

程序已保存在GPIO文件夹中,可在我的Github中浏览,这里只介绍关键的部分。
宏定义:
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))
这部分主要为定义4个GPIO的设置准备,将这4个IO接口设置为输出模式。
GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;
在主程序中,先设置GPB的5~8位设置为输出,通过逻辑与,生成需要设置给GPBCON的最终结果。
因GPBUP寄存器默认值为0x0,即使能上拉功能,在此不需修改。
while(1)
{
    i++;
    if( i%2==1 )
        GPBDAT |=(1<<5);
    else
        GPBDAT &=~(1<<5);
    if( i%2==1 )
        GPBDAT |=(1<<6);
    else
        GPBDAT &=~(1<<6);
    if( i%2==1 )
        GPBDAT |=(1<<7);
    else
        GPBDAT &=~(1<<7);
    if( i%2==1 )
        GPBDAT |=(1<<8);
    else
        GPBDAT &=~(1<<8);
    delay(500);
}
在设置好GPBCON后,设置一个大循环,给GPBDAT设置不同的值来控制LED引脚的高低电位。程序效果为LED亮500ms暗500ms。通过一个变量的最低位值来确定亮暗状态。
程序中,i变量数值范围为0~255,但实际并未设置超出范围后重置变量值,这是因为在i到达255后再加1其值会变为0。
《嵌入式裸机程序之点亮LED》
《嵌入式裸机程序之点亮LED》
点亮LED通常是学习单片机的第一节课,ARM裸机程序也是如此。程序中,有部分代码是在后面学习才会涉及到的,这里只需会用即可。建议自己再翻阅芯片数据手册,更详细地了解GPIO的使用规则。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注