feat(canfd): 切换 CANFD 接收为中断驱动和环形缓冲机制
- 将 CANFD 接收机制由轮询改为 FIFO0 的中断事件驱动处理 - 实现循环取空硬件 FIFO0,提高接收效率和响应速度 - 引入环形缓冲区缓存接收帧,支持多路通道多帧队列管理 - 置位解析任务标志位,实现接收数据的异步解析 - 增加接收中断统计,包括 FIFO 满和溢出计数 - 重构临界区代码,使用自定义函数保护中断状态 - 修改接收过滤器配置,支持按掩码匹配标准帧进入 FIFO0 - 使能 CAN FIFO0 多种中断标志,包括非空、满和溢出中断
This commit is contained in:
@@ -35,12 +35,37 @@
|
||||
/** @brief ADC 空输入保护时默认 VDDA,单位 V。 */
|
||||
#define CONFIG_ADC_DEFAULT_VDDA 3.3f
|
||||
|
||||
/** @brief ADC 中值滤波窗口长度(最终样本数为该值 + 1)。 */
|
||||
#define CONFIG_ADC_FILTER_SIZE 6U
|
||||
|
||||
/** @brief CAN 外设实例。 */
|
||||
#define CONFIG_CAN_INSTANCE CAN0
|
||||
/** @brief CAN 外设时钟使能枚举。 */
|
||||
#define CONFIG_CAN_RCU RCU_CAN0
|
||||
/** @brief CAN 状态报文标准帧 ID。 */
|
||||
#define CONFIG_CAN_STATUS_ID 0x321U
|
||||
/** @brief ESP32 请求 DCU_APP 进入 Bootloader OTA 窗口的扩展帧 ID(备用 CAN 入口)。 */
|
||||
#define CONFIG_CAN_OTA_BOOT_REQ_ID 0x00000320U
|
||||
/** @brief 进入 Bootloader OTA 请求魔术字节 0。 */
|
||||
#define CONFIG_CAN_OTA_BOOT_MAGIC0 0x4FU
|
||||
/** @brief 进入 Bootloader OTA 请求魔术字节 1。 */
|
||||
#define CONFIG_CAN_OTA_BOOT_MAGIC1 0x54U
|
||||
/** @brief 进入 Bootloader OTA 请求魔术字节 2。 */
|
||||
#define CONFIG_CAN_OTA_BOOT_MAGIC2 0x41U
|
||||
/** @brief 进入 Bootloader OTA 请求魔术字节 3。 */
|
||||
#define CONFIG_CAN_OTA_BOOT_MAGIC3 0x21U
|
||||
/** @brief ESP32 在 APP 运行期通过 SPI 发送的进入 Bootloader OTA 命令。 */
|
||||
#define CONFIG_SPI_APP_OTA_BOOT_CMD 0xB0U
|
||||
/** @brief SPI 进入 Bootloader OTA 命令确认状态:成功。 */
|
||||
#define CONFIG_SPI_APP_OTA_BOOT_ACK_OK 0xA5U
|
||||
/** @brief SPI 进入 Bootloader OTA 命令确认状态:失败。 */
|
||||
#define CONFIG_SPI_APP_OTA_BOOT_ACK_ERROR 0xE2U
|
||||
/** @brief CAN 接收过滤器目标标准帧 ID。 */
|
||||
#define CONFIG_CAN_RX_FILTER_ID CONFIG_CAN_STATUS_ID
|
||||
/** @brief CAN 接收过滤器标准帧掩码;`0x7FFU` 表示精确匹配 11-bit ID。 */
|
||||
#define CONFIG_CAN_RX_FILTER_MASK 0x7FFU
|
||||
/** @brief 单次 CAN 接收解析任务最多消费的软件队列帧数,避免主循环长期被接收流量占用。 */
|
||||
#define CONFIG_CAN_RX_PARSE_BUDGET 48U
|
||||
/** @brief CAN 状态载荷中调试标识字符 0。 */
|
||||
#define CONFIG_CAN_STATUS_TAG0 0x43U
|
||||
/** @brief CAN 状态载荷中调试标识字符 1。 */
|
||||
@@ -69,14 +94,26 @@
|
||||
#define CONFIG_TASK_PERIOD_VREF_SAMPLE_TICKS 5U
|
||||
/** @brief 调度基准节拍:ADC 温度采样/处理周期,单位 100us tick。 */
|
||||
#define CONFIG_TASK_PERIOD_TEMP_SAMPLE_TICKS 10U
|
||||
/** @brief 调度基准节拍:CAN 接收轮询/解析周期,单位 100us tick。 */
|
||||
/** @brief 调度基准节拍:10ms 计数周期,单位 100us tick。 */
|
||||
#define CONFIG_TASK_PERIOD_CAN_RX_TICKS 100U
|
||||
/** @brief 调度基准节拍:CAN 发送/状态灯周期,单位 100us tick。 */
|
||||
#define CONFIG_TASK_PERIOD_CAN_TX_TICKS 1000U
|
||||
/** @brief 调度基准节拍:心跳/诊断打印周期,单位 100us tick。 */
|
||||
#define CONFIG_TASK_PERIOD_HEARTBEAT_TICKS 10000U
|
||||
|
||||
/** @brief UART 诊断打印级别:0=仅温度/电压,1=温度/电压+CAN 统计。 */
|
||||
/** @brief 周期温度/电压 UART 打印开关:0=关闭,1=开启。 */
|
||||
#define CONFIG_UART_TEMP_PERIODIC_PRINT 1
|
||||
/** @brief UART 诊断打印级别:0=仅温度/电压,1=温度/电压+CAN 统计。 */
|
||||
#define CONFIG_UART_DIAG_LEVEL 1
|
||||
|
||||
|
||||
/** @brief FWDGT 独立看门狗预分频值。 */
|
||||
#define CONFIG_FWDGT_PSC FWDGT_PSC_DIV64
|
||||
/** @brief FWDGT 独立看门狗重载值。
|
||||
* 超时 = (64 / 40000) * (RLD + 1) = 1.6ms * (RLD+1)
|
||||
* RLD=1874 → 1.6ms * 1875 ≈ 3.0s
|
||||
*/
|
||||
#define CONFIG_FWDGT_RLD 1874U
|
||||
/** @brief FWDGT 超时近似值(毫秒),仅供文档参考。 */
|
||||
#define CONFIG_FWDGT_TIMEOUT_MS 3000U
|
||||
#endif /* SYS_CONFIG_H */
|
||||
|
||||
Reference in New Issue
Block a user