2026-06-26 00:57:59 +08:00
|
|
|
/**
|
|
|
|
|
* @file ethercat_sync.h
|
|
|
|
|
* @brief EtherCAT SYNC0 周期同步接口(EXTI 独立向量 / TIMER0 降级)。
|
|
|
|
|
* @note 默认由 LAN9252 SYNC0 引脚(PB0/EXTI0)硬件触发周期中断,
|
|
|
|
|
* preempt=0 独占向量保证抖动 <1us;CONFIG_ETHERCAT_SYNC_MODE=1 时用 TIMER0 降级。
|
|
|
|
|
* ESC IRQ(PB1/EXTI1,preempt=1)与 SYNC1(PB2/EXTI2,preempt=1)独立向量。
|
|
|
|
|
*/
|
|
|
|
|
#ifndef COMM_ETHERCAT_SYNC_H
|
|
|
|
|
#define COMM_ETHERCAT_SYNC_H
|
|
|
|
|
|
2026-09-01 03:07:48 +08:00
|
|
|
#include <cstdint>
|
|
|
|
|
|
2026-06-26 00:57:59 +08:00
|
|
|
class EthercatSync {
|
|
|
|
|
public:
|
|
|
|
|
/** @brief 初始化 SYNC0/IRQ/SYNC1 EXTI 引脚与 NVIC(或降级模式 TIMER0)。 */
|
|
|
|
|
static void init();
|
|
|
|
|
|
2026-09-01 03:07:48 +08:00
|
|
|
/** @brief 同步 ISR 是否已激活(init 成功使能 EXTI NVIC 后为 true)。
|
|
|
|
|
* @note EXMC/HBI 诊断(会拆总线)必须在此返回 false 时才允许执行。 */
|
|
|
|
|
static bool isActive() { return s_active; }
|
|
|
|
|
|
|
|
|
|
/** @brief SYNC0 中断累计次数(DC 通路验证:主站设 1ms 周期时应 ~1000/s)。 */
|
|
|
|
|
static uint32_t getSync0Count() { return s_sync0Count; }
|
|
|
|
|
/** @brief SYNC1 中断累计次数。 */
|
|
|
|
|
static uint32_t getSync1Count() { return s_sync1Count; }
|
|
|
|
|
/** @brief ESC IRQ(PDI AL Event)中断累计次数。 */
|
|
|
|
|
static uint32_t getEscIrqCount() { return s_escIrqCount; }
|
|
|
|
|
|
2026-06-26 00:57:59 +08:00
|
|
|
/** @brief SYNC0 EXTI 中断处理(EXTI0)。 */
|
|
|
|
|
static void onSync0Exti();
|
|
|
|
|
/** @brief ESC IRQ EXTI 中断处理(EXTI1)。 */
|
|
|
|
|
static void onEscIrqExti();
|
|
|
|
|
/** @brief SYNC1 EXTI 中断处理(EXTI2,备用)。 */
|
|
|
|
|
static void onSync1Exti();
|
|
|
|
|
/** @brief TIMER0 降级模式中断处理。 */
|
|
|
|
|
static void onTimerIrq();
|
2026-09-01 03:07:48 +08:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static bool s_active; /**< init() 成功后置位(EXTI NVIC 已使能,HBI 有并发用户)。 */
|
|
|
|
|
static volatile uint32_t s_sync0Count; /**< SYNC0 ISR 累计次数(ISR 内自增)。 */
|
|
|
|
|
static volatile uint32_t s_sync1Count; /**< SYNC1 ISR 累计次数。 */
|
|
|
|
|
static volatile uint32_t s_escIrqCount; /**< ESC IRQ ISR 累计次数。 */
|
2026-06-26 00:57:59 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif /* COMM_ETHERCAT_SYNC_H */
|