TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28388D: 关于C28与CM4进程间通讯过程设置断点调试以及多通道消息调试的疑问

Part Number:TMS320F28388D

TMS320F28388D: C28XCPU1与CM4 IPC通讯不能进入中断 – C2000Tm︎ 微控制器论坛 – C2000 微控制器 – E2ETm 设计支持 (ti.com)

上面这个链接是Green Deng工程师整理的IPC通讯相关的一个帖子

这个帖子最后的例程中,C28与CM4双方都是利用中断方式收发消息

C28发送数据 —-> CM收到数据后进入中断读取数据,随后在中断中向C28发送回复消息 —-> C28收到回复消息后进入中断读取回复数据,随后发送回复消息给CM

上述过程循环往复,C28与CM之间不断进行消息交互。

在这个例子中,应该不存在A发送数据,在B没有读取数据的时候A再次发送数据的情况。

问题1. 如果A发送数据,在B没有及时读取数据的情况下,A再次向B发送数据会出现什么情况。

我在调试中遇到了这样的现象:

在C28中设定了固定周期的Timer中断,在timer中断中定时向CM内核发送消息;

在CM内核接收中断中设置断点,发现第一次是可以进到中断中的,但是只能进一次,再全速运行CM的代码,就进不到中断了;但是如果C28和CM都是以全速方式运行,在两方的变量观测窗口、内存观测窗口看,数据交互似乎是正常的。

我想这是不是由于设置断点,导致CM内核程序执行中断,但是此时C28内核还在不停的向CM内核发送数据,从而导致以消息队列机制进行交互出现异常

问题2. 如果需要多个消息通道的数据收发交互,我可以这样定义和使用消息队列吗?

case1:

IPC_MessageQueue_t messageQueue1;
IPC_Message_t TxMsg1, RxMsg1;

IPC_MessageQueue_t messageQueue2;
IPC_Message_t TxMsg2, RxMsg2;

IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT1, IPC_INT1);
IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT2, IPC_INT2);

case2:

IPC_MessageQueue_t messageQueue;
IPC_Message_t TxMsg1, RxMsg1;
IPC_Message_t TxMsg2, RxMsg2;

IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT1, IPC_INT1);

Yale Li:

您好,我会在下周回来之后回复您

,

Yale Li:

1.

user78960159 说:我想这是不是由于设置断点,导致CM内核程序执行中断,但是此时C28内核还在不停的向CM内核发送数据,从而导致以消息队列机制进行交互出现异常

是有这种可能的。

2. 我向资深工程师咨询一下。

,

user78960159:

好的 感谢帮助 

,

Yale Li:

您不需要使用两个独立的CPU1到CM的IPC中断来实现多个CPU1到CM的通信。您可以使用case2并且使用一个CPU1的IPC中断1去处理所有CPU1到CM的通信。

//
// Update TxMsg1//
TxMsg1.command = IPC_CMD_READ_MEM;
TxMsg1.address = (uint32_t)readData1;
TxMsg1.dataw1 = 10; // Using dataw1 as data length
TxMsg1.dataw2 = 1; // Message identifier//
// Send message to the queue
//
IPC_sendMessageToQueue(IPC_CPU1_L_CPU2_R, &messageQueue, IPC_ADDR_CORRECTION_ENABLE,
&TxMsg1, IPC_BLOCKING_CALL);//
// Update TxMsg2
//
TxMsg2.command = IPC_CMD_READ_MEM;
TxMsg2.address = (uint32_t)readData2;
TxMsg2.dataw1 = 15; // Using dataw1 as data length
TxMsg2.dataw2 = 1; // Message identifier//
// Send message to the queue
//
IPC_sendMessageToQueue(IPC_CPU1_L_CPU2_R, &messageQueue, IPC_ADDR_CORRECTION_ENABLE,
&TxMsg2, IPC_BLOCKING_CALL);

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 关于C28与CM4进程间通讯过程设置断点调试以及多通道消息调试的疑问
分享到: 更多 (0)