我使用STM32系列微控制器,更具体地说是该STM32F7
系列。目前,我正在研究通用计时器的使用。
关于双缓冲寄存器。
微控制器有时会使用双缓冲寄存器。这样,软件就可以在不引起麻烦的情况下写入和读取寄存器。下图说明:
buffered register: active register: -------------- -------------- | REGX_BUF | <-------> | REGX | -------------- -------------- | | | | SOFTWARE HARDWARE The software interacts Updates to and from the only with the buffered active register take place register. at specific moments (when it is 'safe'). synonyms: synonyms: - buffered register - active register - preload register - shadow register (?)
有几个方面两者REGX_BUF
并REGX
从上图中。
通常,寄存器REGX
称为“活动寄存器”。
寄存器REGX_BUF
有时称为“缓冲寄存器”。其他术语是“预加载寄存器”和“影子寄存器(?)”。
混乱解释了。
不幸的是,术语“影子寄存器”存在混淆。根据我从互联网上获得的一些资料,它指的是REGX_BUF
。但是在STM32F746微控制器的参考手册RM0385和STM32F767微控制器的RM0410中,我偶然发现了与“影子寄存器”一词完全相反的解释。它不是指REGX_BUF
,而是REGX
。
这是参考手册中的图片:
RM0385 -> chapter 23 General-purpose timers -> 23.3.2 Counter modes -> Fig 199
要么
RM0410 -> Chapter 26 General-purpose timers -> 26.3.2 Counter modes -> Fig 244
这个数字使我感到困惑。我是否对“影子寄存器”一词有错误的解释,或者是STMicroelectronics在编写本参考手册时出错了?
问题在于术语“影子寄存器”没有特定的且与体系结构无关的含义。
例如,ARM体系结构具有一组通用寄存器,您可以对其进行读写操作(R0-R12)。但是,如果输入中断处理程序上下文,则R8-R12会切换到“影子寄存器”。这意味着您仍然像在普通程序中一样对它们进行寻址,但是所访问的寄存器与在普通程序中使用的R8-R12完全不同。它们是专用的中断处理资源,因此您不必像通常那样处理保存和恢复寄存器。
某些PIC单片机允许您写入和读取引脚I / O的相同地址,但实际上,您写入的是与读取的地址不同的缓冲区,因为写入引脚不一定会立即更改其状态。这种配置使体系结构可以在等待写请求改变状态之前缓冲您的写请求。这些额外的缓冲区有时也称为影子寄存器,看起来与您的示例相似。使用您的示例中给出的术语,我想这将被称为“预加载寄存器”。
通常,该术语用于指代可以以相同方式寻址的多个硬件资源。其中哪一个是“真实”寄存器,哪个是“影子”寄存器在体系结构和供应商之间并不统一,最后可能也不是很重要。