TMS320F28377D: TI的工程师你好,请问为什么我用CPU1给CPU2发送消息触发IPC中断,CPU2只能进入三次中断,CPU1就会卡在IPC_sendMessageToQueue函数里面

Part Number: TMS320F28377D

我的CPU1代码如下

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "device.h"
#include "F28x_Project.h"
#include "board.h"
#include <driverlib.h>
//
// Defines
//
#define IPC_CMD_READ_MEM 0x1001
#define IPC_CMD_RESP 0x2001
#define TEST_PASS 0x5555
#define TEST_FAIL 0xAAAA
#define Num 10
#pragma DATA_SECTION(readData, "readData")
uint16_t readData[Num];
uint16_t pass;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
,我的CPU2代码也在下面
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "device.h"
#include "F28x_Project.h"
#include "board.h"
#include <driverlib.h>
#define IPC_CMD_READ_MEM 0x1001
#define IPC_CMD_RESP 0x2001
#define TEST_PASS 0x5555
#define TEST_FAIL 0xAAAA
#define Num 10
uint16_t readData_CPU2[Num];
uint16_t sendData_CPU2[Num];
#pragma DATA_SECTION(readData_CPU2, "readData_CPU2")
#pragma DATA_SECTION(sendData_CPU2, "sendData_CPU2")
uint16_t IPC_Flag = 0;
uint16_t IPC_Count2 = 0;
bool status = false;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

现在就是说,调试的时候发现CPU2中断进入了三次,IPC_Count2=3的时候,接下来CPU1就会卡在IPC_sendMessageToQueue函数里面,具体的代码是
while(((writeIndex + 1U) & IPC_MAX_BUFFER_INDEX) == readIndex)
{
// 非阻塞模式直接返回失败
if(!block) {
ret = false;
break;
}
// 阻塞模式下持续更新readIndex等待空间释放
readIndex = *(msgQueue->PutReadIndex);
}
请问是什么原因呢?非常感谢!