Petr,
Thanks for your feedback.
I'm using the code below:
void FLEXCAN0_init(unsigned long baud) {
#define MSG_BUF_SIZE 4 /* Msg Buffer Size. (CAN 2.0AB: 2 hdr + 2 data= 4 words) */
uint32_t i=0;
PCC->PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK; /* CGC=1: enable clock to FlexCAN0 */
CAN0->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: Disable module before selecting clock */
CAN0->CTRL1 |= CAN_CTRL1_CLKSRC_MASK; /* CLKSRC=1: The CAN engine clock source is BUS_CLK (40MHz) */
CAN0->MCR &= ~CAN_MCR_MDIS_MASK; /* MDIS=0; Enable module config. (Sets FRZ, HALT)*/
while (!((CAN0->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT)) {}
/* Good practice: wait for FRZACK=1 on freeze mode entry/exit */
if(baud==CAN_1M)
{
CAN0->CTRL1 = 0x03F90003; //0n47 at 60MHz
}
else
{
CAN0->CTRL1 = 0x0E790004; //0n47 at 60MHz
}
[...]
}
When I first configure (250Mbaud), everything works, but when I reconfigure CAN (1Mbaud) with application running, my firmware never goes out of the while below:
while (!((CAN0->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT)) {}
I'm waiting for your answer.
Thanks.