Alipay
Alipay
# 环境 芯片:NXP-MCXN947 开发板:FRDM-MCXN947 BSP:nxp->mcx->mcxn 工具链:Keil 5, ArmClang V6.21 RT-Thread版本:5.1.0 # 现象及复现步骤 **调用 `rt_device_write(can_dev, 0, &msg, sizeof(msg));` 导致阻塞** 在编写CAN外设测评时,简单复制了RT-Thread[官方文档提供的CAN示例代码](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/can/can),可以正常发送一帧ID为0x78的CAN数据帧 但是对设备写入函数rt_device_write进行简单的for循环发送的时候却出现了阻塞,第一条写入函数后的代码均无法执行,尝试取消掉for循环,直接在rt_device_write后加入rt_kprintf也同样无法打印任何内容。 # 目前已知 ## 第一次排查 5.1.0版本的mcxn提供的bsp文件中`drv_can.c`中,`flexcan_callback`函数有部分被注释,尝试取消注释。  并且`drv_can.c`中的CAN发送函数使用的是NXP提供的FSL库中的阻塞发送函数,推测该函数不能触发发送完成中断。  于是作出如下更改:(红框为原有发送函数,绿框为修改后的函数) 修改后的发送函数确实可以运行至`flexcan_callback`的`kStatus_FLEXCAN_TxIdle`分支...
在board.c中 ``` uint32_t board_init_spi_clock(SPI_Type *ptr) { if (ptr == HPM_SPI1) { clock_add_to_group(clock_spi1, 0); return clock_get_frequency(clock_spi1); } else if (ptr == HPM_SPI2) { clock_add_to_group(clock_spi2, 0); return clock_get_frequency(clock_spi3); } else if (ptr...