GPIO使用
LPC2478的GPIO是不能断开时钟的,上电就连接.处理GPIO主要就下面几步
1. 设置为普通IO模式
2. 设置输入输出方向
3. 设置值
以下寄存器
用于选择管脚是基本输入输出还是复用功能
设置管脚是否具有上拉电阻
其中,LPC的管脚分为两种,一种是传统GPIO还有一种是高速GPIO,其实严格来说,所有的管脚都是高速管脚,但是为了兼容之前的软件和程序,可以使用之前的访问模式访问GPIO,说明如下
设置管脚方向
这个寄存器只能写1有效,写1将对应管脚高电平,写0不会将对应管脚低电平
需要将对应管脚低电平靠这个寄存器,但是这个寄存器不能控制管脚高电平
通过该寄存器获取相应端口的输入
这个寄存器的意思是说:将指定位的数据屏蔽,也就是说在这个寄存器中写入1的那一位,我们无法通过写入寄存器的方式控制他的电平也不能读取到他的当前有效电平,也就是说,那个管脚被锁住了
以下是使用代码,全部使用FIO高速管脚模式驱动
</pre><pre name="code" class="cpp">#ifndef __GPIO_H_ #define __GPIO_H_ #include "lpc24xx.h" #include "common.h" //p1 5输出 P2 10输入 void GPIOInit(void); void GPIOSet(u8 value); u8 GPIOGet(void); #endif
#include "gpio.h" //p1 5输出 P2 10输入 void GPIOInit(void) { SCS |= (1<<0);//设置高速寄存器组方式访问端口 PINSEL2 &= ~(3<<10);//选择 p1 5 p2 10 为GPIO管脚 PINSEL4 &= ~(3<<20); PINMODE2 &= ~(3<<10);//全部使能上拉电阻 PINMODE4 &= ~(3<<20); FIO1DIR |= 1<<5; //P1 5输出 FIO2DIR &= ~(1<<10);//P2 10输入 FIO1MASK = 0x00; FIO2MASK = 0x00;//将1和2的数据掩码全部清除 } void GPIOSet(u8 value) { if(value)FIO1SET |= (1<<5); else FIO1CLR |= (1<<5); } //p2 10 按下高电平 平时低电平 u8 GPIOGet(void) { if((FIO2PIN&(1<<10)) == 0) { return 1; } else { return 0; } }
需要注意的是,对于P0和P1当使用FIO驱动的时候需要修改SCS修改系统控制寄存器,如下
否则就算是写入了FIO寄存器也不会体现在实际管脚上