GPIO使用
LPC2478的GPIO是不能斷開時鐘的,上電就連接.處理GPIO主要就下面幾步
1.設(shè)置為普通IO模式
2.設(shè)置輸入輸出方向
3.設(shè)置值
以下寄存器
用于選擇管腳是基本輸入輸出還是復(fù)用功能
設(shè)置管腳是否具有上拉電阻
其中,LPC的管腳分為兩種,一種是傳統(tǒng)GPIO還有一種是高速GPIO,其實嚴格來說,所有的管腳都是高速管腳,但是為了兼容之前的軟件和程序,可以使用之前的訪問模式訪問GPIO,說明如下
設(shè)置管腳方向
這個寄存器只能寫1有效,寫1將對應(yīng)管腳高電平,寫0不會將對應(yīng)管腳低電平
需要將對應(yīng)管腳低電平靠這個寄存器,但是這個寄存器不能控制管腳高電平
通過該寄存器獲取相應(yīng)端口的輸入
這個寄存器的意思是說:將指定位的數(shù)據(jù)屏蔽,也就是說在這個寄存器中寫入1的那一位,我們無法通過寫入寄存器的方式控制他的電平也不能讀取到他的當前有效電平,也就是說,那個管腳被鎖住了
以下是使用代碼,全部使用FIO高速管腳模式驅(qū)動
#define__GPIO_H_
#include"lpc24xx.h"
#include"common.h"
//p15輸出P210輸入
voidGPIOInit(void);
voidGPIOSet(u8value);
u8GPIOGet(void);
#endif
#include"gpio.h"
//p15輸出P210輸入
voidGPIOInit(void)
{
SCS|=(1<<0);//設(shè)置高速寄存器組方式訪問端口
PINSEL2&=~(3<<10);//選擇p15p210為GPIO管腳
PINSEL4&=~(3<<20);
PINMODE2&=~(3<<10);//全部使能上拉電阻
PINMODE4&=~(3<<20);
FIO1DIR|=1<<5;//P15輸出
FIO2DIR&=~(1<<10);//P210輸入
FIO1MASK=0x00;
FIO2MASK=0x00;//將1和2的數(shù)據(jù)掩碼全部清除
}
voidGPIOSet(u8value)
{
if(value)FIO1SET|=(1<<5);
elseFIO1CLR|=(1<<5);
}
//p210按下高電平平時低電平
u8GPIOGet(void)
{
if((FIO2PIN&(1<<10))==0)
{
return1;
}
else
{
return0;
}
}
需要注意的是,對于P0和P1當使用FIO驅(qū)動的時候需要修改SCS修改系統(tǒng)控制寄存器,如下
否則就算是寫入了FIO寄存器也不會體現(xiàn)在實際管腳上