打印

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

[复制链接]
6566|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sanliu85|  楼主 | 2012-7-28 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sanliu85 于 2012-7-28 09:58 编辑

【原创】LPC1768学习笔记(一)GPIO控制LED实验
    万事开头难,在学习一个新的CPU时,GPIO控制首当其冲,一般都是先易后难的,循序渐进的学习,要了解开发环境,基本的寄存器操作等等。
    NXPCM3内核ARM芯片LPC1768,基本上延续了ARM7的寄存器架构:管脚功能选择寄存器PINSELGPIO方向寄存器FIODIR,说明一下FIO就是快速IO的意思,以前片子没有快速IO,现在基本上是标配了,嘎嘎。设置高电平寄存器FIOSET,设置低电平寄存器FIOCLR
    了解完这几个基本的4个基本的寄存器后,我们就可以轻松的控制LPC1768IO口了,相对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;


}
    第12句,把管脚配置成GPIO模式,一般一个管脚最多可配置成4种工作模式,即占用了2bit,寄存器是32位的,也就是说一个32位的寄存器控制16个管脚。
    第34句,设置GPIO管脚的方向。1位输出,0位输入,这个FIIODIR只在管脚配置成GPIO是才是有效的。
    第56句,设置GPIO管脚输出高电平。
       有了上面的初始化,我们就可以直接控制GPIO了,为了能更直观的操作LED,定义了两个宏
#define LED0_OFF() {LPC_GPIO3->FIOSET|= LED0;}
#define LED0_ON(){LPC_GPIO3->FIOCLR|= LED0;}
    要用的时候只要我们直接用宏定义就了,看不到操作寄存器的过程。是不是非常方便了,还有一个好处,就是在一直到其他CPU的时候,只要修改寄存器的行了,不用到程序中一个一个替换,方便移植。
三牛电子工作室,www.sanliu85.com

相关帖子

沙发
op2sql| | 2012-8-1 14:30 | 只看该作者
能利用位带特性实现io口位操作了,就像stm32那样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:电子菜鸟的博客:http://www.sanliu85.com

2

主题

67

帖子

0

粉丝