/* * hw_config.h * * 可变化的硬件相关逻辑: GPIO 中断、睡眠/唤醒时序、开机初始化、 * 节能曲线表、声音检测。 * 换 PCB / 改引脚 / 调启动流程时只需修改 hw_config.c 即可, * ukey.c 和 ledx.c 的纯逻辑代码不动。 */ #ifndef HW_CONFIG_H #define HW_CONFIG_H #include "CH58x_common.h" /* ---- 节能亮度曲线 ---- * 定义在 hw_config.c 的 eco_plan[],由 eco_advance()/eco_reset() 消费。 * 本结构此前放在 ledx.h,导致 hw_config.c 必须包含 ledx.h 才能引用它; * 移到此处后 hw_config.h 自足,ledx.h <-> hw_config.h 的循环包含被断开。 */ struct eco_s { uint16_t pwm_start; /* 阶段起始 PWM (1/100 单位) */ uint16_t sec; /* 阶段持续时间 (秒) */ uint16_t pwm_end; /* 阶段结束 PWM */ uint8_t is_loop; /* 1=循环体 (结束后跳回循环体起点) */ uint16_t loop_max_sec; /* 循环体总时长上限 (秒), 0=无限 */ }; extern struct eco_s eco_plan[]; /* ---- 按键/电源状态(定义在 ukey.c) ---- */ extern uint8_t key_short_count; /* 短按计数,key_handle_short_press 消费 */ extern uint32_t key_press_tick; /* 本次按下时刻 */ extern uint16_t g_power_idle_count; /* 掉电态空闲计数 */ extern uint32_t g_power_boot_tick; /* 开机时刻,用于防抖判定 */ extern BOOL g_power_woke_by_irq; /* 本次唤醒是否来自 GPIO 中断 */ extern BOOL g_power_need_reset; /* 上电复位请求,key_poll 消费后清零 */ /* ---- 其他模块变量 ---- */ extern BOOL g_rf_is_on; /* RF_PHY.c */ extern BOOL IS_RF_INITED; /* RF_main.c */ /* eco_plan[] 定义在 hw_config.c, 阶段数 ECO_PLAN_LEN 由 sizeof 自动计算 (仅 hw_config.c 内部用)。 * 数据由 pindef.h::MLED_ECO_PLAN_DATA 提供, 改数据无需手动同步长度。 */ /* ---- 节能状态机 (定义在 hw_config.c) ---- */ extern volatile uint8_t eco_idx; extern volatile uint16_t eco_sec; extern volatile uint16_t eco_loop_sec; void eco_reset(void); uint8_t eco_advance(void); /* ---- 声音检测 (原 ledx.c static 变量去 static) ---- */ extern uint32_t sound_last_tick; extern volatile uint16_t sound_hold; extern uint8_t sound_debounce; extern uint8_t sound_last_level; /* ---- 函数声明 ---- */ __INTERRUPT __HIGH_CODE void GPIOA_IRQHandler(void); __INTERRUPT __HIGH_CODE void GPIOB_IRQHandler(void); void key_handle_short_press(uint32_t key_release_tick); void power_enter_sleep(void); void power_boot(void); uint8_t sound_poll(void); void sound_detect_start(void); void sound_detect_stop(void); #endif /* HW_CONFIG_H */