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