Cortex-M3异常中断及向量表定义
Cortex‐M3 支持大量異常,包括16‐4‐1=11 個系統異常,和最多240 個外部中斷——簡稱IRQ。具體使用了這240 個中斷源中的多少個,則由芯片制造商決定。由外設產生的中斷信號,除了SysTick 的之外,全都連接到NVIC 的中斷輸入信號線。典型情況下,處理器一般支持16 到32 個中斷,當然也有在此之外的。作為中斷功能的強化,NVIC 還有一條NMI 輸入信號線。NMI 究竟被拿去做什么,還要視處理器的設計而定。在多數情況下,NMI 會被連接到一個看門狗定時器,有時也會是電壓監視功能塊,以便在電壓掉至危險級別后警告處理器。NMI 可以在任何時間被激活,甚至是在處理器剛剛復位之后。
作為中斷功能的強化,NVIC 還有一條NMI 輸入信號線。NMI 究竟被拿去做什么,還要視處理器的設計而定。在多數情況下,NMI 會被連接到一個看門狗定時器,有時也會是電壓監視功能塊,以便在電壓掉至危險級別后警告處理器。NMI 可以在任何時間被激活,甚至是在處理器剛剛復位之后。
下表列出了Cortex-M3可以支持的所有異常和外部中斷清單。有一定數量的系統異常是用于fault處理的,它們可以由多種錯誤條件引發。NVIC還提供了一些fault狀態寄存器,以便于fault服務例程找出導致異常的具體原因。
當CM3內核響應了一個發生的異常后,對應的異常服務例程(ESR)就會執行。為了決定ESR的入口地址,CM3使用了“向量表查表機制”。這里使用一張向量表。向量表其實是一個WORD(32位整數)數組,每個下標對應一種異常,該下標元素的值則是該ESR的入口地址。向量表在地址空間中的位置是可以設置的,通過NVIC中的一個重定位寄存器來指出向量表的地址。在復位后,該寄存器的值為0。因此,在地址0處必須包含一張向量表,用于初始時的異常分配。
舉個例子,如果發生了異常11(SVC),則NVIC會計算出偏移移量是11x4=0x2C,然后從那里取出服務例程的入口地址并跳入。要注意的是這里有個另類:0號類型并不是什么入口地址,而是給出了復位后MSP的初值。
總結
以上是生活随笔為你收集整理的Cortex-M3异常中断及向量表定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无法建立跟远程计算机的连接,彻底解决wi
- 下一篇: FreeModbus离散量输入