/**
 * @file hc32f003_config.h
 * @brief HC32F003 硬件配置：引脚定义、寄存器地址、全局常量
 *
 * 芯片参数：
 *   - ARM Cortex-M0+，TSSOP20 封装
 *   - 32KB Flash，4KB SRAM
 *   - Flash 地址范围：0x08000000 ~ 0x08007FFF
 *   - 共 64 个 Sector，每个 512 字节（修正：32KB/512=64 Sector）
 *   - LUT 存储 Sector 地址：0x08007E00（最后一个 Sector）
 */

#ifndef HC32F003_CONFIG_H
#define HC32F003_CONFIG_H

/* DDL 主头文件：包含 hc32f003.h（CMSIS 外设定义）和所有基础类型 */
#include "ddl.h"
#include <stdint.h>
#include <stddef.h>

/* =========================================================
 * 系统时钟
 * ========================================================= */
#define SYSTEM_CLOCK_HZ     24000000UL   /* 24 MHz 内部 RC */
#define MAIN_LOOP_PERIOD_MS 20           /* 主循环周期 20ms */

/* =========================================================
 * PWM 捕获输入引脚
 * ========================================================= */
#define PIN_IN_W    0x01   /* P01 — 暖白 PWM 输入 */
#define PIN_IN_C    0x02   /* P02 — 冷白 PWM 输入 */
#define PIN_IN_R    0x03   /* P03 — 红色 PWM 输入 */
#define PIN_IN_G    0x14   /* P14 — 绿色 PWM 输入 */
#define PIN_IN_B    0x15   /* P15 — 蓝色 PWM 输入 */

/* =========================================================
 * PWM 输出引脚
 * ========================================================= */
#define PIN_OUT_R   0x23   /* P23 — ATIM CH1 红色输出 */
#define PIN_OUT_G   0x24   /* P24 — ATIM CH2 绿色输出 */
#define PIN_OUT_B   0x25   /* P25 — ATIM CH3 蓝色输出 */
#define PIN_OUT_W   0x26   /* P26 — BTIM0 CH1 暖白输出 */
#define PIN_OUT_C   0x27   /* P27 — BTIM1 CH1 冷白输出 */

/* =========================================================
 * 串口引脚
 * ========================================================= */
#define PIN_UART_RX 0x31   /* P31 — UART0 接收 */

/* =========================================================
 * UART 配置
 * ========================================================= */
#define UART_BAUD   9600
#define UART_RX_BUF_SIZE 32

/* =========================================================
 * Flash 存储
 * ========================================================= */
/* HC32F003：32KB Flash = 0x8000 字节，Sector 大小 512 字节 */
#define FLASH_BASE_ADDR     0x08000000UL
#define FLASH_SIZE          0x00008000UL  /* 32KB */
#define FLASH_SECTOR_SIZE   512
#define FLASH_SECTOR_COUNT  64
/* LUT 存储在最后一个 Sector */
#define FLASH_LUT_ADDR      (FLASH_BASE_ADDR + FLASH_SIZE - FLASH_SECTOR_SIZE)
/* = 0x08007E00 */

/* =========================================================
 * 查找表参数
 * ========================================================= */
#define LUT_POINTS_PER_LAYER  20   /* 每层最多 20 个节点 */
#define LUT_LAYER_COUNT       2    /* 共 2 层：layer[0]=100%, layer[1]=70% */

/* 定点运算精度放大倍数（10000 倍） */
#define FIXED_SCALE  10000

/* =========================================================
 * 通用工具宏
 * ========================================================= */
#define CLAMP(x, lo, hi)  ((x) < (lo) ? (lo) : ((x) > (hi) ? (hi) : (x)))
#define MIN(a, b)          ((a) < (b) ? (a) : (b))
#define MAX(a, b)          ((a) > (b) ? (a) : (b))
#define ARRAY_SIZE(arr)    (sizeof(arr) / sizeof((arr)[0]))

/* =========================================================
 * 运行模式
 * ========================================================= */
typedef enum {
    MODE_AUTO  = 0,   /* 自动模式：根据 PWM 捕获计算输出 */
    MODE_DEBUG = 1    /* 调试模式：串口命令直接控制输出 */
} RunMode_t;

/* =========================================================
 * HC32F003 寄存器基地址（简化映射，实际参考 DDL 头文件）
 * ========================================================= */
#define PERIPH_BASE         0x40000000UL
#define RCC_BASE            (PERIPH_BASE + 0x00000000UL)
#define GPIO_BASE           (PERIPH_BASE + 0x00020000UL)
#define UART0_BASE          (PERIPH_BASE + 0x00040000UL)
#define ATIM_BASE           (PERIPH_BASE + 0x00060000UL)
#define BTIM0_BASE          (PERIPH_BASE + 0x00062000UL)
#define BTIM1_BASE          (PERIPH_BASE + 0x00062400UL)
#define FLASH_CTRL_BASE     (PERIPH_BASE + 0x00080000UL)

#endif /* HC32F003_CONFIG_H */
