查看: 11152|回复: 31

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

[复制链接]
  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
    发表于 2014-5-14 16:35:14 | 显示全部楼层 |阅读模式
        继之前与大家分享了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。

    6.3.2 FOPT boot options1.jpg  
    图1
     
    6.3.2 FOPT boot options.jpg  
    图2
     
    27.3.1 Flash Configuration Field Description.jpg  
    图3
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
     楼主| 发表于 2014-5-14 16:35:16 | 显示全部楼层

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

    操作步骤
        以下将演示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;
    CONFIG_4 NMI_DIS.jpg
     
         由于IAR 6.6 为了防止用户在使用Kinetis过程中误操作导致芯片被锁死,默认将加密位Disable了。在烧录Flash的时候设了最后一道闸门,即将0x40C -0x40F的值统一成0xfffffffe (解密模式)。 而我们要修改的0x40D刚好因此被保护,故还需要修改Flash Loader配置。 
     
    2. 打开IAR的Options配置框,选择Debugger的Download 标签,勾选如下图所示的选项,可以看到此项目中对应的.board文件。点击Edit按钮;
    Options Debugger board Edit.jpg


    3. 在弹出的Flash Loader Overview对话框中选择0x0-0x1ffff对应条目,点击Edit按钮;
    Flash Loader Edit.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
     楼主| 发表于 2014-5-14 16:35:50 | 显示全部楼层

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

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

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

    6.选择OK回到上层对话框,不用担心OK后修改的配置会替换Flash Loader中的默认配置,因为系统会自动保存刚才的修改到一个新的board文件,并存储到当前工程的文件目录中;
    Flash Loader Edit chaned save as.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
     楼主| 发表于 2014-5-14 16:36:01 | 显示全部楼层

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

    7.选择Save保存后,再点击OK,然后开始下载。
    Options Debugger board Edit OK.jpg
     
    8.在Debug时的Memory窗口中找到0x40D地址处,也能够看到该处值已经被修改成了0xfb(即已经禁用了NMI不可屏蔽中断功能)。
    0x40D in memory.jpg
     
    附件是pdf版本的《IAR编译环境禁用NMI(不可屏蔽中断)》文档
    IAR编译环境禁用NMI不可屏蔽中断.pdf (992.29 KB, 下载次数: 110)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    11126
    最后登录
    2019-1-27
    发表于 2014-5-15 08:58:47 | 显示全部楼层

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

    好资料,很详细
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
     楼主| 发表于 2014-5-15 11:01:16 | 显示全部楼层

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

    回复第 5 楼 于2014-05-15 08:58:47发表:
    好资料,很详细 

    谢谢小七的支持
    我们的经验分享帖就是为了让大家能够解决常见的问题,避免大伙绕弯路。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    68

    主题

    313

    帖子

    0

    高级会员

    Rank: 4

    积分
    622
    最后登录
    1970-1-1
    发表于 2014-5-15 14:10:28 | 显示全部楼层

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

     学习看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-6-9 17:24
  • 签到天数: 1 天

    [LV.1]初来乍到

    21

    主题

    65

    帖子

    0

    注册会员

    Rank: 2

    积分
    178
    最后登录
    2019-7-18
    发表于 2014-5-15 16:14:03 | 显示全部楼层

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

     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11

    主题

    354

    帖子

    0

    高级会员

    Rank: 4

    积分
    673
    最后登录
    1970-1-1
    发表于 2014-5-16 17:16:57 | 显示全部楼层

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

    学习一下
    NMI引脚有点坑,大学时用XS128就被坑过。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    78
    最后登录
    2021-10-29
    发表于 2014-5-22 10:48:44 | 显示全部楼层

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

     3x
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-2 21:50 , Processed in 0.143037 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表