器件型号: AM625
您好:
我正在为 AM62x 开发固件、其中 PRU(ICSS-M、MCU 域)需要在将数据写入共享存储器后、通过硬件中断向 M4F 内核发送信号。 PRU 运行使用 ti-CGT-PRU 2.3.3 构建的裸机固件、M4F 端使用带有 DPL HwiP API 的 MCU+ SDK。
——
***设置摘要:**
PRU 侧 (PRU-software-support-package 6.4.0):
-系统事件 16 映射到通道 0、通道 0 映射到主机中断 6
-根据 AM62x TRM 表 10-11、主机中断 6 对应于 MCUSS NVIC 输入索引 51 (icssm0.pr1_host_intr_pend.6)
-通过以下方式触发中断:`__R31 =(uint32_t)(0x20 |(16 - 16));`
PRU INTC 初始化:
```c
CT_INTC.CH_MAP_REG4_BIT.CH_MAP_16 = 0; //事件 16→通道 0
CT_INTC.HINT_MAP_REG0_bit.HINT_MAP_0 = 6; //通道 0→主机 6
CT_INTC.STATUS_CLR_INDEX_REG_BIT.STATUS_CLR_INDEX = 16;
CT_INTC.ENABLE_SET_INDEX_REG_BIT.ENABLE_SET_INDEX = 16;
CT_INTC.HINT_ENABLE_SET_INDEX_REG_BIT.HINT_ENABLE_SET_INDEX = 6;
CT_INTC.GLOBAL_ENABLE_HINT_REG_BIT.ENABLE_HINT_ANYY = 1;
```μ s
M4F 端:
```c
//根据 SDK 文档:HwiP intNum = 16 + NVIC_IN_n = 16 + 51 = 67
#define PRU_TO_M4F_INT_NUM (16 + 51)
void PRU_IRQHandler(void *实参)
{
易失性 uint32_t *INTC_SICR =
(uint32_t *)(CSL_ICSSM0_PR1_ICSS_INTC_INTC_SLV_BASE + 0x24);
*INTC_SICR=16; //清除系统事件 16
//切换 GPIO 以进行调试
}
void setup_PRU_INTERRUPT (void)
{
HwiP_Params_init (&pruHwiParams);
pruHwiParams.intNum = PRU_TO_M4F_INT_NUM;
pruHwiParams.callback = PRU_IRQHandler;
pruHwiParams.priority = 4;
HwiP_construct (&pruHwiObj、&pruHwiParams);
}
```μ s
——
**问题:**
M4F 从不会进入`PRU_IRQHandler`。 确认 PRU 固件正在运行(GPIO 切换和 SPI 读取工作)。 HwiP 已成功注册(没有从`HwiP_construct`返回错误)。
**问题:**
`` intNum = 16 + 51 = 67 `在 M4F 上传递到` HwiP_construct `的正确值是否为` icssm0.pr1_host_intr_pend.6 μ s?
`CSL_ICSSM0_PR1_ICSS_INTC_INTC_SLV_BASE`是否需要经过`AddrTranslateP_getLocalAddr ()`、M4F 才能写入它?
除了 PRUSS INTC 在内部处理之外、主/MCU 中断路由器上是否需要任何其他配置来将 ICSS-M 主机中断 6 路由到 M4F NVIC?
4. MCU+ SDK 中是否有一个有效的示例专门演示 AM62x 上的 PRU 至 M4F 中断信号?
谢谢你。

