This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2806:为什么从密文存储器读取需要很多时间?

Guru**** 2390925 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/792482/tms320f2806-why-reading-from-pheripheral-memory-requires-a-lot-of-time

器件型号:TMS320F2806

大家好、

我想从 ePWM 寄存器中对寄存器进行3次连续读数、我注意到这需要很多时间。 我必须执行以下操作:

  1. 从 ePWM1读取 TBCTR 寄存器
  2. 从 ePWM1读取 TBSTS 寄存器
  3. 再次从 ePWM1读取 TBCTR 寄存器

执行这些操作将需要在100MHz 时钟时序上的16个周期、并且我只能预期3个周期。 为什么? 这是我的代码。 从我的 C 软件中、我调用一个 asm 函数、该函数的开头为:

_ePWMcouterRead:

;加载 periph。 页
MOVWDP、#_Perif ;periph 值为1a0h、ePWM1寄存器的地址

;读取计数器、1
个 MOVZAR0、@TBCTROff ;TBCTRoff 为0
;读取方向
MOVZAR4、@TBSTSOff ;TBSTSOff 为1
;读取计数器1
MOVUACC、@TBCTROff 

(笑声)

我的 ePWM 计数器配置为100MHz 计数器、无预分频器、1tick 为10ns。 为什么我在 ACC 中的价值高于 AR0乘以16的价值? 我本来只希望增加2倍,而不是16倍。 我无法理解这一点、如果我的寄存器中有一些设置、那么从密件寄存器读取的速度很慢、我也无法解除其故障。 同时使用 C 编写相同的代码、会产生相同的结果。 请提供提示、我确实很快就读出了这些值。

此致

Emanuele Peruzzi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、asm 函数是从闪存而不是从 RAM 运行的、从 RAM 运行会将差异从16个周期减少到6个周期。 但太多的 Alaways、为什么不是2?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这是读取接口协议的一部分。 CPU 的读取命令需要2个多周期。 由于 PWM 的时钟频率为100MHz (计时器时钟的一半)、因此您可以看到2种 预期的特性。

    此致、

    Vivek Singh