- 将 CANFD 接收机制由轮询改为 FIFO0 的中断事件驱动处理 - 实现循环取空硬件 FIFO0,提高接收效率和响应速度 - 引入环形缓冲区缓存接收帧,支持多路通道多帧队列管理 - 置位解析任务标志位,实现接收数据的异步解析 - 增加接收中断统计,包括 FIFO 满和溢出计数 - 重构临界区代码,使用自定义函数保护中断状态 - 修改接收过滤器配置,支持按掩码匹配标准帧进入 FIFO0 - 使能 CAN FIFO0 多种中断标志,包括非空、满和溢出中断
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
/**
|
|
* @file systick.cpp
|
|
* @brief SysTick 时基模块实现。
|
|
*/
|
|
|
|
#include "main.h"
|
|
#include "sys/systick.h"
|
|
|
|
volatile uint32_t SysTickTimer::s_ms = 0U;
|
|
|
|
/**
|
|
* @brief SysTick 中断处理入口。
|
|
* @param[in] 无。
|
|
* @param[out] 无。
|
|
* @retval 无返回值。
|
|
* @note 每次 SysTick 中断到来时,将毫秒计数器自增 1。
|
|
*/
|
|
void SysTickTimer::onInterrupt()
|
|
{
|
|
s_ms++;
|
|
}
|
|
|
|
/**
|
|
* @brief 执行毫秒级阻塞延时。
|
|
* @param[in] ms 需要延时的毫秒数。
|
|
* @param[out] 无。
|
|
* @retval 无返回值。
|
|
* @note 基于 SysTick 维护的毫秒计数器忙等,适用于短时初始化等待。
|
|
*/
|
|
void SysTickTimer::delayMs(uint32_t ms)
|
|
{
|
|
uint32_t start = s_ms;
|
|
while((s_ms - start) < ms) { }
|
|
}
|
|
|
|
/**
|
|
* @brief 初始化 1ms SysTick 时基。
|
|
* @param[in] 无。
|
|
* @param[out] 无。
|
|
* @retval 无返回值。
|
|
* @note 先更新 `SystemCoreClock`,再按 1kHz 频率配置 SysTick。
|
|
*/
|
|
void SysTickTimer::initMs()
|
|
{
|
|
SystemCoreClockUpdate();
|
|
SysTick_Config(SystemCoreClock / 1000U);
|
|
}
|
|
|
|
/* ----- 中断入口 C 包装 ---------------------------------------------- */
|
|
/**
|
|
* @brief SysTick 中断向量入口。
|
|
* @param[in] 无。
|
|
* @param[out] 无。
|
|
* @retval 无返回值。
|
|
* @note C 向量包装函数,内部转调 `SysTickTimer::onInterrupt()`。
|
|
*/
|
|
extern "C" void SysTick_Handler(void) { SysTickTimer::onInterrupt(); }
|