Hello Kan,
Thanks for responding,
To initialise i call the following function:
(The definition of the other functions follows)
void initialiseCAN( void )
{
U8 i;
FlexCANInit();
FlexCANRegisterRxCallback( canRxCallback );
for( i = 0; i<8 /*12*/; i++ )
{
FlexCANSetMask( i, 0);
FlexCANSetMBforRx( i, 0x7FF );
FlexCANEnableMBInterrupt( i, 0 );
}
}
void FlexCANInit(void )
{
/* Register Initialization */
FLEXCAN_GPIO_INIT();
MCF_FlexCAN_CANMCR = MCF_FlexCAN_CANMCR_SOFTRST;
while ((MCF_FlexCAN_CANMCR & MCF_FlexCAN_CANMCR_SOFTRST) != 0x00)
;
MCF_FlexCAN_CANMCR = MCF_FlexCAN_CANMCR_MDIS | MCF_FlexCAN_CANMCR_MAXMB(0xF);
while ((MCF_FlexCAN_CANMCR & MCF_FlexCAN_CANMCR_NOTRDY) !=
MCF_FlexCAN_CANMCR_NOTRDY);
/* Setup bit timing:
* Baudrate: 125 Kbit/s => BRP = 23
* PROPAG = 1 => 1-1 = 0
* PHASE1 == PHASE 2 = 7 => 7-1=6
* SJW = 4 => 4-1 = 3
*/
MCF_FlexCAN_CANCTRL = MCF_FlexCAN_CANCTRL_PRESDIV(23)|
MCF_FlexCAN_CANCTRL_RJW(3)|
MCF_FlexCAN_CANCTRL_PSEG1(6)|
MCF_FlexCAN_CANCTRL_PSEG2(6)|
MCF_FlexCAN_CANCTRL_ERRMSK|
MCF_FlexCAN_CANCTRL_BOFFMSK|
MCF_FlexCAN_CANCTRL_PROPSEG(0) |
1 << 4;
/*
* MBuf Initialization
*/
MCF_FLEXCAN_BUFFERS.MB0.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB1.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB2.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB3.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB4.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB5.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB6.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB7.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB8.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB9.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB10.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB11.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB12.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB13.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB14.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FLEXCAN_BUFFERS.MB15.u16CtrlStat = MB_CTRLSTAT_CODE(0x0);
MCF_FlexCAN_RXGMASK = 0;
MCF_FlexCAN_CANMCR &= ~(MCF_FlexCAN_CANMCR_MDIS);
while ((MCF_FlexCAN_CANMCR & MCF_FlexCAN_CANMCR_NOTRDY) != 0x00)
;
MCF_FlexCAN_IMASK = 0x00;
MCF_INTC1_ICR08 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(0);
MCF_INTC1_ICR09 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(1);
MCF_INTC1_ICR10 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(2);
MCF_INTC1_ICR11 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(3);
MCF_INTC1_ICR12 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(4);
MCF_INTC1_ICR13 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(5);
MCF_INTC1_ICR14 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(6);
MCF_INTC1_ICR15 = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(7);
MCF_INTC1_ICR16 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(0);
MCF_INTC1_ICR17 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(1);
MCF_INTC1_ICR18 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(2);
MCF_INTC1_ICR19 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(3);
MCF_INTC1_ICR20 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(4);
MCF_INTC1_ICR21 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(5);
MCF_INTC1_ICR22 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(6);
MCF_INTC1_ICR23 = MCF_INTC_ICR_IL(4) | MCF_INTC_ICR_IP(7);
MCF_INTC1_ICR24 = MCF_INTC_ICR_IL(5) | MCF_INTC_ICR_IP(0);
MCF_INTC1_ICR25 = MCF_INTC_ICR_IL(5) | MCF_INTC_ICR_IP(1);
MCF_INTC1_IMRL &= ~(MCF_INTC_IMRL_INT_MASK25|MCF_INTC_IMRL_INT_MASK24|
MCF_INTC_IMRL_INT_MASK23|MCF_INTC_IMRL_INT_MASK22|
MCF_INTC_IMRL_INT_MASK21|MCF_INTC_IMRL_INT_MASK20|
MCF_INTC_IMRL_INT_MASK19|MCF_INTC_IMRL_INT_MASK18|
MCF_INTC_IMRL_INT_MASK17|MCF_INTC_IMRL_INT_MASK16|
MCF_INTC_IMRL_INT_MASK15|MCF_INTC_IMRL_INT_MASK14|
MCF_INTC_IMRL_INT_MASK13|MCF_INTC_IMRL_INT_MASK12|
MCF_INTC_IMRL_INT_MASK11|MCF_INTC_IMRL_INT_MASK10|
MCF_INTC_IMRL_INT_MASK9 |MCF_INTC_IMRL_INT_MASK8 |
MCF_INTC_IMRL_MASKALL);
return;
}