打印
[资料分享与下载]

【经验分享】IAR编译环境禁用NMI(不可屏蔽中断)

[复制链接]
4771|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_TICS_A 于 2014-10-21 15:31 编辑

IAR编译环境禁用NMI(不可屏蔽中断)

    继之前与大家分享了CW10.6编译环境下使用PE工具禁用KL25芯片NMI功能后,这次分享一下IAR6.6编译环境下禁用NMI功能的操作步骤。

    希望对大家有所帮助,不足之处欢迎指正,同时也欢迎大家分享自己的小经验。

问题起因:
    Kinetis芯片的不可屏蔽中断引脚NMI_b在电路设计时被作为GPIO与外部设备连接了。调试程序时才发现:哪怕通过引脚复选功能切换位(Pin Mux Control)将该引脚配置成GPIO功能,该引脚上的低电平还是会导致程序进入不可屏蔽中断,而这与当初把这NMI_b引脚作为GPIO的设计初衷不符。所以想寻找是否有这种 不改变硬件电路,仅通过软件程序禁用NMI功能 的可能?

解决方法:

    以KL25芯片为例打开参考手册KL25P80M48SF0RM,通过“6.3.2 FOPT boot options”(图1、图2)我们可以看到:只读寄存器FTFA_FOPT的NMI_DIS位显示NMI功能是否使能,而这个FTFA_FOPT寄存器的值在系统启动时会从flash configuration field的NVM's option byte处加载。
    根据提示再查看“27.3.1 Flash Configuration Field Description”(图3):Flash Configuration Field Byte Address为0x0040D处对应的1个字节就是之前提到的Flash nonvolatile option byte。
    那么若想禁用NMI_b引脚上的不可屏蔽中断功能,就需要将Flash Configuration Field处0x40D地址Bit 2的值改为0。

图1



图2



图3

操作步骤:
以下将演示IAR6.6编译环境中禁用KL25芯片NMI功能的操作步骤。此处将以KL25_SC例程包中E:\KL25 Sample Code\kl25_sc_rev10\klxx-sc-baremetal\build\iar\platinum工程演示。
1.使用IAR6.6编译环境打开该platinum工程,在cpu文件夹下的vectors.h中找到CONFIG_4定义段并将0x40D处值修改为0xfb;

由于IAR 6.6 为了防止用户在使用Kinetis过程中误操作导致芯片被锁死,默认将加密位Disable了。在烧录Flash的时候设了最后一道闸门,即将0x40C -0x40F的值统一成0xfffffffe (解密模式)。 而我们要修改的0x40D刚好因此被保护,故还需要修改Flash Loader配置。 

2. 打开IAR的Options配置框,选择Debugger的Download 标签,勾选如下图所示的选项,可以看到此项目中对应的.board文件。点击Edit按钮;


3. 在弹出的Flash Loader Overview对话框中选择0x0-0x1ffff对应条目,点击Edit按钮;


4. 在Flash Loader Configuration对话框中的Extra Parameters 项目中填写
“--enable_config_write”  它意味着打开了在烧录Flash的时候设置的最后一道闸门,使能了用户对字段“0x40C -0x40F”的配置。关于此参数选项含义,可以查看下面框中Parameter descriptions的描述;


5选择OK 后回到上级对话框,如下图可以看到“--enable_config_write”作为一个Extra Parameters显示出来;


6选择OK回到上层对话框,不用担心OK后修改的配置会替换Flash Loader中的默认配置,因为系统会自动保存刚才的修改到一个新的board文件,并存储到当前工程的文件目录中;


7选择Save保存后,再点击OK,然后开始下载。


8在Debug时的Memory窗口中找到0x40D地址处,也能够看到该处值已经被修改成了0xfb(即已经禁用了NMI不可屏蔽中断功能)。


附件为文档形式的<IAR编译环境禁用NMI不可屏蔽中断.pdf>
IAR编译环境禁用NMI不可屏蔽中断.pdf (1019.74 KB)





PS:本帖可从 飞思卡尔MCU论坛 置顶帖 飞思卡尔Kinetis资料大本营 飞思卡尔论坛支持小组【经验分享】总汇 链接进入。

相关帖子

沙发
FSL_TICS_Jeremy| | 2014-5-15 10:51 | 只看该作者
好资料啊,顶起!

使用特权

评论回复
板凳
mingcheng| | 2014-5-16 09:48 | 只看该作者
楼主懂得好多啊 佩服

使用特权

评论回复
地板
louyj| | 2014-5-16 11:42 | 只看该作者
学习了,谢谢分亨。

使用特权

评论回复
5
jxgxlm2008| | 2014-5-16 15:34 | 只看该作者
mark!下载学习下。

使用特权

评论回复
6
sblpp| | 2014-5-18 15:02 | 只看该作者
谢谢分享!

使用特权

评论回复
7
mical111| | 2014-7-2 18:33 | 只看该作者
似懂非懂

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2014-7-8 17:32 | 只看该作者
非常好的经验分享,欢迎大家一起学习探讨。

使用特权

评论回复
9
wksqx| | 2014-7-30 15:53 | 只看该作者
好资料。正遇到这个问题。谢谢

使用特权

评论回复
10
lipeide| | 2014-9-15 16:57 | 只看该作者
受教了,有没有demo下载?

使用特权

评论回复
11
FSL_TICS_Robin|  楼主 | 2014-9-15 17:12 | 只看该作者
lipeide 发表于 2014-9-15 16:57
受教了,有没有demo下载?

这个没有demo呢,只需按照帖子描述操作即可。
如果有问题欢迎回帖讨论。

使用特权

评论回复
12
walkersum| | 2014-9-16 19:00 | 只看该作者
具体的密码在哪里设置呀?

使用特权

评论回复
13
FSL_TICS_Robin|  楼主 | 2014-9-17 08:56 | 只看该作者
walkersum 发表于 2014-9-16 19:00
具体的密码在哪里设置呀?

walkersum 你好
此篇经验分享讲解了如何修改IAR配置以便真正实现修改地址为0x40C -0x40F的Flash Configuration Field区域。
请问你指的密码是什么?

使用特权

评论回复
14
walkersum| | 2014-9-17 18:38 | 只看该作者
就是给程序加密的密码呀?

使用特权

评论回复
15
FSL_TICS_Robin|  楼主 | 2014-9-18 14:54 | 只看该作者
walkersum 发表于 2014-9-17 18:38
就是给程序加密的密码呀?

我们还是到你的帖子里讨论如何secure KE02芯片吧。
https://bbs.21ic.com/icview-801464-1-1.html

使用特权

评论回复
16
yangmengfei90| | 2014-9-24 11:46 | 只看该作者
曾经被这个问题困扰过好久呢,感激不尽啊

使用特权

评论回复
17
FSL_TICS_Robin|  楼主 | 2014-12-2 15:37 | 只看该作者
yangmengfei90 发表于 2014-9-24 11:46
曾经被这个问题困扰过好久呢,感激不尽啊

不用客气呢
在论坛里就已经看到很多客户被不可屏蔽引脚困扰了,所以特地写了一下以便大家能够参考其解决方法。

使用特权

评论回复
18
niuyaliang| | 2014-12-28 15:21 | 只看该作者

使用特权

评论回复
19
haolaishi| | 2014-12-28 15:53 | 只看该作者

使用特权

评论回复
20
sunmeat| | 2014-12-28 16:19 | 只看该作者
支持一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

2439

帖子

13

粉丝