查看: 4359|回复: 8

[已解决] 有关PE生成初始化程序开中断的问题(已解决)

[复制链接]

该用户从未签到

10

主题

47

帖子

0

注册会员

Rank: 2

积分
144
最后登录
1970-1-1
发表于 2013-10-27 12:17:05 | 显示全部楼层 |阅读模式
 问个开全局中断的问题
我的初始化程序由PE生成,一直以为NVICISER1 |= NVIC_ISER_SETENA(0x40000000)只是设置全局中断,并不真正打开中断,而Cpu_SetBASEPRI(0U)是来打开全局中断的。
 
今天调试发现,怎么在模块的初始化过程就进了中断。再仔细看Cpu_SetBASEPRI(0U),这句到底是啥意思,也没完全整明白,是设置优先级吗,好像也不是。
 
如果NVICISER1 |= NVIC_ISER_SETENA(0x40000000)就能打开中断,那模块初始化过程在后,这样不是有问题吗?
因为一般设计程序都是对各个模块初始化完成之后,再开全局中断。到底这里是怎么回事?  
t5.JPG
我知道答案 目前已有7人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-28 09:46:03 | 显示全部楼层

    RE:有关PE生成初始化程序开中断的问题

    我这里没有CW10,根据你的描述,这个应该是设置中断优先级的。配置过程中建议最后开启中断。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2013-10-28 10:54:57 | 显示全部楼层

    RE:有关PE生成初始化程序开中断的问题

    在对中断精巧的设计中,需要对中断掩蔽进行细腻的控制——只掩蔽优先级低于某一阈值的中断——它们的优先级在数字上大于等于某个数。那么这个数存储在哪里?就存储在BASEPRI中。不过,如果往BASEPRI中写0,则另当别论——BASEPRI将停止掩蔽任何中断。(可参考相Cotex M3的相关文档。)也就是Cpu_SetBASEPRI(0U)起着类似“使能所有中断”的作用。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    47

    帖子

    0

    注册会员

    Rank: 2

    积分
    144
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-28 11:20:50 | 显示全部楼层

    回复:有关PE生成初始化程序开中断的问题

    回复第 3 楼 于2013-10-28 10:54:57发表:
    在对中断精巧的设计中,需要对中断掩蔽进行细腻的控制——只掩蔽优先级低于某一阈值的中断——它们的优先级在数字上大于等于某个数。那么这个数存储在哪里?就存储在BASEPRI中。不过,如果往BASEPRI中写0,则另当别论——BASEPRI将停止掩蔽任何中断。(可参考相Cotex M3的相关文档。)也就是Cpu_SetBASEPRI(0U)起着类似“使能所有中断”的作用。
     

    你的意思就是Cpu_SetBASEPRI(0U)这一句才能使能所有中断,但我遇到的情况怎么解释?我仿真跟踪的结果确实是在这一句之前就进了中断,是其他哪里的配置有问题吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2013-10-28 11:50:32 | 显示全部楼层

    回复:有关PE生成初始化程序开中断的问题

     你有点误会我的意思,Cpu_SetBASEPRI(0U)代码的意思应该是停止屏蔽中断功能,即所有中断都可以被响应。在代码中有点类似全局中断使能的意思,但与原来我们理解的全局中断使能有本质的区别,那个全局中断使能像一个总的开关,控制着所有中断。
    附上BASEPRI寄存器介绍,希望对你理解有帮助。
    1.jpg
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    47

    帖子

    0

    注册会员

    Rank: 2

    积分
    144
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-28 14:13:43 | 显示全部楼层

    回复:有关PE生成初始化程序开中断的问题

    回复第 5 楼 于2013-10-28 11:50:32发表:
     你有点误会我的意思,Cpu_SetBASEPRI(0U)代码的意思应该是停止屏蔽中断功能,即所有中断都可以被响应。在代码中有点类似全局中断使能的意思,但与原来我们理解的全局中断使能有本质的区别,那个全局中断使能像一个总的开关,控制着所有中断。
    附上BASEPRI寄存器介绍,希望对你理解有帮助。

     

    我明白原因在哪了,看到BASEPRI的解释我就明白了,首先请问这个截图的文档在哪,麻烦给个链接。
    其次,我把我的理解写在下面,看正确否,顺便再问几个问题:
    BASEPRI是一个屏蔽中断的寄存器,如果往里面写一个不为0的值,比如3,那么就会屏蔽等级为3和比等级3还低的中断。如果写0.,就会放开所有中断的屏蔽(包括等级为0的中断),所以0等级的中断无法屏蔽的。
    造成我上面叙述现象的原因,就是我把我所有需要的中断等级都设成0了,所以程序运行到NVICISER1 |= NVIC_ISER_SETENA(0x40000000)就已经打开了中断,因为0等级的中断是无法屏蔽的。我实验把等级改成1,证明程序运行Cpu_SetBASEPRI(0U)才打开了中断。
    这里问个问题:RESET之后,BASEPRI是个什么状态,它默认屏蔽哪个等级的中断,是等级1(含比等级1低的中断)吗?
    实际编写程序,所需中断是不是一般都不要设成0,否则会造成我上面描述的现象?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2013-10-28 17:30:20 | 显示全部楼层

    RE:有关PE生成初始化程序开中断的问题

    1.那个文档出自自ARM Cortex-M3权威指南,你可以到ARM官网下载,(www.arm.com)
    2.至于BASEPRI我也不太清楚,建议可以向ARM公司的AE求助。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    47

    帖子

    0

    注册会员

    Rank: 2

    积分
    144
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-29 08:49:00 | 显示全部楼层

    回复:有关PE生成初始化程序开中断的问题

    回复第 7 楼 于2013-10-28 17:30:20发表:
    1.那个文档出自自ARM Cortex-M3权威指南,你可以到ARM官网下载,(www.arm.com)
    2.至于BASEPRI我也不太清楚,建议可以向ARM公司的AE求助。 

    已经非常感谢了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2013-10-29 09:05:07 | 显示全部楼层

    RE:有关PE生成初始化程序开中断的问题

    不用客气!!以后有问题,欢迎继续论坛讨论!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 15:44 , Processed in 0.113153 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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