【分享】如何在IAR、Keil和Codewarrior中禁止掉Kinetis的NMI脚 【...

2020-02-20 20:09发布


原帖地址 http://blog.chinaaet.com/detail/38977
最近这段日子忙的不可开交,虽然一直在积累和酝酿要继续把技术经验分享出来,苦于一直没有得闲。这个周末终于可以安心下来,静静的写点东西出来,此刻坐在公司的工位上,旁边放着茶水,看着窗外的斜阳,咳咳,一下子赶脚自己又回到了当年的学生时代,慢慢的沉醉在其中。。。

    在进入正题之前,我不得不重提一下自己当初踏上写技术博客这条路的初衷,一方面是作为自己技术积累的一个记录(习惯养成),另一个方面也是主要的目的之一是弘扬技术经验分享的精神(虽然自己还是言小甚微,呵呵)。至于让我再次想起当年初衷的原因则是前段时间在一个坛子里看到一个学生在吐槽声讨自己的技术成果被别人抄袭(主角竟然是俺们Kinetis),哎,如果说看到前半段我还可以同情一下的话,那看到后半段那句“飞思卡尔Kinetis几乎是学生在用,而STM32则主要是工程师在用”时我的态度已经严肃了很多,作为资深的Kinetis用户和“飞丝”,我不得不感叹一下,同学,这个世界还是被你想的小了些。至于后来我也在反思关于“抄袭”这个问题,虽然我的博客也被多次不标注原作者的转载过很多次(连俺写的【原创】两个字都没去掉),但是如果换个角度去看,受益的人群也由此更多了,在技术的道路上,大家都在摸着石头过河,技术的发展源于积累,积累到质变的时候形成创新,而创新则因此大多是站在前人的肩膀上。当然,我不是在鼓吹抄袭,而是在推动技术分享的精神,如果大家都本着开源分享的精神去做技术,在你为别人打开一扇门的同时,也会有另一扇门在等着你。

    好了,吐槽完毕(主要是被那个同学给气的,呵呵,我前面说的有点含蓄了,实际我就是想说抄袭你说抄袭的事嘛,而上升到一个你不懂的层面装懂就不对了),开始进入正题吧。搞单片机的博友应该都会知道NMI的意思,即不可屏蔽中断,大多数半导体厂商一般情况下也不会舍弃这个管脚,其中我觉着有一部分是历史遗留问题,早期的单片机主频低,NMI中断用来保证特殊实时性的要求,而如今随着MCU主频和性能的不断提高(今年下半年ARM发布的Cortex-M7理论最高主频已经可以达到400MHz,接近MPU了已经),已经足以保证大多数中断的实时性。而NMI的属性问题即其中断不可屏蔽的特性也给原本不需要使用它的用户带来一些困扰,NMI管脚是低电平中断,因此如果不用它的话需要外部加上拉电阻(单片机内部有很弱的上拉,为保证可靠性,外部还是建议上拉4.7k或者10k电阻),更为头疼的是如果用户由于管脚资源不够想将NMI管脚复用成普通的GPIO而这个IO外接的元器件默认上电的属性为低电平则会造成单片机由于死在NMI中断中而启动不起来(因为NMI这个管脚上电默认是NMI功能,而单片机还没有来的及启动去重新配置该管脚为普通IO时就已经被迫进到NMI中断了)。呵呵,说了这么多,卖了半天关子,自然是有其解决办法的了,而且这个处理办法,飞思卡尔也已经为我们想好了,类似我之前写过的Flash加密的配置,如下图1,Kinetis可以通过FTFA_FOPT这个flash加载寄存器来禁掉NMI功能,而这个寄存器的值是在Kinetis复位之后立刻从Flash地址0x40D这个地址读取数据并赋给FTFA_FOPT这个寄存器的,因为我们只需要修改0x40D地址的数据即可以禁掉NMI功能。下面我就分别介绍下在IAR,Keil和Codewarrior这三大IDE环境下的配置方法:
6.png (7.19 KB, 下载次数: 0) 下载附件 2014-12-24 08:24 上传
呼呼,好久没写了不大好控制,一下子又写了这么多,只能期待大家慢慢消化了,呵呵。休息一下,准备下一篇,敬请期待,未完待续~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。