LPC2106 中斷系統(tǒng)
LPC2106/2105/2104包含3 個外部中斷輸入(EINT0 EINT1 EINT2 )??捎糜趯⑻幚砥鲝牡綦娔J絾拘?。
外設功率控制寄存器(PCONP – 0xE01FC0C4)PCONP寄存器允許將所選的外設功能關閉以實現節(jié)電的目的。有少數外設功能不能被關閉(看門狗定時器、GPIO、管腳連接模塊和系統(tǒng)控制模塊)。PCONP中的每個位都控制一個外設,見表 20。每個位所對應的外設編號見VPB 外設映射一節(jié)。
PCONP
功能
描述
復位值
0
保留
保留,用戶軟件不要向其寫入1。從保留位讀出的值未被定義。
NA
1
PCTIM0
該位為1 時,定時器0 使能。為0 時,定時器0 被關閉以實現節(jié)電
1
2
PCTIM1
該位為1 時,定時器1 使能。為0 時,定時器1 被關閉以實現節(jié)電
1
3
PCURT0
該位為1 時,UART0使能。為0 時,UART0被關閉以實現節(jié)電。
1
4
PCUART1
該位為1 時,UART1使能。為0 時,UART1被關閉以實現節(jié)電。
1
5
PCPWM0
該位為1 時,PWM0 使能。為0 時,PWM0 被關閉以實現節(jié)電。
1
6
保留
保留給PWM1 。用戶軟件不要向其寫入1。從保留位讀出的值未被
NA
7
PCI2C
該位為1 時,I
1
8
PCSPI
2
1
9
PCRTC
C 接口使能。為0 時,I
1
31:10
保留
2
NA
向量中斷控制器l ARM PrimeCell TM向量中斷控制器
l 32個中斷請求輸入
l 16個向量IRQ 中斷
l 16個優(yōu)先級,可動態(tài)分配給中斷請求
l 軟件中斷產生
向量中斷控制器(VIC)具有32個中斷請求輸入,可將其編程分為 3 類:FIQ 、向量IRQ 和非向量IRQ ??删幊谭峙錂C制意味著不同外設的中斷優(yōu)先級可以動態(tài)分配并調整。
快速中斷請求(FIQ )要求具有最高優(yōu)先級。如果分配給FIQ 的請求多于1 個,VIC 將中斷請求“相或”后向ARM處理器產生FIQ 信號。當只有一個中斷被分配為FIQ 時可實現最短的FIQ 等待時間,因為FIQ 服務程序只要簡單地啟動器件的處理就可以了。但如果分配給FIQ 級的中斷多于1 個,FIQ 服務程序從VIC 中讀出一個字來識別產生中斷請求的FIQ 中斷源是哪一個。
向量IRQ 具有中等優(yōu)先級。該級別可分配32個請求中的16個。32個請求中的任意一個都可分配到16個向量IRQ slot 中的任意一個,其中slot0 具有最高優(yōu)先級,而slot15 則為最低優(yōu)先級。
非向量IRQ 的優(yōu)先級最低。
VIC 將所有向量和非向量IRQ “相或”向ARM處理器產生IRQ 信號。IRQ 服務程序可通過讀取VIC的一個寄存器立即啟動并跳轉到相應地址。如果有任意一個向量 IRQ 發(fā)出請求,VIC 則提供最高優(yōu)先級請求IRQ 服務程序的地址,否則提供默認程序的地址。該默認程序由所有非向量 IRQ 共用。默認程序可讀取任何VIC 寄存器以確定哪個IRQ 被激活。
VIC 中所有的寄存器都為字寄存器。不支持字節(jié)和半字的讀和寫操作。
關于向量中斷控制器的其它信息請參閱ARMPrimeCell TM向量中斷控制器的相關文檔。
VIC 寄存器映射
地址
名稱
描述
訪問
復位值
0xFFFF F000
VICIRQStatus
IRQ 狀態(tài)。該寄存器讀出定義為IRQ 并使能的中斷的狀態(tài)。
RO
0
0xFFFF F004
VICFIQStatus
FIQ 狀態(tài)請求。該寄存器讀取定義為 FIQ 并使能的中斷的狀態(tài)。
RO
0
0xFFFF F008
VICRawIntr
所有中斷的狀態(tài)。該寄存器讀出32個中斷請求/ 軟件中斷的狀態(tài),不管中斷是否使能或分類。
RO
0
0xFFFF F00C
VICIntSelect
中斷選擇。該寄存器將32個中斷請求的每個都分配為FIQ 或IRQ 。
R/W
0
0xFFFF F010
VICIntEnable
中斷使能。該寄存器控制將32個中斷請求和軟件中斷中的哪些使能為FIQ 或IRQ 。
R/W
0
0xFFFF F014
VICIntEnClr
中斷使能清零。該寄存器允許軟件將中斷使能寄存器中的一個或多個位清零。
W
0
0xFFFF F018
VICSoftInt
軟件中斷。該寄存器的內容與32個不同外設的中斷請求“相或”。
R/W
0
0xFFFF F01C
VICSoftIntClear
軟件中斷清零。該寄存器允許軟件將軟件中斷寄存器中的一個或多個位清零。
W
0
0xFFFF F020
VICProtection
保護使能。該寄存器允許特權模式下運行的軟件對VIC 寄存器進行有限的訪問。
R/W
0
0xFFFF F030
VICVectAddr
向量地址。當發(fā)生一個 IRQ 中斷時,IRQ 服務程序可讀出該寄存器并跳轉到讀出的地址。
R/W
0
0xFFFF F034
VICDefVectAddr
默認向量地址。該寄存器保存了非向量中斷的中斷服務程序(ISR )地址。
R/W
0
0xFFFF F100
VICVectAddr0
向量地址0。向量地址寄存器0-15 保存了16個向量IRQ slot 的中斷服務程序地址。
R/W
0
0xFFFF F104
VICVectAddr1
向量地址1 寄存器
R/W
0
…
…
…
…
…
0xFFFF F13C
VICVectAddr15
向量地址15寄存器
R/W
0
0xFFFF F200
VICVectCntl0
向量控制0。向量控制寄存器0-15 分別控制16個向量IRQ slot 中的一個。Slot0優(yōu)先級最高,而Slot15優(yōu)先級最低。
R/W
0
~
~
~
~
~
0xFFFF F23C
VICVectCntl15
向量控制15寄存器
R/W
0
l 軟件中斷寄存器(VICSoftInt- 0xFFFFF018,讀/ 寫)
在執(zhí)行任何邏輯之前,將該寄存器的內容與32個不同外設的中斷請求相或。
1:強制產生與該位相關的中斷請求。
0:不強制產生中斷請求。向VICSoftInt寫入0 無效,見VICSoftIntClear。
l 軟件中斷清零寄存器(VICSoftIntClear- 0xFFFFF01C ,只寫)
該寄存器在不需讀取軟件中斷寄存器的情況下,可用軟件清零軟件中斷寄存器中的一個或多個位。
1:寫入1 清零軟件中斷寄存器的相應位,并解除強制的中斷請求。
0:寫入0 不會影響VICSoftInt 中的相應位。
l 所有中斷狀態(tài)寄存器(VICRawIntr- 0xFFFFF008 ,只讀)
1:對應位的中斷請求或軟件中斷聲明。
0:對應位的中斷請求或軟件中斷未聲明
l 中斷使能寄存器(VICIntEnable- 0xFFFFF010,讀/ 寫)
讀取該寄存器時,1 表示中斷請求使能為FIQ 或IRQ 。
當寫該寄存器時,1 使能中斷請求或軟件中斷,0無效。見VICIntEnClear寄存器(表2)
l 中斷使能清零寄存器(VICIntEnClr- 0xFFFFF014,只寫)
1:寫入1 清零中斷使能寄存器中的對應位并禁止對應的中斷請求。
0:寫入0 不影響中斷使能寄存器中的位
l 中斷選擇寄存器(VICIntSelect- 0xFFFFF00C,讀/ 寫)
1:對應的中斷請求分配為FIQ。
0:對應的中斷請求分配為IRQ 。
l IRQ 狀態(tài)寄存器(VICIRQStatus - 0xFFFFF000 ,只讀)
該寄存器讀取使能并分配為IRQ 的中斷請求的狀態(tài),它不對向量和非向量IRQ 進行區(qū)分。
1:對應位的中斷請求使能并分配為IRQ 并且聲明。
l FIQ 狀態(tài)寄存器(VICFIQStatus - 0xFFFFF004,只讀)
該寄存器讀取使能并分配為FIQ 的中斷請求的狀態(tài)。如果有超過一個請求分配為FIQ ,FIQ 服務程序可讀取該寄存器來確定是哪一個(幾個)請求被激活。
1:對應位的中斷請求使能并分配為FIQ 并且聲明。
l 向量控制寄存器0-15 (VICVectCntI0-15- 0xFFFFF200-23C ,讀/ 寫)
Slot0優(yōu)先級最高,Slot15 優(yōu)先級最低。在VICVectCntl寄存器中禁止一個向量IRQ slot 不會禁止中斷本身,中斷只是變?yōu)榉窍蛄康男问健?/p>
VICVectCntl0-15
功能
復位值
5
1:向量IRQ 使能,當分配的中斷請求或軟件中斷使能,被分配為IRQ 并聲明時,可產生一個唯一的 ISR 地址對應位的中斷請求使能并分配為FIQ 并且聲明。
0
4 : 0
IRQ slot 的中斷請求或軟件中斷的編號。作為一個良好的編程習慣,不要將把相同的中斷編號分配給多于一個使能的向量IRQ slot 。但如果這樣做了,當中斷請求或軟件中斷使能,被分配為IRQ 并聲明時,會使用slot 。 分配給此向量最低編號的
0
l 向量地址寄存器0-15 (VICVectAddr0-15- 0xFFFFF100-13C ,讀/ 寫)
這些寄存器保存16個向量IRQ slot 中斷服務程序的地址。當一個或多個分配為向量IRQ slot 的中斷請求使能,分配為IRQ ,聲明并時,服務程序讀取向量地址寄存器(VICVe cAddr )時會得到最高優(yōu)先級slot的IRQ寄存器值。
l 默認向量地址寄存器(VICDefVectAddr– 0xFFFF F034 ,讀/ 寫)
這些寄存器保存非向量IRQ 中斷服務程序的地址。當一個IRQ 服務程序讀取向量地址寄存器, 并且沒有IRQ slot 響應時,則返回該寄存器中的地址。
l 向量地址寄存器(VICVectAddr - 0xFFFFF030 ,讀/ 寫)
當發(fā)生一個IRQ中斷時。IRQ 服務程序可讀取該寄存器并跳轉到讀出的地址。
當任何分配給向量IRQ slot 的中斷請求或軟件中斷使能,分配為IRQ 并聲明時,讀取該寄存器將返回最高優(yōu)先級向量地址寄存器中的地址。否則返回默認向量地址寄存器中的地址。
l 保護使能寄存器(VICProtection - 0xFFFFF020 ,讀/ 寫)
運行在用戶模式下的軟件使用該1 位寄存器來控制對VIC 寄存器的訪問。
1:VIC 寄存器只能在特權模式下訪問。
0:VIC 寄存器可在用戶模式或特權模式下訪問。
中斷源下表列出了每一個外設功能的中斷源。每個外圍設備都有一條中斷線連接到向量中斷控制器,但有些可能擁有幾個內部中斷標志。單個中斷標志也有可能代表一個以上的中斷。
模塊
標志
VIC通道#
WDT
看門狗中斷(WDINT)
0
-
保留給軟件中斷
1
ARM內核
EmbeddedICE, DbgCommRx
2
ARM內核
EmbeddedICE, DbgCommTx
3
定時器0
匹配0-3(MR0, MR1, MR2, MR3 )
捕獲0-3(CR0, CR1, CR2, CR3 )
4
定時器1
匹配0-3(MR0, MR1, MR2, MR3 )
捕獲0-3(CR0, CR1, CR2, CR3 )
5
UART0
Rx線狀態(tài)(RLS )
發(fā)送保持寄存器空(THRE )
Rx數據可用(RDA)
字符超時指示(CTI)
6
UART1
Rx線狀態(tài)(RLS )
發(fā)送





