hi 大家好
大秀場維多利亞的秘密大家就聽得多,但是NMI的秘密,您又知多少呢? come on 北鼻! 看這里
NMI引腳是芯片的不可屏蔽中斷引腳,當啟用此功能時,NMI引腳低電平自動觸發NMI中斷,此中斷優先級高于用戶的所有中斷優先級。
NMI引腳是芯片的不可屏蔽中斷引腳,Kinetis芯片默認是使能NMI功能的(低電平有效),通常該引腳內部具有較小的內部上拉電阻,從大部分的應用來看,這個引腳的作用主要有兩種,作為類似GPIO的中斷引腳和作為低功耗喚醒引腳。
但是對于大部分應用來說,往往不需要這個引腳,特別是對于小封裝的芯片,IO資源比較緊張,往往會考慮把這個復用功能的引腳用作GPIO, FTM等功能,但是由于這個引腳的特殊性(默認使能了NMI中斷功能),往往會對應用帶來麻煩。此處舉例子來說明。 如果把這個引腳配置成GPIO輸入用于檢測外部按鍵輸入,默認狀態下拉到GND,原本打算在程序中把NMI功能Disable掉,配置成GPIO功能,但事實情況是還未等程序執行到配置該引腳到GPIO功能時,由于外部接低,已經導致芯片進入NMI中斷,導致程序進入Default中斷。更為煩惱的是,有些時候還會導致無法連接SWD下載,而且這個原因往往比較隱蔽,很難發現。所以,這個引腳如果復用為其它功能,一定要多加小心。
Kinetis提供了兩種方法去Disable NMI的中斷功能:第一種:在MCU復位結束之后,在main函數中把該引腳配置成其它功能,等同于去使能NMI功能;第二種:在MCU復位之前Disable,對于大部分的Kinetis芯片來說,其工作原理是,MCU在處于復位狀態時會把位于0x40D的flash nonvolatile option 配置字節的內容拷貝到FTFA_FOPT寄存器中。關于FTFA_FOPT中NMI的定義如下圖:
在Keil工程下禁用NMI功能可以直接通過修改啟動文件(.s)文件中flash配置域中的FOPT由原來的0xFF改為0xFB即可。
需要注意的是,KE是飛思卡爾5V系列的ARM內核芯片,其主要定位在于兼容替代原有的S08系列MCU,所以在內部外設設計上與S08有點類似,同樣在NMI的使用相對其他的Kinetis系列芯片也是有些特殊的,簡而言之,KE的NMI只能在RESET后去Dsable其默認的NMI功能,而不能向KL那樣在復位BOOT流程時去Disable其功能。
|