首页 论坛 原厂专区 NXP(freescale) MCU 【经验分享】IAR编译环境禁用NMI(不可屏蔽中断)

发帖 回复

[资料] 【经验分享】IAR编译环境禁用NMI(不可屏蔽中断)
739 查看
2 回复
 楼主 | 发布于 2020-10-10 | 只看楼主
分享到:
问题起因:
    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不可屏蔽中断功能)。

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报

回复于 2020-10-10 沙发

感谢分享
(0 )
评论 (0) 举报

回复于 2023-05-28 2#

资料很有用
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部