|||
【原创】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的时候,只要修改寄存器的行了,不用到程序中一个一个替换,方便移植。