Files
DCU_APP/GD32E508_DCU_APP/sys/systick.cpp
T
cbb f63114f5fd feat(canfd): 切换 CANFD 接收为中断驱动和环形缓冲机制
- 将 CANFD 接收机制由轮询改为 FIFO0 的中断事件驱动处理
- 实现循环取空硬件 FIFO0,提高接收效率和响应速度
- 引入环形缓冲区缓存接收帧,支持多路通道多帧队列管理
- 置位解析任务标志位,实现接收数据的异步解析
- 增加接收中断统计,包括 FIFO 满和溢出计数
- 重构临界区代码,使用自定义函数保护中断状态
- 修改接收过滤器配置,支持按掩码匹配标准帧进入 FIFO0
- 使能 CAN FIFO0 多种中断标志,包括非空、满和溢出中断
2026-05-30 00:24:31 +08:00

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(); }