通用I/O的中斷
cc2530的CPU有18個中斷源,每個中斷都可以分別使能和控制。
18個中斷源的優先級
18個中斷源分為6個組,每一組有3個中斷源,中斷優先級可以通過配置相應寄存器來實現
中斷源的分組
編號 中斷
- IPG0 REFRR RF DMA
- IPG1 ADC T1 P2INT
- IPG2 URX0 T2 UTX0
- IPG3 URX1 T3 UTX1
- IPG4 ENC T4 P1INT
- IPG5 ST P0INT WDT
中斷優先級是由寄存器IP0和IP1來實現的,IP1_X IP0_x表示的數字約大,優先級越高
- IP1_X IP0_X 優先級
- 0 0 0(優先級別最低)
- 0 1 1
- 1 0 2
- 1 1 3(優先級別最高)
IP1_X與IP0_X中的X代表了中斷優先級組的組名,即IPG0~IPG5,設置優先級時3的優先級最高,0的優先級最低
例:
//設置IPG3的優先級別最高
IP1_IPG3=1;
IP0_IPG3=1;
//設置IPG0的優先級別最低
IP1_IPG1=0;
IP1_IPG0=0
如果在同一個組中的優先級同時發生,會有一個先后,決定這個先后順序的就是中斷輪流探測順序。(書中有一個表,先不放了,在書上的P.59)
I/O中斷
通用I/O設置為輸入后,可以用於產生中斷,並且通用I/O中斷還可以設置其觸發方式,在設置中斷時需要將發生中斷引腳的使能位置置為1,端口使能位設置寄存器:
- P0端口中斷使能位——IEN1.P0IE
- P1端口中斷使能位——IEN2.P1IE
- p2端口中斷使能位——IEN2.P2IE
這里一定要注意,IENx寄存器中斷使能是對整個端口進行使能,不是對某一個引腳。
中斷使能寄存器IEN1控制P0端口,定時器1~4和DMA中斷的使能和禁止,如果需要某一位中斷使能,只需將IEN1中對應的位設置為1即可。
- 中斷使能寄存器IEN1
- 位 名稱 復位 描述
- 7:6 --- 00 保留
- 5 P0IE 0 端口0中斷使能
- 4 T4IE 0 定時器4中斷使能
- 3 T3IE 0 定時器3中斷使能
- 2 T2IE 0 定時器2中斷使能
- 1 T1IE 0 定時器1中斷使能
- 0 DMAIE 0 DMA中斷使能
IEN1中斷設置
//設置P0端口中斷使能
IEN1 |= 0x20;
- 中斷使能寄存器IEN2
- 位 名稱 復位 描述
- 7:6 --- 00 保留
- 5 WDTIE 0 看門狗定時器中斷使能
- 4 P1IE 0 端口1中斷使能
- 3 UTX1IE 0 USART1 TX中斷使能
- 2 UTX0IE 0 USART2 TX中斷使能
- 1 P2IE 0 端口2中斷使能
- 0 RFIE 0 RF一般中斷使能
IEN2中斷設置
//設置P1和P2端口中斷使能
IEN2|=0x12;
IEN1使能寄存器可以控制P0端口中斷使能,IEN2中斷寄存器可以控制P1端口和P2端口中斷使能。
控制某一引腳的中斷使能PxIEN(x=0,1,2)
//設置P0_5中斷使能
P0IEN |= 0x20;
//設置P0端口中斷使能
IEN1 |= 0x20;
控制中斷是由上升沿觸發還是由下降沿觸發PICTL
- 中斷觸發方式寄存器PICTL
- 位 名稱 復位 描述
- 7 PADSC 00 控制I/O引腳在輸出模式下的驅動能力
- 6:4 --- 000 保留
- 3 P2ICON 0 端口2的P2.4P2.0輸入模式下的中斷配置,該為位所有端口2的輸入P2.4P2.0選擇中斷請求條件 0為上升沿
- 2 P1ICONH 0 端口1的P1.7P1.4輸入模式下的中斷配置,該位為所有端口1的輸入P1.7P1.4選擇中斷請求條件 0為上升沿
- 1 P0ECONL 0 端口1的P1.4P1.0輸入模式下的中斷配置,該位為所有端口1的輸入P1.4P0.0選擇中斷請求條件 0為上升沿
- 0 P0ICON 0 端口0的P0.7P0.0輸入模式下的中斷配置,該位為所有端口0的輸入P0.7P0.0選擇中斷請求條件 0為上升沿
//設置P0_5下降沿觸發中斷
PICTL |= 0x01;
總中斷EA
//打開總中斷
EA=1;
中斷標志寄存器 PxIFG(x=0,1,2)
I/O中斷發生后,中斷標志寄存器相應位會自動置為1
//判斷端口P0是否發生中斷
if(P0IFG>0)
{
}
//判斷P0_5是否發生中斷
if(P0IFG&0x20)
{
;
}
設置中斷要從小的向大的方向設置,先從引腳,再到端口,再到總中斷
CC2530中斷處理函數的編寫方法
#pragma vector=<中斷向量>
__interrupt void <函數名稱>(void) //這里的開頭是兩個下划線
{
//函數體
}