It's probably something simple but I can't fined it. I set up CAN-0 in loopback/test mode and send a message, it is successfully sent and received, however the pointer to the received data is 0 instead of the correct address in Ram. Program as follows:
u8 TxData[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
u8 Can0Data17[8]; // Transmit Data.
tCANMsgObject Can0MsgObj17;
u8 Can0Data18[8]; // Receive Data.
tCANMsgObject Can0MsgObj18;
void main(void) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
(there’s delay in here)
GPIOPinTypeCAN (GPIO_PORTB_BASE, PB_Can2Rx_BIT | PB_Can2Tx_BIT );
GPIOPinConfigure(GPIO_PB4_CAN0RX);
GPIOPinConfigure(GPIO_PB5_CAN0TX);
CANInit(CAN0_BASE);
CANBitRateSet(CAN0_BASE, GetClkSpeed(), 500000);
CANIntRegister(CAN0_BASE, Can0_Isr);
CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable(INT_CAN0);
CANEnable(CAN0_BASE);
HWREG(CAN0_BASE + CAN_O_CTL) |= CAN_CTL_TEST;
HWREG(CAN0_BASE + CAN_O_TST) |= CAN_TST_LBACK;
u8 Can0Data18[8];
Can0MsgObj18.ui32MsgID = 0; // Receive Message Object.
Can0MsgObj18.ui32MsgIDMask = 0;
Can0MsgObj18.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
Can0MsgObj18.ui32MsgLen = 8;
CANMessageSet(CAN0_BASE, MsgObj18, &Can0MsgObj18, MSG_OBJ_TYPE_RX);
u8 Can0Data17[8];
memcpy(Can0Data17, TxData, 8);
Can0MsgObj17.ui32MsgID = 0x100; // Transmit Message Object.
Can0MsgObj17.ui32MsgIDMask = 0x0;
Can0MsgObj17.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
Can0MsgObj17.ui32MsgLen = 8;
Can0MsgObj17.pui8MsgData = Can0Data17;
CANMessageSet(CAN0_BASE, MsgObj17, &Can0MsgObj17, MSG_OBJ_TYPE_TX);
}
void Can0_Isr(void) {
u8 Status = CAN0_STS_R & 0x000000FF; // Get Status.
CAN0_STS_R = 0; // Reset Status.
u32 Which = CAN0_INT_R; // Which Message Object.
Which = ((Which-1) & 0x1F) + 1;
// Deal with Status Here.
switch(Which) {
case 17:
// Transmit successful.
break;
case 18:
CANMessageGet(CAN0_BASE, MsgObj18, &Can0MsgObj18, false);
// Here:
// Can0MsgObj18.ui32MsgID is 100,
// Can0MsgObj18.ui32MsgLen is 8,
// but Can0MsgObj18.pui8MsgData is 0 instead of Can0Data17.
}
Thanks, Doug