cortex m0 lpc1114_GPIO引腳寄存器綜述
LPC1114一共有42個GPIO,分為4個端口,P0、P1、P2口都是12位的寬度,引腳從Px.0~Px.11,P3口是6位的寬度,引腳從P3.0~P3.5。
每個GPIO都可以通過軟件設(shè)置為輸入或輸出引腳,讀取引腳的電平,就需要把引腳設(shè)置為輸入引腳,比如引腳用來做ADC輸入引腳或按鍵檢測引腳的時候。需要程序控制引腳電平的時候,就把引腳設(shè)置為輸出引腳,比如引腳控制外部三極管導(dǎo)通與截止的時候。
每個GPIO都可以作為中斷引腳來感知外部。中斷還可以設(shè)置為電平中斷或邊沿觸發(fā)中斷。電平中斷又可以設(shè)置為低電平中斷或高電平中斷,邊沿觸發(fā)又可以設(shè)置為下降沿中斷或上升沿中斷,也可以設(shè)置為雙邊沿觸發(fā)中斷。它的靈活性給我們設(shè)計(jì)帶了很大的方便。
引腳作為GPIO功能時,默認(rèn)是輸入引腳。
由于GPIO的寄存器并不是很多,我們首先了解學(xué)習(xí)它的寄存器,然后通過實(shí)例講解GPIO的各種輸入輸入應(yīng)用。
2.1 GPIO寄存器定義
名稱訪問屬性描述復(fù)位值DATA可讀可寫數(shù)據(jù)寄存器不定DIR可讀可寫方向寄存器0x00IS可讀可寫中斷感應(yīng)寄存器0x00IBE可讀可寫雙邊沿中斷寄存器0x00IEV可讀可寫中斷事件寄存器0x00IE可讀可寫中斷屏蔽寄存器0x00RIS只可讀原始中斷狀態(tài)寄存器0x00MIS只可讀屏蔽中斷狀態(tài)寄存器0x00IC只可寫中斷清除寄存器0x001. 數(shù)據(jù)寄存器DATA
位
名稱
描述
復(fù)位值
訪問屬性
11:0
DATA
1為高電平,0為低電平
不定
可讀可寫
31:12
–
保留
–
–
數(shù)據(jù)寄存器用來讀取單片機(jī)引腳的電平和控制單片機(jī)引腳的電平。當(dāng)引腳設(shè)置為輸入引腳時,讀取DATA寄存器可以獲得引腳的電平。當(dāng)引腳設(shè)置為輸出引腳時,給DATA寄存器寫值可以控制引腳的電平。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。例如,讀取P0口的DATA寄存器,bit0就對應(yīng)P0.1引腳的電平,bit7就對應(yīng)P0.7引腳的電平,以此類推。bit12到bit31這些位保留不用。LPC1114的四個端口,每個端口都有一個DATA寄存器。由于P3口只有6個引腳,所以P3口的DATA寄存器只有bit0到bit5是可以使用的,其它位無用。
當(dāng)引腳設(shè)置為輸入引腳的時候,給DATA寄存器寫值不會影響到引腳的電平,沒有意義。此時DATA寄存器的值只受引腳外部電平的影響。
2. 方向寄存器DIR
位
名稱
描述
復(fù)位值
訪問屬性
11:0
IO
1為輸出,0為輸入
0x000
可讀可寫
31:12
–
保留
–
–
方向寄存器用來設(shè)置GPIO引腳的輸入和輸出功能。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。例如,設(shè)置P0.5為輸入引腳,需設(shè)置GPIO0的DIR寄存器中的bit5為0,設(shè)置P0.5為輸出引腳,需設(shè)置GPIO0的DIR寄存器中的bit5為1。由上表復(fù)位值可知,GPIO默認(rèn)是輸入引腳。bit12到bit31這些位保留不用。
3. 中斷感應(yīng)寄存器IS
位
名稱
描述
復(fù)位值
訪問屬性
11:0
ISENSE
0為邊沿觸發(fā)
1為電平觸發(fā)
0x000
可讀可寫
31:12
–
保留
–
–
中斷感應(yīng)寄存器用來設(shè)置產(chǎn)生中斷的觸發(fā)方式。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。給對應(yīng)的bit寫0,把對應(yīng)的引腳設(shè)置為邊沿觸發(fā)。給對應(yīng)的bit寫1,把對應(yīng)的引腳設(shè)置為電平觸發(fā)。由復(fù)位值可知,引腳默認(rèn)為邊沿觸發(fā)方式。邊沿觸發(fā),分為上升沿觸發(fā)和下降沿觸發(fā)兩種方式。電平觸發(fā),分為高電平觸發(fā)和低電平觸發(fā)兩種方式。具體是哪種邊沿或者哪種電平觸發(fā)中斷,需要由下面將要講到的“中斷事件觸發(fā)器”決定。
4. 雙邊沿中斷寄存器IBE
位
名稱
描述
復(fù)位值
訪問屬性
11:0
IBE
0:中斷方式由IEV決定
1:設(shè)置為雙邊沿中斷
0x000
可讀可寫
31:12
–
保留
–
–
雙邊沿中斷寄存器用來設(shè)置引腳中斷方式是否為雙邊沿觸發(fā)中斷。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。給對應(yīng)的bit寫1,把對應(yīng)的引腳設(shè)置為雙邊沿觸發(fā)中斷,給對應(yīng)的bit寫0,則觸發(fā)方式由中斷事件寄存器的設(shè)置決定。
5. 中斷事件寄存器IEV
位
名稱
描述
復(fù)位值
訪問屬性
11:0
IEV
0:下降沿或低電平觸發(fā)
1:上升沿或高電平觸發(fā)
0x000
可讀可寫
31:12
–
保留
–
–
中斷感應(yīng)寄存器用來設(shè)置高低電平或者是上升沿和下降沿觸發(fā)中斷的方式。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。這個寄存器與“中斷感應(yīng)寄存器”配合使用,決定引腳的電平觸發(fā)方式。給對應(yīng)的bit位寫0,如果“中斷感應(yīng)寄存器”設(shè)置為邊沿觸發(fā),這里即是下降沿觸發(fā)中斷,如果“中斷感應(yīng)寄存器”設(shè)置為電平觸發(fā),這里即是低電平觸發(fā)中斷。給對應(yīng)的bit位寫1,如果“中斷感應(yīng)寄存器”設(shè)置為邊沿觸發(fā),這里即是上升沿觸發(fā)中斷,如果“中斷感應(yīng)寄存器”設(shè)置為電平觸發(fā),這里即是高電平觸發(fā)中斷。由復(fù)位值可知,引腳的中斷觸發(fā)方式為低電平觸發(fā)中斷或者是下降沿觸發(fā)中斷。
6.中斷屏蔽寄存器IE
位
名稱
描述
復(fù)位值
訪問屬性
11:0
MASK
0:屏蔽引腳的中斷
1:不屏蔽引腳的中斷
0x000
可讀可寫
31:12
–
保留
–
–
中斷屏蔽寄存器用來屏蔽引腳上的中斷。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。給對應(yīng)的bit位寫0,屏蔽對應(yīng)引腳的中斷。給對應(yīng)的bit位寫1,不屏蔽對應(yīng)引腳的中斷。
它其實(shí)是接下來要講到的“屏蔽中斷狀態(tài)寄存器”的開關(guān)。當(dāng)引腳設(shè)置好觸發(fā)中斷方式以后,在引腳上產(chǎn)生了觸發(fā)中斷的條件,如果這里的對應(yīng)引腳的位設(shè)置為1,那么“屏蔽中斷狀態(tài)寄存器”中的對應(yīng)狀態(tài)位將置1,如果這里的對應(yīng)引腳的位設(shè)置為0,那么“屏蔽中斷狀態(tài)寄存器”中的對應(yīng)狀態(tài)位將不會置1。
7. 原始中斷狀態(tài)寄存器RIS
位
名稱
描述
復(fù)位值
訪問屬性
11:0
RAWST
0:表示沒有產(chǎn)生中斷
1:表示產(chǎn)生了中斷
0x000
只讀
31:12
–
保留
–
–
原始中斷狀態(tài)寄存器,是一個只讀寄存器。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。讀取對應(yīng)的位,可以知道引腳上有沒有產(chǎn)生符合條件的中斷。
需要注意的是,這里的狀態(tài)位,并不受“中斷屏蔽寄存器”設(shè)置位的影響。例如,當(dāng)某引腳設(shè)置為下降沿產(chǎn)生中斷,如果某引腳上產(chǎn)生了下降沿,這個寄存器中的對應(yīng)位就會置1。也就是說,前面提到的“中斷屏蔽寄存器”的設(shè)置,只會影響到“屏蔽中斷狀態(tài)寄存器”的狀態(tài)位。
8. 屏蔽中斷狀態(tài)寄存器MIS
位
名稱
描述
復(fù)位值
訪問屬性
11:0
MASK
0:表示沒有產(chǎn)生中斷
1:表示產(chǎn)生了中斷
0x000
只讀
31:12
–
保留
–
–
屏蔽中斷狀態(tài)寄存器,是一個只讀寄存器。寄存器當(dāng)中的bit0到bit11,每一個bit與引腳順序?qū)?yīng)。讀取對應(yīng)的位,可以知道引腳上有沒有產(chǎn)生符合條件的中斷。
需要注意的是,這里的狀態(tài)位,受“中斷屏蔽寄存器”設(shè)置位的影響。例如,當(dāng)某引腳設(shè)置為下降沿產(chǎn)生中斷,如果某引腳上產(chǎn)生了下降沿,而且在“中斷屏蔽寄存器”中的引腳對應(yīng)位設(shè)置為1,這個寄存器中的對應(yīng)位才會置1。也就是說,即使引腳上產(chǎn)生了符合條件的中斷,如果“中斷屏蔽寄存器”中的引腳對應(yīng)位設(shè)置為0,這個狀態(tài)寄存器中的對應(yīng)位是不會置1的。
9.中斷清除寄存器IC
位
名稱
描述
復(fù)位值
訪問屬性
11:0
CLR
0:不起作用
1:清除中斷狀態(tài)位
0x000
只寫
31:12
–
保留
–
–
中斷清除寄存器是一個只寫寄存器,用來清除對應(yīng)引腳中斷狀態(tài)位。GPIO有兩個中斷狀態(tài)寄存器,它們分別是“屏蔽中斷狀態(tài)寄存器”和“原始中斷狀態(tài)寄存器”。給“中斷清除寄存器”對應(yīng)的位寫1,將會清除這兩個中斷狀態(tài)寄存器中的對應(yīng)位。