Hello,
I'm trying to run the MQX FlexCAN example but the program stops after displaying the Node:
*********FLEXCAN TEST PROGRAM.*********
Message format: Standard (11 bit id)
Message buffer 9 used for Rx.
Message buffer 13 used for Tx.
Interrupt Mode: Enabled
Operation Mode: TX and RX --> Normal
***************************************
NODE is 1
I tracked down the issue. The program waits indefinitely at the line:
mqx/examples/can/flexcan/fsl_flexcan_test.c
(Line 133) result = flexcan_init(instance, &flexcan1_data, TRUE);
which is calling
mqx/source/io/can/flexcan/fsl_flexcan_driver.c
(Line 363) result = flexcan_hal_init(instance, data);
which in turn is calling
mqx/source/io/can/flexcan/fsl_flexcan_hal.c
(Line 222) while (!(flexcan_reg_ptr->MCR & CAN_MCR_LPM_ACK_MASK)) {}
I have atached the last file (mqx/source/io/can/flexcan/fsl_flexcan_hal.c)
Thank you for any help to shed some light on the subject. It's probably a simple fix, but after reading about CAN and FlexCAN, I'm still not understanding what is happening.
/ Finn
已解决! 转到解答。
Fixed it, apparently the can_clk_sel was set to disable the FlexCAN clock in the CCM_CSCMR2 register (page 776 of the IMX6SX reference manual).
I fixed the issue by activating the clock before initializing can:
*reg &= !(0x3FC)
*reg |= 0x100
Edit: The address to the register is 0x420C4020
Fixed it, apparently the can_clk_sel was set to disable the FlexCAN clock in the CCM_CSCMR2 register (page 776 of the IMX6SX reference manual).
I fixed the issue by activating the clock before initializing can:
*reg &= !(0x3FC)
*reg |= 0x100
Edit: The address to the register is 0x420C4020
Hi Alejandro,
I was using the Nit6_SoloX from Boundary Devices, which uses the 6SoloX SoC. I asked them, too, but got no response, so I am now running the SabreSD without any CAN issues.
Cheers
Finn