Cortex M0 LPC11C14中斷控制器

2021-06-22 13:57:07 字數 3721 閱讀 4793

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...