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.

[参考译文] TMS320F28379D:使用带有可变参数的 IACK 指令

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1108666/tms320f28379d-use-iack-instruction-with-variable-parameter

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

您好!

我想创建一个汇编函数、用 IACK 指令触发 CLA 任务。 此函数的参数中的任务位对应于我们要触发的任务。 但是 IACK 指令采用16位常量值作为参数、我不知道它是否可行、或者我是否应该为我要触发的每个任务具有一个函数。

在这里、原型和我编写的函数:

Fullscreen
1
void TRIGGER_TASK(const Uint16 ClaTaskBit);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
.page
.global TRIGGER_TASK
.text
TRIGGER_TASK:
IACK AL
LRETR
.endasmfunc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在这里、我得到的误差(因为我假设 AL 寄存器不是恒定的):

Fullscreen
1
2
3
4
5
6
7
8
9
10
>> Compilation failure
DRVCLA/SRC/subdir_rules.mk:30: recipe for target 'DRVCLA/SRC/TRIGGER_TASK.obj' failed
"../DRVCLA/SRC/TRIGGER_TASK.asm", ERROR! at line 32:
[E0003]
Syntax error - Operand 1
IACK AL
Errors in Source - Assembler Aborted
gmake: *** [DRVCLA/SRC/TRIGGER_TASK.obj] Error 1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Nathan、

    您使用汇编代码来触发任务的任何原因? CLA、h 有一个用于触发任务的 API。

    静态内联空
    CLA_forceTasks (uint32_t base、uint16_t taskFlags)

    其中'taskFlags"是要触发的任务。

    请参见以下位置的示例:

    \driverlib\f2837xd\examples\cpu1\cla

    IACK 仅接受 IACK #0x1等直接偏移、不采用寄存器参数。 因此、如果您需要使用汇编语言、则需要类似这样的东西(下面列出的伪代码);

    //如果 AH = 0x1 (创建用于检查条件的汇编代码并分支以更正 IACK 指令。

    IACK #0x1

    //如果 AH = 0x2

    IACK #0x2

    等等

    谢谢、

    Ashwini

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

    您好!

    感谢您的回答、我想使用汇编代码 ro 触发任务来使用 IACK 指令、并避免在 实时执行期间对 MIFRC 寄存器使用 EALLOW 和 EDIS。  

    Nathan