28377D可以,通过CAN盒,接收到下面配置的ID 0x10000008; 的数据
但是CAN盒发送其他ID的数据,则不能收到,
就是只能接收,配置的时候指定的ID的数据,其他ID的数据就不能接到,
和ecan的读取方式区别有点大
下面是部分代码,根据TI的例程改的
#define TX_MSG_OBJ_ID 2
#define RX_MSG_OBJ_ID 1
// Initialize the transmit message object used for sending CAN messages.
// Message Object Parameters:
sTXCANMessage.ui32MsgID = 0x10000008;
sTXCANMessage.ui32MsgIDMask = 0;
sTXCANMessage.ui32Flags = 0;
sTXCANMessage.ui32MsgLen = MSG_DATA_LENGTH;
sTXCANMessage.pucMsgData = txMsgData;
//
// Initialize the receive message object used for receiving CAN messages.
// Message Object Parameters:
//
sRXCANMessage.ui32MsgID = 0x10000008;
sRXCANMessage.ui32MsgIDMask = 0;//0x1fffffff;
sRXCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE;
sRXCANMessage.ui32MsgLen = MSG_DATA_LENGTH;
sRXCANMessage.pucMsgData = rxMsgData;
CANMessageSet(CANA_BASE, RX_MSG_OBJ_ID, &sRXCANMessage,MSG_OBJ_TYPE_RX);
// Initialize the transmit message object data buffer to be sent
中断函数---若CAN盒发送的数据ID 为 0x10000008,则可以获取到数据
若ID为其他,则不能获取到数据
// 9.5 - CANA Interrupt 1
Void CANA_1_ISR()
{
// Insert ISR Code here
Uint32 status;
status = CANIntStatus(CANA_BASE, CAN_INT_STS_CAUSE);
// If the cause is a controller status interrupt, then get the status
if(status == CAN_INT_INT0ID_STATUS)
{
status = CANStatusGet(CANA_BASE, CAN_STS_CONTROL);
// Check to see if an error occurred.
if(((status & ~(CAN_ES_RXOK)) != 7) &&
((status & ~(CAN_ES_RXOK)) != 0))
{
// Set a flag to indicate some errors may have occurred.
//errorFlag = 1;
errorFlag++;//
}
}
// Check if the cause is the CAN-B receive message object 1
else if(status == RX_MSG_OBJ_ID) //此处ID为0x10000008则可以读取到数据,其他ID,status就不能触发进到这里
{
//
// Get the received message
//
CANMessageGet(CANA_BASE, RX_MSG_OBJ_ID, &sRXCANMessage, true);
CANIntClear(CANA_BASE, RX_MSG_OBJ_ID);
}
else
{}
// Clear the global interrupt flag for the CAN interrupt line
CANGlobalIntClear(CANA_BASE, CAN_GLB_INT_CANINT0);
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}