我们将在春节假期期间对网站进行维护,可能暂时无法访问,同时工程师回复将有所延迟,敬请谅解.

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.

AM2634-Q1: IPC 多核间通信,不能触发中断,需要协助分析一下。

Part Number: AM2634-Q1
你好:
        我们这边在调试 am263x ipc_notify功能时候出现以下问题,想请教一下怎么去解决:
问题描述:
1、在操作到第二步时候,看到核0的IPC寄存器READ_REQ对应的位被置1,但核0并没有进入中断;(补充:使用函数    vimTriggerSoftInt    测试过中断配置,可以触发进入,即中断配置是对的)
 
2、在进入中断后,需要清理中断标志位,具体是清哪一个寄存器?
参考SDK的例程,清标志位是清    write done
但实际上,被置位的是    read req   ?
具体代码:
中断配置:
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);
}
  • 您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    1、在操作到第二步时候,看到核0的IPC寄存器READ_REQ对应的位被置1,但核0并没有进入中断;(补充:使用函数    vimTriggerSoftInt    测试过中断配置,可以触发进入,即中断配置是对的)

    -请问是哪个内核正在写入write down寄存器? 请确保发送方内核正在写入内核专用的write down寄存器。 然后,接收器内核可以读取 REQ 寄存器,来了解是哪个内核触发了中断。

    2、在进入中断后,需要清理中断标志位,具体是清哪一个寄存器?
    参考SDK的例程,清标志位是清    write done
    但实际上,被置位的是    read req   ?

    -中断标志位可通过写 REQ 寄存器来清零。 SDK 还会写入读取 REQ 寄存器以清除中断。