Part Number: TM4C123GH6PM
Hi everybody,
i am trying to use CAN module to send data between 2 tm4c123 launchpad ..
here is the code of reciever:
int main(){
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
tCANMsgObject sMsgObjectRx ;
CAN0Rx_Init() ;
sMsgObjectRx.ui32MsgID = 0x400 ;
sMsgObjectRx.ui32Flags = MSG_OBJ_NO_FLAGS ;
CANMessageSet(CAN0_BASE, 1, &sMsgObjectRx, MSG_OBJ_TYPE_RX) ;
CANEnable(CAN0_BASE) ;
while(1){
while((CANStatusGet(CAN0_BASE, CAN_STS_NEWDAT) & 1) == 0)
{
//
// Read the message out of the message object.
//
CANMessageGet(CAN0_BASE, 1, &sMsgObjectRx, true);
}
uint8_t data = sMsgObjectRx.pui8MsgData[0];
if (data == 0x33)
GPIO_PORTF_DATA_R ^= 0x04 ;
}
}
void CAN0Rx_Init(void) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB) ;
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOB)){} ;
GPIOPinConfigure(GPIO_PB4_CAN0RX) ;
GPIOPinConfigure(GPIO_PB5_CAN0TX) ;
GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4|GPIO_PIN_5) ;
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0) ;
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_CAN0)){} ;
CANInit(CAN0_BASE) ;
CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000) ;
CANEnable(CAN0_BASE) ;
}
and here is the transmitter code:
int main(void){
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
CAN0_Init() ;
PORTF_Init() ;
uint8_t ui8data = 0x33 ;
uint8_t * pui8data ;
tCANMsgObject sMsgObjectTx ;
sMsgObjectTx.ui32MsgID = 0x400 ;
sMsgObjectTx.ui32Flags = 0 ;
sMsgObjectTx.ui32MsgLen = 1 ;
pui8data = &ui8data ;
sMsgObjectTx.pui8MsgData = pui8data ;
CANEnable(CAN0_BASE) ;
while(1){
CANMessageSet(CAN0_BASE, 1, &sMsgObjectTx, MSG_OBJ_TYPE_TX) ;
GPIO_PORTF_DATA_R ^= 0x02 ;
SysTick80_Delay_10ms(300) ;
}
return 0;
}
void CAN0_Init(void) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB) ;
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOB)){}
GPIOPinConfigure(GPIO_PB4_CAN0RX) ;
GPIOPinConfigure(GPIO_PB5_CAN0TX) ;
GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4|GPIO_PIN_5) ;
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0) ;
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_CAN0)){}
CANInit(CAN0_BASE) ;
CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000) ;
}
i used the on board led to toggle indicating a transmission command executed. however, the receiver does NOT response.
any one can help?
thanks,
Sarea