裸奔程序之LED详解
?????开发环境ADS1.2
???? 实验实现功能:TQ2440开发板LED1-LED4从右向左循环点亮。下面是main.c程序 ------------------------------------------------------------------------------------------------------------------- #include "2440addr.h"???????? #define? LED1_ON (rGPBDAT &=~(1<<5)) void Delay(void) int main() ------------------------------------------------------------------------------------------------------------------- #include "2440addr.h" ,里面主要是TQ公司写的一些关于S3C2440寄存器的地址映射的定义,可以省去我们自己定义寄存器地址。
?
???? 上图是天嵌公司底板原理图,关于4个LED的设计,很简单,只要是nLED x(1-4)连接的IO设置为输出,上拉,且为低电平的时候,对应的LED就点亮了。这里,对应TQ公司核心板所接的GPIO口为,GPB5~GPB8。所以我们要设置的寄存器有三种,分别是GPBCON、GPBUP、GPBDAT;它们的功能分别是,设置输入或输出,设置是否上拉,设置输出是1还是0,当然它们还有复用功能的作用,这里未涉及,故不详述。
?
?????? 下面我们开始分析程序,结合原理图以及S3C2440技术手册以及我们的程序,首先从main函数开始:
?????? rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16)); //对GPBCON[10:17]清零
?????? 执行完这句之后,GPBCON这个寄存器的[10:17]位都为0;
????? ?rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16)); //设置GPB5~8为输出
?????? 执行完这句之后,GPBCON的[10:17]位为 01010101,即将GPB5~GPB8设置为输出;
?????? rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8)); //设置GPB5~8的上拉功能
?????? 执行完这句之后,GPB5~GPB8内部上拉功能有效;
?????? rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8); //关闭LED
????? ?执行完这句之后,GPB5-GPB8写入1,即初始化LED,全部关闭LED;
?????? 进入死循环后;执行LED1_ON;查看LED1_ON,我们将其宏定义为:
???????#define LED1_ON (rGPBDAT &=~(1<<5))???
?????? 即GPB5写入0;即点亮LED1;同理LED1_OFF,GPB5写入1;即关闭LED1;其他亦如此。??
????? ?延时程序很简单,不多说。最后,因为main函数为返回值为int型函数,故返回0.
?????? LED程序就分析完毕。
?????? 编译成功后,通过串口工具SecureCRT,首先把TQ2440开发板打到NOR FALSH? 启动电源后再SecureCRT选择菜单里选择a ,再通过USB工具DNW烧入刚才编译成功.bin文件,将开关再次打开NAND FLASH,重启开发板,既可以看到我们一开始所描述的现象啦。O(∩_∩)O
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |