根据 OMAP5912 TRM、我可以在 C55x 端执行 IDLE 指令、程序在那里停止、但 ARM_SYSST 寄存器中的 IDLE_DSP 位从未有效。 希望像我一样仍有人支持 OMAP5912、我们可以进行详细讨论。
TRM 第193页:
4.3.2 DSP 空闲控制
DSP 空闲指令必须在仅主机模式(HOM)下执行才能启动 DSP 空闲模式。 根据 DSP 空闲控制寄存器(DSP_IDLECT1和 DSP_IDLECT2)的设置、DSP 子系统的不同部分在 IDLE 指令被执行时进入空闲模式。
以下过程描述了 DSP 如何进入空闲模式:
1) 1)禁用看门狗计时器。
当定时器/安全装置定时器被配置为一个安全装置时、它的时钟(CK_REF/14)永远不会被关闭。
2) 2)通过将 DSP_IDLECT2寄存器中的相应位设置为0来禁用以下 DSP 外设时钟。
_ DSP 外部外设时钟
_外部基准外设时钟
无论是否启用 DSP 时钟、这都会立即禁用时钟。 或将 DSP_IDLECT1对应的位设置为1、这仅在禁用 DSP 时钟时禁用 DSP 外设时钟。
3) 3)将 DSP TIPB 和 MPUI 切换到共享访问模式(SAM)。
4) 4)对 DSP 空闲控制寄存器进行编程、以将所有 DSP 子系统域置于空闲模式。
5) 5)将 DSP TIPB 和 MPUI 切换到仅主机模式。
6) 6)执行 IDLE 指令。
7) 7)当 ARM_SYSST 寄存器中的 IDLE_DSP = 1时、DSP_CK 停止。
TRM 第616页:
2) 2) DSP 激活至非激活状态转换
a) DSP 电源域处于活动状态。
b) MPU 通过邮箱或共享存储器请求 DSP 进入闲置模式以进入闲置状态、或者 DSP OS 进入空闲进程。
c) DSP 对 DSP 的 ICR 寄存器进行编程、以关闭所有兆单元子域时钟。
d) DSP 对 OMAP3.2 CLKRST 模块的 DSP_IDLECT1和/或 DSP_IDLECT2进行编程、以设置 OMAP3.2 DSP 时钟子域(CLKM2)的状态(这些子域属于 MPU 电源域、必须由 MPU 请求)。
e) DSP 屏蔽/解除屏蔽 DSP 中断处理程序中的中断以确保一个唤醒路径。
f) DSP 执行 IDLE 指令。
g) DSP 输入时钟(DSP_CK)由 OMAP CLKRST 模块自动关闭。
h) DSP 电源域处于非活动状态。 MPU 可以通过监控 OMAP3.2 CLKRST 模块的 ARM_SYSST 寄存器中的 IDLE_DSP 位来检测转换何时完成。
