OpenEdv-开源电子网

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

AVR 关全局中断的函数cli();的疑问

[复制链接]

41

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
624
金钱
624
注册时间
2016-12-16
在线时间
222 小时
发表于 2017-10-10 11:53:07 | 显示全部楼层 |阅读模式
1金钱
void system_set_exec_alarm(uint8_t code) {
  uint8_t sreg = SREG;
  cli();
  sys_rt_exec_alarm = code;
  SREG = sreg;
}
上面的这个函数的意思是不是这样
把状态寄存器的数据保存到sreg这里。
然后关全局中断的函数cli();
变量赋值
还原状态寄存器的值
后面为什么不调用sei();开中断呢?
ARM中怎么才能获得状态寄存器的值呢?

https://shop298719590.taobao.com/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-10-11 01:14:13 | 显示全部楼层
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-10-11 11:45:32 | 显示全部楼层
表面上看你说的意思是正确的,但是你说关了全局中断,为什么不开,这哪个知道呀,又不知道你干啥。至于ARM怎么获取就要去看相关手册的寄存器了。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-10-12
在线时间
2 小时
发表于 2017-10-12 16:41:51 | 显示全部楼层
顶!!
回复

使用道具 举报

0

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2013-1-7
在线时间
64 小时
发表于 2021-8-3 13:15:39 | 显示全部楼层
最近在学习grbl,开始同样有这个疑惑。为什么不用sei()?后来发现因为SREG = sreg;这个语句已经开中断了。uint8_t sreg = SREG;这个语句叫保存原始值。
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2022-6-16 16:32:45 | 显示全部楼层
SREG  就是中断开关寄存器呀,里面某位置1,就开放某个中断,里面某位置0,就关闭某个中断
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 23:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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