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.
大家好、
以下是客户提出的问题、可能需要您的帮助:
调试 am263x IPC_NOTIFY 功能时会出现以下问题:
1) 在第二步中、内核0的 IPC 寄存器 READ_REQ 的相应位设置为1、但 Core0不会输入中断(中断配置已经使用函数 vimTriggerSoftInt 进行了测试、可以触发进入、即中断配置正常)。
2) 2)进入中断后、需要清除中断标志位、具体而言、要清除哪个寄存器? 参考 SDK 的例程是清除标志位写入完成。 但实际上、它是读取请求。
中断配置如下:
Vim_IntCfg intCfg; intCfg.map = VIM_INTTYPE_IRQ; intCfg.type = VIM_INTTRIGTYPE_LEVEL; intCfg.intNum = MSS_CR5A_MBOX_RD_REQ; intCfg.handler = IPC_CoreReqHandle; intCfg.priority = VIM_PRIORITY_3; vimRegisterInterrupt(&intCfg); vimEnableInterrupt(MSS_CR5A_MBOX_RD_REQ); intCfg.map = VIM_INTTYPE_IRQ; intCfg.type = VIM_INTTRIGTYPE_PULSE; intCfg.intNum = MSS_CR5A_MBOX_RD_ACK; intCfg.handler = IPC_CoreReqHandle; intCfg.priority = VIM_PRIORITY_3; vimRegisterInterrupt(&intCfg); vimEnableInterrupt(MSS_CR5A_MBOX_RD_ACK);
触发代码:(省略了对共享存储器部分的写入、此函数指示目标内核在写入共享存储器后读取数据)
void IPC_NotifyCoreWriteDown( uint32_t TarCore) { uint32_t mailboxBaseAddr, intrBitPos; IpcNotify_SwQueue *swQ; IPC_GetNotifyMailboxAddr(&TarCore, &mailboxBaseAddr, &intrBitPos, &swQ); volatile uint32_t *addr = (uint32_t *)mailboxBaseAddr; *addr = (1<<intrBitPos); }
您可以帮助检查此案例吗? 谢谢。
此致、
樱桃
您好、Cherry、
1) 在第二步中、内核0的 IPC 寄存器 READ_REQ 的相应位设置为1、但 Core0不会输入中断(中断配置已经使用函数 vimTriggerSoftInt 进行了测试、可以触发进入、即中断配置正常)。
哪个内核正在写入写入写入完成寄存器? 请确保发送方内核正在写入内核专用的写入完成寄存器。 然后、接收器内核可以读取 REQ 寄存器以了解哪个内核触发了中断。
2) 2)进入中断后、需要清除中断标志位、具体而言、要清除哪个寄存器? 参考 SDK 的例程是清除标志位写入完成。 但实际上、它是读取请求。
中断标志位可通过写 REQ 寄存器来清零。 SDK 还会写入读取 REQ 寄存器以清除中断。
此致、
Ashwin