OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4587|回复: 4

关于全局中断的求助,INTX_DISABLE与__disable_irq

[复制链接]

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2018-8-14
在线时间
17 小时
发表于 2021-2-21 12:10:04 | 显示全部楼层 |阅读模式
1金钱
在sys.c里有下面开关中断的指令


//关闭所有中断(但是不包括fault和NMI中断)
__asm void INTX_DISABLE(void)
{
        CPSID   I
        BX      LR          
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
        CPSIE   I
        BX      LR  
}

这两个指令与__disable_irq    __enable_irq内核自带的函数有什么区别吗?我记得视频里有介绍,可是忘了是哪一集视频了

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-2-21 12:10:05 | 显示全部楼层
回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2018-8-14
在线时间
17 小时
 楼主| 发表于 2021-2-21 12:22:06 | 显示全部楼层
  1. static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
  2. __disable_irq(void) {
  3.   unsigned int cpsr;
  4. #if __ARM_ARCH >= 6
  5. #if defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M'
  6.   __asm__ __volatile__("mrs %[cpsr], primask\n"
  7.                        "cpsid i\n"
  8.                        : [cpsr] "=r"(cpsr));
  9.   return cpsr & 0x1;
  10. #else /* !defined(__ARM_ARCH_PROFILE) || __ARM_ARCH_PROFILE != 'M' */
  11.   __asm__ __volatile__("mrs %[cpsr], cpsr\n"
  12.                        "cpsid i\n"
  13.                        : [cpsr] "=r"(cpsr));
  14.   return cpsr & 0x80;
  15. #endif
  16. #else /* __ARM_ARCH < 6 */
  17.   unsigned int tmp;
  18.   __asm__ __volatile__(
  19.           "mrs        %[cpsr], CPSR\n"
  20.           "bic        %[tmp], %[cpsr], #0x80\n"
  21.           "msr        CPSR_c, %[tmp]\n"
  22.           : [tmp]"=r"(tmp), [cpsr]"=r"(cpsr));
  23.   return cpsr & 0x80;
  24. #endif
  25. }
复制代码


回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2018-8-14
在线时间
17 小时
 楼主| 发表于 2021-2-21 12:23:01 | 显示全部楼层
__asm void INTX_DISABLE(void)
{
        CPSID   I
        BX      LR         
}和__disable_irq是一样的
回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2018-8-14
在线时间
17 小时
 楼主| 发表于 2021-2-24 23:01:33 | 显示全部楼层

嗯嗯,看了源码感觉是一样的,那会儿忘了是原子哥的哪个视频里对这个有介绍了,还有想咨询一下,如果IAP升级的话,进入BOOTloader前是不是要把所有的中断都关闭了啊?等进入BootLoader后再初始化响应的中断,然后根据写的升级程序拷贝APP到内部flash中,拷贝完毕后关闭所有中断,然后跳转到APP,然后初始化APP
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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