在 Assembly 中为德克萨斯入侵微控制器编写延迟函数



我正在编写一个 TI TMS320F28379D 微控制器。我需要编写一个延迟函数,其中时间单位是 CPU 周期。德州仪器提供了已经在汇编中实现的延迟功能。在这里:

_F28x_usDelay:
SUB  ACC, #1
BF   _F28x_usDelay, GEQ
LRETR

通常我用C和C++编码,我对汇编只有基本的了解。这个功能非常简单。第一条指令从累加器寄存器中减去1,然后分支指令BF用于一次又一次地循环,而累加器中存储的值大于或等于0。LRETR只是一个返回指令。

现在,必须知道每个循环需要多少个 CPU 周期。TI 代码附带以下文档:

有一个 9/10 周期开销,每个循环需要五个周期。循环计数由以下公式给出: DELAY_CPU_CYCLES = 9 + 5*循环计数

我不明白什么是"9/10 周期开销",以及为什么要加 9 来获得DELAY_CPU_CYCLES。谁能向我解释一下?谢谢。

此链接描述了在此上下文中开销通常意味着什么。

在此示例中,开销是循环中未包含的周期,这些周期是用于调用函数和从函数返回的周期。 根据记录的等式,执行循环的单次迭代需要 5 个周期,仅调用和返回函数就需要 9 个周期的开销。 例如,LRETR 指令不是循环的一部分,而是开销的一部分。

也许描述中的"9/10"意味着"9或10"。 也许调用和返回函数的开销需要 9 或 10 个周期,具体取决于调用它的位置或管道问题。

最新更新