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