hw_config.h 2.8 KB

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