完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试读出STM0.tiM0的当前计数器值,我的问题是,在读取计数器之前我需要禁用所有中断吗。 在我看来,读取计数器的处理可能会受到其他中断的影响,这可能会导致我从寄存器读取错误的值。 例如,当我只读出较低的 16 位计数器值时,就会触发一个中断,因此只有在处理中断函数后才能读出较高的 16 位值。 然后我得到一个错误的值。
有人能帮我解释一下吗? |
|
相关推荐
2个回答
|
|
STM0.TIM0 是一个 32 位寄存器。 完整的 32 位值可以用一条指令读取。 当使用一条指令执行访问时,无需禁用 IRQ。
如果对 TimX 寄存器进行了多次访问(例如 TIM0 和 TIM6 以获得完整的 64 位值),禁用 IRQ 不会阻止计时器增加。 因此,在多次读取访问时,SW 需要处理向较高寄存器部分的潜在增量/增量。 可以这样做(伪代码) uint32 high1, high2, low;do { high1 = TIM6; low = TIM0; high2 = TIM6;} while (high1 != high2);// "high1" together with "low" contain the 64-bit counter value. |
|
|
|
在读取STM0.TIM0的当前计数器值之前,你不需要禁用所有中断。读取计数器的处理只会受到中断的影响,如果一个中断在读取计数器的过程中触发,你可能会得到错误的值。
为了确保获取准确的计数器值,你可以在读取计数器之前禁用相关的中断,并在读取完成后重新启用它们。这样可以避免其他中断的干扰。具体的实现方法因应你所使用的编程语言和硬件平台而有所不同,你可以在官方文档或相关论坛上查询具体的方法。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之电阻屏触摸
899 浏览 0 评论
1438 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之I2C-RTC
622 浏览 0 评论
ATK-DLRK3588开发板deepseek-r1-1.5b/7b部署指南
3183 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第五十章 WiFi热点实验
997 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12397 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-25 04:26 , Processed in 0.551514 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191