OpenEdv-开源电子网

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

关于原子哥例程sys.c文件里开关中断的疑问

[复制链接]

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
发表于 2020-10-28 09:14:27 | 显示全部楼层 |阅读模式
5金钱
首先谢谢大家帮助~
以下是原子哥写的开关中断的程序,我不能理解volatile("cpsid i")到底是怎么起作用的。cm3权威手册里是说,CPSID I; PRIMASK=1。这个cpsid i我知道,但是volatile有什么用,声明关键字?直接写CPSID I不行吗。
__ASM volatile("wfi")这一句wfi是起什么作用,我没找到原文。



void WFI_SET(void)

{
__ASM volatile("wfi");   
}

void INTX_DISABLE(void)
{   
__ASM volatile("cpsid i");
}

void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");   
}

最佳答案

查看完整内容[请看2#楼]

直接这么用就行了,汇编在c里面的写法,你可以在mdk帮助里面,找找相关参考
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-10-28 09:14:28 | 显示全部楼层
直接这么用就行了,汇编在c里面的写法,你可以在mdk帮助里面,找找相关参考
回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-10-29 15:52:52 | 显示全部楼层
找到了这么一段,   __asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号里面是汇编指令。
所以说是告诉编译器,后面的是汇编,不要优化。
回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-10-29 16:05:05 | 显示全部楼层
CPU_WaitForInt
        WFI                                     ; Wait for interrupt
        BX      LR
这是wfi的代码,进入低功耗,等待中断,然后LR那里存储函数地址,所以他会继续执行。
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
发表于 2023-6-15 17:57:56 来自手机 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 07:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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