1
完善资料让更多小伙伴认识你,还能领取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的当前计数器值之前,你不需要禁用所有中断。读取计数器的处理只会受到中断的影响,如果一个中断在读取计数器的过程中触发,你可能会得到错误的值。
为了确保获取准确的计数器值,你可以在读取计数器之前禁用相关的中断,并在读取完成后重新启用它们。这样可以避免其他中断的干扰。具体的实现方法因应你所使用的编程语言和硬件平台而有所不同,你可以在官方文档或相关论坛上查询具体的方法。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11992 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 21:22 , Processed in 0.913145 second(s), Total 75, Slave 58 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号