lpc11c14(cortex-m0)微控制器採用的是nvic(nested vectored interruptcontroller)中斷控制器
nvic中斷控制器有一下特點:
nvic是arm cortex-m0的乙個整合部分
緊耦合的方式中斷延遲低
可控制系統的異常及外設中斷
nvic中斷控制器支援32個中斷源
4個帶硬體優先順序遮蔽的可程式設計中斷優先順序
可以產生軟中斷
根據nvic的特點,我們能夠知道,採用緊耦合的方式比普通的中斷向量方式相應更快。如何實現緊耦合的中斷方式,我們需要看看nvic的相關資訊。
檢視lpc11c14的使用者手冊,對於中斷控制器的中斷源有如下描述
當產生外部中斷時,中斷源由nvic處理後再遞交給cortex-m0核心處理。
中斷源如下表所示:
從表中可以看到nvic支援的32個外部中斷源。
lpc11c14中斷優先順序如下所示
下圖所示的是lpc11c14的中斷向量表,由於採用的是緊耦合的中斷方式,所以對應的位址和中斷源的isr位址已經在向量表中確定下來,當有中斷產生時,可以根據向量表中isr位址直接跳到isr中做相應的中斷處理。
我們在cortex-m0啟動的時候,需要對其中斷向量表進行初始化。根據手冊上面的向量表圖,我們依次填入每個中斷源的isr位址(也就是中斷服務函式名)
__vectors dcd __initial_sp ; top of stack
dcd reset_handler ; reset handler
dcd nmi_handler ; nmi handler
dcd hardfault_handler ; hard fault handler
dcd memmanage_handler ; mpu fault handler
dcd busfault_handler ; bus fault handler
dcd usagefault_handler ; usage fault handler
dcd 0 ; reserved
dcd 0 ; reserved
dcd 0 ; reserved
dcd 0 ; reserved
dcd svc_handler ; svcall handler
dcd debugmon_handler ; debug monitor handler
dcd 0 ; reserved
dcd pendsv_handler ; pendsv handler
dcd systick_handler ; systick handler
; external interrupts
dcd wakeup_irqhandler ; 15 wakeup sources for all the
dcd wakeup_irqhandler ; i/o pins starting from pio0 (0:11)
dcd wakeup_irqhandler ; all 40 are routed to the same isr
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler
dcd wakeup_irqhandler ; pio1 (0:11)
dcd can_irqhandler ; can
dcd ssp1_irqhandler ; ssp1
dcd i2c_irqhandler ; i2c
dcd timer16_0_irqhandler ; 16-bit timer0
dcd timer16_1_irqhandler ; 16-bit timer1
dcd timer32_0_irqhandler ; 32-bit timer0
dcd timer32_1_irqhandler ; 32-bit timer1
dcd ssp0_irqhandler ; ssp0
dcd uart_irqhandler ; uart
dcd usb_irqhandler ; usb irq
dcd usb_fiqhandler ; usb fiq
dcd adc_irqhandler ; a/d converter
dcd wdt_irqhandler ; watchdog timer
dcd bod_irqhandler ; brown out detect
dcd fmc_irqhandler ; ip2111 flash memory controller
dcd pioint3_irqhandler ; pio int3
dcd pioint2_irqhandler ; pio int2
dcd pioint1_irqhandler ; pio int1
dcd pioint0_irqhandler ; pio int0
C 11多執行緒(1)
c 11中新增了duox多執行緒類,編寫c 程式可以直接使用c 11中的多執行緒庫,不必依賴於平台多執行緒,這樣可以方便寫出誇平台的多執行緒程式。多執行緒可以最大化利用計算機資源,提高 的執行效率。c 11中thread類提供兩個成員函式,join 和detach 函式。這兩個函式用來啟動建立的執行...
C 0x11中列舉的問題
c 11中新增的強型別列舉,確實可以解決此前版本中列舉的作用域問題,但是隨之也帶來一些其他問題。強型別列舉的宣告方式為 enum class enumname value1,value2 在編碼中,我以前比較習慣對列舉值應用位運算,比如 和 但是對於c 11中的強型別列舉,則無法再應用位運算。比如 ...
g 編C 11 C 0x遇到的問題
在看 cplusplus concurrency in action practical multithreading 當遇到第乙個樣品 include includevoid hello int main 我安裝了g 4.8版本號編譯器,支援c 11。使用命令列g 4.8 std c 11 lpt...