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 多核通信无法触发中断

Guru**** 2252600 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1176745/am2634-q1-ipc-multi-core-communication-cannot-trigger-an-interrupt

器件型号:AM2634-Q1

大家好、

以下是客户提出的问题、可能需要您的帮助:

调试 am263x IPC_NOTIFY 功能时会出现以下问题:  

1) 在第二步中、内核0的 IPC 寄存器 READ_REQ 的相应位设置为1、但 Core0不会输入中断(中断配置已经使用函数 vimTriggerSoftInt 进行了测试、可以触发进入、即中断配置正常)。

2) 2)进入中断后、需要清除中断标志位、具体而言、要清除哪个寄存器? 参考 SDK 的例程是清除标志位写入完成。 但实际上、它是读取请求。

中断配置如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 

触发代码:(省略了对共享存储器部分的写入、此函数指示目标内核在写入共享存储器后读取数据)  

Fullscreen
1
2
3
4
5
6
7
8
9
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);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    1) 在第二步中、内核0的 IPC 寄存器 READ_REQ 的相应位设置为1、但 Core0不会输入中断(中断配置已经使用函数 vimTriggerSoftInt 进行了测试、可以触发进入、即中断配置正常)。

    哪个内核正在写入写入写入完成寄存器? 请确保发送方内核正在写入内核专用的写入完成寄存器。 然后、接收器内核可以读取 REQ 寄存器以了解哪个内核触发了中断。

    2) 2)进入中断后、需要清除中断标志位、具体而言、要清除哪个寄存器? 参考 SDK 的例程是清除标志位写入完成。 但实际上、它是读取请求。

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

    此致、

    Ashwin