1、中斷源
CC2530的CPU有18個(gè)中斷源,每個(gè)中斷源都有它自己的位于一系列SFR寄存器中的中斷請求標志。每個(gè)中斷請求都需要中斷使能位來(lái)使能或禁止,具體定義如下表:
表1
Interrupt Number
中斷號
Description
描述
Interrupt Name
中斷名稱(chēng)
Interrupt Vector
中斷向量
Interrupt Mask,CPU
中斷屏蔽
Interrupt Flag, CPU
中斷標志
0
RF TX FIFO underflow and RX FIFO overflow
射頻發(fā)送隊列空和接收隊列溢出
RFERR
03h
IEN0.RFERRIE
TCON.RFERRIF (1)
1
ADC end of conversion
ADC轉換完成
ADC
0Bh
IEN0.ADCIE
TCON.ADCIF (1)
2
USART 0 RX complete
串口0接收完畢
URX0
13h
IEN0.URX0IE
TCON.URX0IF (1)
3
USART 1 RX complete
串口1接收完畢
URX1
1Bh
IEN0.URX1IE
TCON.URX1IF (1)
4
AES encryption/decryption complete
AES加/解密完成
ENC
23h
IEN0.ENCIE
S0CON.ENCIF
5
Sleep Timer compare
睡眠定時(shí)器比較
ST
2Bh
IEN0.STIE
IRCON.STIF
6
Port 2 inputs/USB
端口2輸入/USB
P2INT
33h
IEN2.P2IE
IRCON2.P2IF (2)
7
USART 0 TX complete
串口0發(fā)送完畢
UTX0
3Bh
IEN2.UTX0IE
IRCON2.UTX0IF
8
DMA transfer complete
DMA發(fā)送完成
DMA
43h
IEN1.DMAIE
IRCON.DMAIF
9
Timer 1 (16-bit) capture/compare/overflow
定時(shí)器1(16位)捕獲/比較/溢出
T1
4Bh
IEN1.T1IE
IRCON.T1IF (1) (2)
10
Timer 2
定時(shí)器2(MAC定時(shí)器)
T2
53h
IEN1.T2IE
IRCON.T2IF (1) (2)
11
Timer 3 (8-bit) compare/overflow
定時(shí)器3(8位)比較/溢出
T3
5Bh
IEN1.T3IE
IRCON.T3IF (1) (2)
12
Timer 4 (8-bit) compare/overflow
定時(shí)器4(8位)比較/溢出
T4
63h
IEN1.T4IE
IRCON.T4IF (1) (2)
13
Port 0 inputs
端口0輸入
P0INT
6Bh
IEN1.P0IE
IRCON.P0IF (2)
14
USART 1 TX complete
串口1發(fā)送完畢
UTX1
73h
IEN2.UTX1IE
IRCON2.UTX1IF
15
Port 1 inputs
端口1輸入
P1INT
7Bh
IEN2.P1IE
IRCON2.P1IF (2)
16
RF general interrupts
RF通用中斷
RF
83h
IEN2.RFIE
S1CON.RFIF (2)
17
Watchdog overflow in timer mode
看門(mén)狗計時(shí)溢出
WDT
8Bh
IEN2.WDTIE
IRCON2.WDTIF
(1) Hardware-cleared when interrupt service routine is called(當中斷服務(wù)例程被調用后,硬件清除標志位)
(2) Additioal IRQ mask and IRQ flag bits exist.(附加中斷屏蔽和中斷標志位存在)
2、中斷屏蔽
每個(gè)中斷通過(guò)IEN0、IEN1、IEN2里的相應中斷使能位來(lái)禁止或啟用,具體如下表。
中斷使能寄存器(IEN0,IEN1,IEN2)(0:中斷禁止 1:中斷使能)
表2
端口
Bit位
名稱(chēng)
初始化
讀/寫(xiě)
描述
IEN0
7
EA
0
R/W
禁止所有中斷
0:無(wú)中斷被確認。
1:通過(guò)設置對應的使能位,將每個(gè)中斷源分別使能或禁止。
6
–
0
R0
不使用,讀取為0值
5
STIE
0
R/W
睡眠定時(shí)器中斷使能
4
ENCIE
0
R/W
AES加解密中斷使能
3
URX1IE
0
R/W
串口1接收中斷使能
2
URX0IE
0
R/W
串口0接收中斷使能
1
ADCIE
0
R/W
ADC中斷使能
0
RFERRIE
0
R/W
RF接收/發(fā)送隊列中斷使能
IEN1
7:6
–
00
R0
不使用,讀取為0值
5
P0IE
0
R/W
端口0中斷使能
4
T4IE
0
R/W
定時(shí)器4中斷使能
3
T3IE
0
R/W
定時(shí)器3中斷使能
2
T2IE
0
R/W
定時(shí)器2中斷使能
1
T1IE
0
R/W
定時(shí)器1中斷使能
0
DMAIE
0
R/W
DMA傳輸中斷使能
IEN2
7:6
–
00
R0
不使用,讀取為0值
5
WDTIE
0
R/W
看門(mén)狗中斷使能
4
P1IE
0
R/W
端口1中斷使能
3
UTX1IE
0
R/W
串口1中斷使能
2
UTX0IE
0
R/W
串口0中斷使能
1
P2IE
0
R/W
端口2中斷使能
0
RFIE
0
R/W
RF通用中斷使能
注意某些外部設備會(huì )因為若干事件產(chǎn)生中斷請求。這些中斷請求可以作用在端口0、端口1、端口2、定時(shí)器1、定時(shí)器2、定時(shí)器3、定時(shí)器4或者無(wú)線(xiàn)上。這些外部設備在相應的寄存器里都有一個(gè)內部中斷源的中斷屏蔽位。
為了啟用中斷,需要以下步驟:
(1)清除中斷標志位(Clear interrupt flags);
(2)如果有,則設置SFR寄存器中對應的各中斷使能位;
(3)設置寄存器IEN0、IEN1和IEN2中對應的中斷使能位為1;
(4)設置全局中斷位IEN0.EA為1;
(5)在該中斷對應的向量地址上,運行該中斷的服務(wù)程序。
下圖給出了所有中斷源及其相關(guān)的控制和狀態(tài)寄存器的概述圖;當中斷服務(wù)程序被執行后,陰影框的中斷標志位將被硬件自動(dòng)清除;
3、中斷處理
當中斷發(fā)生時(shí),CPU就指向表1所描述的中斷向量地址。一旦中斷服務(wù)開(kāi)始,就只能夠被更高優(yōu)先級的中斷打斷。中斷服務(wù)程序由指令RETI終止,當執行RETI后,CPU將返回到中斷發(fā)生時(shí)的下一條指令。
當中斷發(fā)生時(shí),不管該中斷使能或禁止,CPU都會(huì )在中斷標志寄存器中設置中斷標志位。當中斷使能時(shí),首先設置中斷標志,然后在下一個(gè)指令周期,由硬件強行產(chǎn)生一個(gè)LCALL到對應的向量地址,運行中斷服務(wù)程序。
新中斷的響應,取決于該中斷發(fā)生時(shí)CPU的狀態(tài)。當CPU正在運行的中斷服務(wù)程序,其優(yōu)先級大于或等于新的中斷時(shí),新的中斷暫不運行,直至新的中斷的優(yōu)先級高于正在運行的中斷服務(wù)程序。中斷響應的時(shí)間取決于當前的指令,最快的為7個(gè)機器指令周期,其中1個(gè)機器指令周期用于檢測中斷,其余6個(gè)用來(lái)執行LCALL。
中斷標志
寄存器
Bit位
名稱(chēng)
初始化
讀/寫(xiě)
描述
TCON
7
URX1IF
0
R/W
H0
USART 1 RX中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
6
–
0
R/W
不使用
5
ADCIF
0
R/W
H0
ADC中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
4
–
0
R/W
不使用
3
URX0IF
0
R/W
H0
USART 0 RX中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
2
IT1
1
R/W
保留。必須一直設1。
1
RFERRIF
0
R/W
H0
RF TX/RX FIFO中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
0
IT0
1
R/W
保留。必須一直設1。
S0CON
7:2
–
000000
R/W
不使用
1
ENCIF_1
0
R/W
AES中斷。ENC有兩個(gè)中斷標志位,ENCIF_1和ENCIF_0。設置其中一個(gè)標志就好請求中斷服務(wù)。當AES協(xié)處理器請求中斷時(shí),兩個(gè)標志都有設置。
0:無(wú)中斷未決
1:中斷未決
0
ENCIF_0
0
R/W
AES中斷。ENC有兩個(gè)中斷標志位,ENCIF_1和ENCIF_0。設置其中一個(gè)標志就好請求中斷服務(wù)。當AES協(xié)處理器請求中斷時(shí),兩個(gè)標志都有設置。
0:無(wú)中斷未決
1:中斷未決
S1CON
7:2
–
000000
R/W
不使用
1
RFIF_1
0
R/W
RF一般中斷。RF有兩個(gè)中斷標志,RFIF_1和RFIF_0,設置其中一個(gè)標志就會(huì )請求中斷服務(wù)。當無(wú)線(xiàn)電請求中斷時(shí)兩個(gè)標志都有設置。
0:無(wú)中斷未決
1:中斷未決
0
RFIF_0
0
R/W
RF一般中斷。RF有兩個(gè)中斷標志,RFIF_1和RFIF_0,設置其中一個(gè)標志就會(huì )請求中斷服務(wù)。當無(wú)線(xiàn)電請求中斷時(shí)兩個(gè)標志都有設置。
0:無(wú)中斷未決
1:中斷未決
IRCON
7
STIF
0
R/W
睡眠定時(shí)器中斷標志位
0:無(wú)中斷未決
1:中斷未決
6
--
0
R/W
必須一直設0。
5
P0IF
0
R/W
端口0中斷標志
0:無(wú)中斷未決
1:中斷未決
4
T4IF
0
R/W
H0
定時(shí)器4中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
3
T3IF
0
R/W
H0
定時(shí)器3中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
2
T2IF
0
R/W
H0
定時(shí)器2中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
1
T1IF
0
R/W
H0
定時(shí)器1中斷標志。當中斷發(fā)生時(shí)設1,當CPU向量指向中斷服務(wù)例程時(shí)清0。
0:無(wú)中斷未決
1:中斷未決
0
DMAIF
0
R/W
DMA完成中斷標志
0:無(wú)中斷未決
1:中斷未決
IRCON2
7:5
–
000
R/W
不使用
4
WDTIF
0
R/W
看門(mén)狗定時(shí)器中斷標志
0:無(wú)中斷未決
1:中斷未決
3
P1IF
0
R/W
端口1中斷標志
0:無(wú)中斷未決
1:中斷未決
2
UTX1IF
0
R/W
USART 1 TX中斷標志
0:無(wú)中斷未決
1:中斷未決
1
UTX0IF
0
R/W
USART 0 TX中斷標志
0:無(wú)中斷未決
1:中斷未決
0
P2IF
0
R/W
端口2中斷標志
0:無(wú)中斷未決
1:中斷未決
4、中斷優(yōu)先級
中斷可劃分為6個(gè)中斷優(yōu)先組,每組的優(yōu)先級通過(guò)設置寄存器IP0和IP1來(lái)實(shí)現。為了給中斷(也就是它所在的中斷優(yōu)先組)賦值優(yōu)先級,需要設置IP0和IP1的對應位。
表4-1
端口
Bit位
名稱(chēng)
初始化
讀/寫(xiě)
描述
IP1
7:6
--
00
R/W
沒(méi)使用
5
IP1_IPG5
0
R/W
中斷第5組,優(yōu)先級控制位1,參考表4-3
4
IP1_IPG4
0
R/W
中斷第4組,優(yōu)先級控制位1,參考表4-3
3
IP1_IPG3
0
R/W
中斷第3組,優(yōu)先級控制位1,參考表4-3
2
IP1_IPG2
0
R/W
中斷第2組,優(yōu)先級控制位1,參考表4-3
1
IP1_IPG1
0
R/W
中斷第1組,優(yōu)先級控制位1,參考表4-3
0
IP1_IPG0
0
R/W
中斷第0組,優(yōu)先級控制位1,參考表4-3
IP0
7:6
--
00
R/W
沒(méi)使用
5
IP0_IPG5
0
R/W
中斷第5組,優(yōu)先級控制位0,參考表4-3
4
IP0_IPG4
0
R/W
中斷第4組,優(yōu)先級控制位0,參考表4-3
3
IP0_IPG3
0
R/W
中斷第3組,優(yōu)先級控制位0,參考表4-3
2
IP0_IPG2
0
R/W
中斷第2組,優(yōu)先級控制位0,參考表4-3
1
IP0_IPG1
0
R/W
中斷第1組,優(yōu)先級控制位0,參考表4-3
0
IP0_IPG0
0
R/W
中斷第0組,優(yōu)先級控制位0,參考表4-3
表4-2 優(yōu)先級設置
IP1_X
IP0_X
優(yōu)先級
0
0
0 – 最低級別
0
1
1
1
0
2
1
1
3 – 最高級別
中斷優(yōu)先級及其賦值的中斷源顯示在表4-3中,每組賦值為4個(gè)中斷優(yōu)先級之一。當進(jìn)行中斷服務(wù)請求時(shí),不允許被同級或較低級別的中斷打斷。
表4-3 中斷優(yōu)先組
組
中斷
IPG0
PEERR
RF
DMA
IPG1
ADC
T1
P2INT
IPG2
URX0
T2
UTX0
IPG3
URX1
T3
UTX1
IPG4
ENC
T4
P1INT
IPG5
ST
P0INT
WDT
當同時(shí)收到幾個(gè)相同優(yōu)先級的中斷請求時(shí),采用表4-4所列的輪流檢測順序來(lái)判定哪個(gè)中斷優(yōu)先響應。
表4-4中斷輪流檢測順序
中斷向量編號
中斷名稱(chēng)
0
RFERR
輪流檢測順序
↓
16
RF
8
DMA
1
ADC
9
T1
2
URX0
10
T2
3
URX1
11
T3
4
ENC
12
T4
5
ST
13
P0INT
6
P2INT
7
UTX0
14
UTX1
15
P1INT
17
WDT