cc2530的I/O中斷


通用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)       //這里的開頭是兩個下划線
{

    //函數體


}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM