STMicro是否错误地解释了术语"影子寄存器"?

时间:2017-01-23 18:05:57

标签: microcontroller stm32 stm32f7 nucleo

我使用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_BUFREGX有几个术语。

  • 通常,注册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

enter image description here

这个数字让我很困惑。我对术语&#34;影子寄存器&#34;有错误的解释,还是STMicroelectronics在编写本参考手册时出错了?

3 个答案:

答案 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 页)

  1. 活动寄存器实例(也称为影子寄存器实例):定时器外设逻辑使用其内容来生成定时器通道输出波形。
  2. 预加载寄存器实例:这是当相关寄存器的预加载功能启用时软件访问的寄存器实例。

所以,问题在于术语“影子寄存器”没有特定的和体系结构无关的含义。通常,该术语用于指代可以以相同方式寻址的多个硬件资源。其中哪一个是“真实”寄存器,哪一个是“影子”寄存器在架构和供应商之间并不一致,最终也可能不是很重要。