概要
CAN测试源码:
https://download.csdn.net/download/qq_35671135/89425377
根据fsl_flexcan.h
文件从文件末尾往前面梳理,总共CAN FD处理函数;
使用的是RT1064开发板进行测试。
1、中止中断驱动的消息接收进程(CAN FD)
函 数 :void FLEXCAN_TransferFDAbortReceive(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
说 明 :这个函数中止中断驱动的消息接收进程。
参 数 :base FlexCAN外设基地址
参 数 :handle FlexCAN句柄指针
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
返回值:无
2、中止中断驱动的消息发送进程(CAN FD)
函 数 :void FLEXCAN_TransferFDAbortSend(CAN_Type *base, flexcan_handle_t *handle, uint8_t mbIdx);
说 明 :这个函数终止中断驱动的消息发送进程。
参 数 :base FlexCAN外设基地址
参 数 :handle FlexCAN句柄指针
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
返回值:无
3、使用IRQ接收CAN FD消息。
函 数 :status_t FLEXCAN_TransferFDReceiveNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
说 明 :此函数使用IRQ接收消息。这是一个非阻塞函数,它会立即返回。当消息被接收时,将调用receive回调函数
参 数 :base FlexCAN外设基地址
参 数 :handle FlexCAN句柄指针
参 数 :pMbXfer FlexCAN FD消息缓冲区传输结构。参见#flexcan_mb_transfer_t。
返回值:kStatus_Success 启动Rx Message Buffer接收进程成功。
kStatus_FLEXCAN_RxBusy Rx消息缓冲区正在使用中。
4、使用IRQ发送CAN FD消息。
函 数 :status_t FLEXCAN_TransferFDSendNonBlocking(CAN_Type *base, flexcan_handle_t *handle, flexcan_mb_transfer_t *pMbXfer);
说 明 :这个函数使用IRQ发送消息。这是一个非阻塞函数,它会立即返回。当消息发出后,send回调函数被调用。
参 数 :base FlexCAN外设基地址
参 数 :handle FlexCAN句柄指针
参 数 :pMbXfer FlexCAN FD消息缓冲区传输结构。参见#flexcan_mb_transfer_t。
返回值:kStatus_Success 启动Tx Message Buffer发送进程成功。
kStatus_Fail 写Tx消息缓冲区失败
kStatus_FLEXCAN_TxBusy Tx消息缓冲区正在使用中
5、在CAN总线上执行轮询接收事务(CAN FD)
函 数 :status_t FLEXCAN_TransferFDReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
说 明 :在调用此API之前不需要创建传输句柄。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :pRxFrame 指向用于接收的CAN FD消息帧结构的指针。
返回值:kStatus_Success Rx消息缓冲区已满,并已成功读取。
kStatus_FLEXCAN_RxOverflow Rx消息缓冲区已经溢出,并已成功读取
kStatus_Fail Rx消息缓冲区为空。
6、在CAN总线上执行轮询发送事务(CAN FD)
函 数 :status_t FLEXCAN_TransferFDReceiveBlocking(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
说 明 :在调用此API之前不需要创建传输句柄。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :pRxFrame 指向要发送的CAN FD消息帧的指针。
返回值:kStatus_Success 写Tx消息缓冲区成功。
kStatus_Fail Tx消息缓冲区正在使用中
7、从接收消息缓冲区中读取FlexCAN FD消息。
函 数 :status_t FLEXCAN_ReadFDRxMb(CAN_Type *base, uint8_t mbIdx, flexcan_fd_frame_t *pRxFrame);
说 明 :这个函数从指定的接收消息缓冲区中读取CAN FD消息。该函数用刚刚接收到的数据填充接收CAN FD消息帧结构,并再次激活消息缓冲区。函数立即返回。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :pRxFrame 指向用于接收的CAN FD消息帧结构的指针。
返回值:kStatus_Success Rx消息缓冲区已满,并已成功读取。
kStatus_FLEXCAN_RxOverflow Rx消息缓冲区已经溢出,并已成功读取
kStatus_Fail Rx消息缓冲区为空。
8、将FlexCAN FD消息写入发送消息缓冲区。
函 数 :status_t FLEXCAN_WriteFDTxMb(CAN_Type *base, uint8_t mbIdx, const flexcan_fd_frame_t *pTxFrame);
说 明 :该函数将CAN - FD消息写入指定的Transmit Message Buffer,并改变Message Buffer的状态,开始CAN - FD消息的发送。函数立即返回。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :pRxFrame 指向要发送的CAN FD消息帧的指针。
返回值:kStatus_Success 写Tx消息缓冲区成功。
kStatus_Fail Tx消息缓冲区正在使用中
9、配置FlexCAN接收消息缓冲区。(CAN FD)
函 数 :void FLEXCAN_SetFDRxMbConfig(CAN_Type *base, uint8_t mbIdx, const flexcan_rx_mb_config_t *pRxMbConfig, bool enable);
说 明 :这个函数清除FlexCAN内置的消息缓冲区,并将其配置为接收消息缓冲区。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :pRxMbConfig 指向FlexCAN消息缓冲区配置结构的指针。
参 数 :enable Enable/disable
返回值:无
10、配置FlexCAN发送消息缓冲区。(CAN FD)
函 数 :void FLEXCAN_SetFDTxMbConfig(CAN_Type *base, uint8_t mbIdx, bool enable);
说 明 :此函数终止先前的传输,清除消息缓冲区,并将其配置为传输消息缓冲区。
参 数 :base FlexCAN外设基地址
参 数 :mbIdx FlexCAN FD消息缓冲区索引。
参 数 :enable Enable/disable
返回值:无