我是arduino的新手(事实上是编程)。我正在考虑将arduino用于我的学术项目。在浏览它的数据表(来自Atmel的SAM3X8E数据表)时,我遇到了计时器,据说所有都是32位计数器。并且在再次转到0x0000之前它们会计数到0xFFFF。我有点困惑。它们不应该计数到0xFFFFFFFF(在变为零之前),因为它们是32位计数器。我认为16位计数器是一个计数到0xFFFF的计数器。 可能是我问的是愚蠢的,但请注意它。
提前致谢..
37.6功能描述 ,37.6.2 32位计数器 ,数据表中的页数:873
答案 0 :(得分:4)
也许我的图书馆可以帮助您:https://github.com/ivanseidel/DueTimer
另请阅读此帮助文件:https://github.com/ivanseidel/DueTimer/blob/master/TimerCounter.md
我知道这不是你想要的,但可能是你想要的最终结果。
答案 1 :(得分:1)
我无法在数据表或Atmel的应用笔记中找到任何反驳您观察结果的内容。这让我相信两件事之一:
数据表中的描述不完整。所描述的行为仅适用于低位字,并且完整的32位定时器按顺序从0x00000000递增到0xffffffff,溢出仅注册到最后16位。
行为完全如数据表中所述,软件可以将定时器计数器设置为0x00010000和0xffffffff之间的值,以便在定时器溢出0x0000ffff之前允许一次性更长的时间。
测试将告诉哪个行为是实际行为。
答案 2 :(得分:0)
你在他们的文档中发现了一个错误,但他们修复了它。
在当前版本的数据表中,现在位于第860页的第36.6.2节,它更有意义:
“当计数器达到值2 ^ 32-1并传递给零时,发生溢出......”