我使用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
被称为&#34;有效寄存器&#34;。REGX_BUF
有时称为&#34;缓冲寄存器&#34;。其他术语是&#34;预加载寄存器&#34;和#34;影子寄存器(?)&#34;。
解释混乱。
不幸的是,关于术语&#34;影子寄存器&#34;存在混淆。根据我从互联网上的几个来源读到的内容,它指的是REGX_BUF
。但是在STM32F746微控制器的参考手册RM0385和STM32F767微控制器的RM0410中,我偶然发现了这个术语&#34;影子寄存器&#34;的完全相反的解释。它不会引用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
这个数字让我很困惑。我对术语&#34;影子寄存器&#34;有错误的解释,还是STMicroelectronics在编写本参考手册时出错了?
答案 0 :(得分:5)
问题是术语&#34;影子寄存器&#34;没有特定的和与架构无关的含义。
例如,ARM体系结构有一组通用寄存器,可以写入和读取(R0-R12)。但是,如果输入中断处理程序,则R8-R12切换到&#34;影子寄存器。&#34;这意味着您仍然可以像在普通程序中那样对它们进行寻址,但是您正在访问与正常程序中使用的R8-R12完全不同的寄存器。他们专注于中断处理资源,因此您不必像平时那样处理保存和恢复寄存器。
某些PIC单片机允许您为引脚I / O写入和读取相同的地址,但实际上,您正在写入比读取的单独缓冲区,因为写入引脚可能不一定会改变它们马上说。这种配置允许架构在等待它可以改变引脚状态时缓冲写请求。这些额外的缓冲区有时也称为影子寄存器,看起来与您的示例类似。使用示例中给出的术语,我认为这将被称为&#34;预加载寄存器。&#34;
通常,该术语用于指代可以以相同方式处理的多个硬件资源。其中哪一个是&#34;真实&#34;注册,哪个是&#34;影子&#34;寄存器在架构和供应商之间并不一致,最终可能也不是很重要。
答案 1 :(得分:2)
实际上ST定义了它的标准:( General Timer Cookbook 的第14页)
原始文件是ST AN4776应用说明 - 可以找到here
答案 2 :(得分:1)
我已经总结了以上所有问题和答案: 微控制器有时会使用双缓冲寄存器。这样,软件就可以对寄存器进行读写操作而不会造成麻烦。下图说明:
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 (?)
在某些手册中,“影子寄存器”是“预加载寄存器”的同义词:这是与软件交互的寄存器。 --- “活动寄存器”是与硬件交互的寄存器。 STMicro 手册中的图将术语“影子寄存器”解释为“预加载寄存器”的同义词,而不是“活动寄存器”的同义词。 但是,ST 定义了其标准:(General Timer Cookbook 的第 14 页)
所以,问题在于术语“影子寄存器”没有特定的和体系结构无关的含义。通常,该术语用于指代可以以相同方式寻址的多个硬件资源。其中哪一个是“真实”寄存器,哪一个是“影子”寄存器在架构和供应商之间并不一致,最终也可能不是很重要。