I using 570 can bus send message. Message box configuration as following: No 18-32 for TX, polling send msg. When i send more than 30 message frames, There was an Interrupt in message box 18, and change the data in stack where is used to store the msg configure data. Send msg data code as following:
for(i=0;i<ulFrameNum;i++)
{
ulMsgId = 0;
ulMbId = canMESSAGE_BOX18+i%(canMESSAGE_BOX32-canMESSAGE_BOX17);
while(canIsTxMessagePending(pCanReg, ulMbId))
{
}
if(i==29)
{
}
if((i>0)&&(i%15==0))
{
ulLstMbId = (i+15-1)%15+18;
while(pCanReg->TXRQx[0] & 0xfffe0000)
{
}
}
ulMsgId |=((ulMsgType&0xF)<<24);
ulMsgId |=((ulFrameNum&0xFF)<<8);
if(i==ulFrameNum-1)
{
ulMsgId |= ulLstMacId;
if(ulLen%DATA_FRAME_BYTE_NUM==0)
{
pstMsgObj[ulMbId].ui32MsgLen = DATA_FRAME_BYTE_NUM;
}
else
{
pstMsgObj[ulMbId].ui32MsgLen = ulLen%DATA_FRAME_BYTE_NUM;
}
}
else
{
ulMsgId |= ulMidMacId;
pstMsgObj[ulMbId].ui32MsgLen = DATA_FRAME_BYTE_NUM;
}
ulMsgId |= (i&0xFF);
pstMsgObj[ulMbId].ui32MsgID = ulMsgId;
pstMsgObj[ulMbId].pui8MsgData = pucDataTmp+i*DATA_FRAME_BYTE_NUM;
CANMessageSet(pCanReg, ulMbId, &(pstMsgObj[ulMbId]), MSG_OBJ_TYPE_TX);
}
The data in register and ram before msg 18 interrupted:
The data in register and ram after msg 18 interrupted: