我正在研究 eTPU - ASH WARE eTPU2+ 开发工具使用的 4907 引擎控制演示。
首先,我想描述一下我的情况,然后我会提出我的问题。
我的情况:我在 CRANK 中添加了一个新函数,它的执行时间大约等于 3 微秒。由于新函数,CRANK函数的线程执行时间过长。这让我想知道 CRANK 线程的执行情况。在我的案例中,CRANK 线程不得被 SPARK 和 FUEL 通道线程的 HSR、LSR 或其他服务请求中断。CRANK 线程必须完成其执行。
问题 1:我想知道如果我们在线程执行时中断它会发生什么?为了找到答案,我在这里找到了什么。有什么我遗漏或错误的吗?
为了找到
问题1的答案,我阅读了ETPURM(见第7-1章)和MPC5642ARM(见第643页)文档。MPC5642ARPM 表示如下:
一旦一个线程开始,它的执行就不能被中断。当执行 END 微指令时,线程通常会结束。
ETPURM 说下面一个:
参见第 7-1 章:
线程一旦开始,它的执行就不能被另一个函数中断。主机可以停止执行。当执行 END 微指令时,线程结束。
请参阅第 10-1 章:
Halt 是一种微引擎状态,它在线程期间停止执行,或者不从空闲状态开始执行计划的线程。当在没有任何其他调度线程的情况下从 END 执行进入空闲状态时,微引擎通过以下任何事件进入暂停状态:
- HALT 微指令(软件断点)的执行。
- 通过调试接口的外部停止请求
- 另一个引擎进入停止状态并且它们被配置为同时停止(位 HTWIN 通过 Nexus 接口断言)。
- 出现任何硬件断点条件。
- 单步微指令的执行:微引擎在暂停状态下执行完一条微指令后返回暂停状态。
关于以上信息,
我了解到线程的执行不能被任何东西中断,但是它可以被主机停止。我认为停止不是我们在本主题中关心的问题,因为我想知道发布中的情况,而不是调试中的情况,并且使微引擎停止的事件具有调试目的。
问题2:中断线程的特性是否可以通过任何寄存器进行更改或配置?是否有任何寄存器允许线程被中断?
我检查了 ETPURM 和 MPC5642ARPM,但找不到任何寄存器来配置有关中断线程的功能。我所期待的是我可以选择线程的执行是否可以被中断。是否有任何寄存器可以让线程被中断?
问题3:是否可以在没有LSR或HSR的情况下,一个频道取消其他频道的服务请求? 我需要知道 SPARK 或 FUEL 服务请求是否可以在不通过 LSR 或 HSR 触发 CRANK 通道的情况下取消 CRANK 线程?
我知道一个通道中的LSR或HSR触发的线程可以取消同一个通道中的下一个线程。在这里查看我的其他问题:但是我想知道 SPARK 或 FUEL 服务请求是否可以在不通过 LSR 或 HSR 触发 CRANK 通道的情况下取消 CRANK 线程?