三牛电子工作室 https://bbs.21ic.com/?566798 [收藏] [复制] [RSS] 我的工作室,哈哈哈

日志

【原创】LPC1768学习笔记(一)GPIO控制LED实验

已有 1903 次阅读2012-7-13 02:13 |个人分类:嵌入式开发|系统分类:嵌入式系统| 原创, LPC1768, GPIO控制, LED



【原创】LPC1768学习笔记(一)GPIO控制LED实验


三牛电子工作室:www.sanliu85.com
万事开头难,在学习一个新的CPU时,GPIO控制首当其冲,一般都是先易后难的,循序渐进的学习,要了解开发环境,基本的寄存器操作等等。

NXP的CM3内核ARM芯片LPC1768,基本上延续了ARM7的寄存器架构:管脚功能选择寄存器PINSEL,GPIO方向寄存器FIODIR,说明一下FIO就是快速IO的意思,以前片子没有快速IO,现在基本上是标配了,嘎嘎。设置高电平寄存器FIOSET,设置低电平寄存器FIOCLR。

了解完这几个基本的4个基本的寄存器后,我们就可以轻松的控制LPC1768的IO口了,相对51单片机就个寄存器的搞定的情况,CM3单片机是复杂了一点,不过没有关系,很快我们我爱上这个的设计,因为这设计更加合理。

进入实例讲解,LED的初始化函数

void LEDInit(void)

{

       LPC_PINCON->PINSEL7 &= ~((0x03 << ((LED0_PIN-16)*2)) | (0x03 << ((LED1_PIN-16)*2)));  

  LPC_PINCON->PINSEL3 &= ~((0x03 << ((LED2_PIN-16)*2)) | (0x03 << ((U1UP_LED_PIN-16)*2))); ;

       LPC_GPIO3->FIODIR  |= LED0 |  LED1;  

       LPC_GPIO1->FIODIR  |= LED2 |  U1UP_LED;                                  



       LPC_GPIO3->FIOSET  |= LED0 | LED1;

       LPC_GPIO1->FIOSET  |= LED2 |  U1UP_LED;                                

}

第1、2句,把管脚配置成GPIO模式,一般一个管脚最多可配置成4种工作模式,即占用了2bit,寄存器是32位的,也就是说一个32位的寄存器控制16个管脚。

第3、4句,设置GPIO管脚的方向。1位输出,0位输入,这个FIIODIR只在管脚配置成GPIO是才是有效的。

第5、6句,设置GPIO管脚输出高电平。

       有了上面的初始化,我们就可以直接控制GPIO了,为了能更直观的操作LED,定义了两个宏

#define LED0_OFF()            {LPC_GPIO3->FIOSET       |= LED0;}

#define LED0_ON()             {LPC_GPIO3->FIOCLR|= LED0;}

要用的时候只要我们直接用宏定义就了,看不到操作寄存器的过程。是不是非常方便了,还有一个好处,就是在一直到其他CPU的时候,只要修改寄存器的行了,不用到程序中一个一个替换,方便移植。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)