3737
3838#include "sdk/drivers/flexcan/fsl_flexcan.h"
3939
40+
41+ // Be verbose
42+ #define MIMXRT_CANIO_CAN_DEBUG (...) (void)0
43+ //#define MIMXRT_CANIO_CAN_DEBUG(...) mp_printf(&mp_plat_print, __VA_ARGS__)
44+
45+ #define MIMXRT_CANIO_CAN_CALLBACK_DEBUG (...) (void)0
46+ //#define MIMXRT_CANIO_CAN_CALLBACK_DEBUG(...) mp_printf(&mp_plat_print, __VA_ARGS__)
47+
48+
4049static CAN_Type * const flexcan_bases [] = CAN_BASE_PTRS ; // e.g.: { (CAN_Type *)0u, CAN1, CAN2, CAN3 }
4150static canio_can_obj_t * can_objs [MP_ARRAY_SIZE (mcu_can_banks )];
4251
@@ -83,6 +92,7 @@ static uint8_t mimxrt10xx_flexcan_get_free_tx_mbid(canio_can_obj_t *self) {
8392 if (!(self -> data -> tx_state & tx_array_id_bit ))
8493 {
8594 // Found a free tx array id. Mark it as used.
95+ MIMXRT_CANIO_CAN_DEBUG ("canio: Found free Tx MB: %d\n" , tx_array_id );
8696 self -> data -> tx_state |= tx_array_id_bit ;
8797 found_free_tx_mb = true;
8898 break ;
@@ -148,60 +158,75 @@ static void mimxrt10xx_flexcan_callback(CAN_Type *base, flexcan_handle_t *handle
148158
149159 // Process rx message buffer is idle event.
150160 case kStatus_FLEXCAN_RxIdle :
161+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxIdle\n" );
151162 // We don't control any rx message buffers 'manually'. The rx fifo has control.
152163 break ;
153164
154165 // Process tx message buffer is idle event.
155166 case kStatus_FLEXCAN_TxIdle :
167+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = TxIdle\n" );
156168 mimxrt10xx_flexcan_set_tx_mb_free_by_mbid (self , result );
157169 break ;
158170
159171 // Process tx message buffer is busy event.
160172 case kStatus_FLEXCAN_TxBusy :
173+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = TxBusy\n" );
161174 mimxrt10xx_flexcan_set_tx_mb_busy_by_mbid (self , result );
162175 break ;
163176
164177 // Process remote message is send out and message buffer changed to receive one event.
165178 case kStatus_FLEXCAN_TxSwitchToRx :
179+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = TxSwitchToRx\n" );
166180 mimxrt10xx_flexcan_set_tx_mb_free_by_mbid (self , result );
167181 break ;
168182
169183 // Process rx message buffer is busy event.
170184 case kStatus_FLEXCAN_RxBusy :
185+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxBusy\n" );
171186 break ;
172187
173188 // Process rx message buffer is overflowed event.
174189 case kStatus_FLEXCAN_RxOverflow :
190+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxOverflow\n" );
175191 break ;
176192
177193 // Process rx message fifo is busy event.
178194 case kStatus_FLEXCAN_RxFifoBusy :
195+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxFifoBusy\n" );
179196 break ;
180197
181198 // Process rx message fifo is idle event.
182199 case kStatus_FLEXCAN_RxFifoIdle :
200+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxFifoIdle\n" );
183201 break ;
184202
185203 // Process rx message fifo is overflowed event.
186204 case kStatus_FLEXCAN_RxFifoOverflow :
205+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxFifoOverflow\n" );
187206 break ;
188207
189208 // Process rx message fifo is almost overflowed event.
190209 case kStatus_FLEXCAN_RxFifoWarning :
210+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxFifoWarning\n" );
191211 break ;
192212
193213 // Process rx message fifo is disabled during reading event.
194214 case kStatus_FLEXCAN_RxFifoDisabled :
215+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = RxFifoDisabled\n" );
195216 break ;
196217
197218 // Process FlexCAN is waken up from stop mode event.
198219 case kStatus_FLEXCAN_WakeUp :
220+ MIMXRT_CANIO_CAN_CALLBACK_DEBUG ("canio: callback got status = WakeUp\n" );
199221 break ;
200222
201223 // Process unhandled interrupt asserted event.
202224 case kStatus_FLEXCAN_UnHandled :
203225 // Process FlexCAN module error and status event.
204226 case kStatus_FLEXCAN_ErrorStatus :
227+ // This is *very* verbose when the bus is disconnected!
228+ //MIMXRT_CANIO_CAN_CALLBACK_DEBUG("canio: callback got status = UnHandled or ErrorStatus");
229+
205230 // We could do some fancy statistics update, but canio does not have.
206231 mimxrt10xx_flexcan_handle_error (self );
207232 break ;
@@ -214,10 +239,10 @@ void common_hal_canio_can_construct(canio_can_obj_t *self, const mcu_pin_obj_t *
214239 const mcu_periph_obj_t * rx_periph = find_pin_function (mcu_can_rx_list , rx , & instance , MP_QSTR_rx );
215240 const mcu_periph_obj_t * tx_periph = find_pin_function (mcu_can_tx_list , tx , & instance , MP_QSTR_tx );
216241
217- // mp_printf(&mp_plat_print, "can instance: %d\n", instance);
218- // mp_printf(&mp_plat_print, "can loopback: %d\n", loopback ? 1 : 0);
219- // mp_printf(&mp_plat_print, "can silent: %d\n", silent ? 1 : 0);
220- // mp_printf(&mp_plat_print, "can baudrate: %d\n", baudrate);
242+ MIMXRT_CANIO_CAN_DEBUG ( "canio: init instance: %d\n" , instance );
243+ MIMXRT_CANIO_CAN_DEBUG ( "canio: init loopback: %d\n" , loopback ? 1 : 0 );
244+ MIMXRT_CANIO_CAN_DEBUG ( "canio: init silent: %d\n" , silent ? 1 : 0 );
245+ MIMXRT_CANIO_CAN_DEBUG ( "canio: init baudrate: %d\n" , baudrate );
221246
222247 self -> rx_pin = rx ;
223248 self -> tx_pin = tx ;
0 commit comments