/** * @file config.h * @brief 应用级集中配置项定义。 * @note 用于统一管理当前项目中可调的外设、时序、通信与算法常量。 */ #ifndef SYS_CONFIG_H #define SYS_CONFIG_H /** @brief 应用启动横幅字符串。 */ #define APP_BANNER_TEXT "GD32E508 DCU task scheduler start" /** @brief USART0 默认波特率。 */ #define CONFIG_USART0_BAUDRATE 115200U /** @brief ADC 外设实例。 */ #define CONFIG_ADC_INSTANCE ADC0 /** @brief ADC 外部 VIN 检测通道号(原理图:PA6 -> VIN_ADC)。 */ #define CONFIG_ADC_VIN_CHANNEL ADC_CHANNEL_6 /** @brief ADC 内部温度通道号。 */ #define CONFIG_ADC_TEMP_CHANNEL ADC_CHANNEL_16 /** @brief ADC 内部参考电压通道号。 */ #define CONFIG_ADC_VREFINT_CHANNEL ADC_CHANNEL_17 /** @brief ADC 满量程计数值。 */ #define CONFIG_ADC_MAX_VALUE 4095.0f /** @brief 内部参考电压典型值,单位 V。 */ #define CONFIG_ADC_VREFINT_TYPICAL_VOLTAGE 1.20f /** @brief 温度传感器 25℃ 对应电压,单位 V。 */ #define CONFIG_ADC_TEMP_V25 1.43f /** @brief 温度传感器平均斜率,单位 V/℃。 */ #define CONFIG_ADC_TEMP_AVG_SLOPE 0.0043f /** @brief ADC 上电后稳定等待时间,单位 ms。 */ #define CONFIG_ADC_STABILIZE_DELAY_MS 2U /** @brief ADC 规则通道采样时间配置。 */ #define CONFIG_ADC_SAMPLE_TIME ADC_SAMPLETIME_239POINT5 /** @brief ADC 空输入保护时默认 VDDA,单位 V。 */ #define CONFIG_ADC_DEFAULT_VDDA 3.3f /** @brief ADC 中值滤波窗口长度(最终样本数为该值 + 1)。 */ #define CONFIG_ADC_FILTER_SIZE 6U /** @brief CAN 外设实例。 */ #define CONFIG_CAN_INSTANCE CAN0 /** @brief CAN 外设时钟使能枚举。 */ #define CONFIG_CAN_RCU RCU_CAN0 /** @brief CAN 状态报文标准帧 ID。 */ #define CONFIG_CAN_STATUS_ID 0x321U /** @brief ESP32 请求 DCU_APP 进入 Bootloader OTA 窗口的扩展帧 ID(备用 CAN 入口)。 */ #define CONFIG_CAN_OTA_BOOT_REQ_ID 0x00000320U /** @brief 进入 Bootloader OTA 请求魔术字节 0。 */ #define CONFIG_CAN_OTA_BOOT_MAGIC0 0x4FU /** @brief 进入 Bootloader OTA 请求魔术字节 1。 */ #define CONFIG_CAN_OTA_BOOT_MAGIC1 0x54U /** @brief 进入 Bootloader OTA 请求魔术字节 2。 */ #define CONFIG_CAN_OTA_BOOT_MAGIC2 0x41U /** @brief 进入 Bootloader OTA 请求魔术字节 3。 */ #define CONFIG_CAN_OTA_BOOT_MAGIC3 0x21U /** @brief ESP32 在 APP 运行期通过 SPI 发送的进入 Bootloader OTA 命令。 */ #define CONFIG_SPI_APP_OTA_BOOT_CMD 0xB0U /** @brief SPI 进入 Bootloader OTA 命令确认状态:成功。 */ #define CONFIG_SPI_APP_OTA_BOOT_ACK_OK 0xB5U /** @brief SPI 进入 Bootloader OTA 命令确认状态:失败。 */ #define CONFIG_SPI_APP_OTA_BOOT_ACK_ERROR 0xE2U /** @brief CAN 接收过滤器目标标准帧 ID。 */ #define CONFIG_CAN_RX_FILTER_ID CONFIG_CAN_STATUS_ID /** @brief CAN 接收过滤器标准帧掩码;`0x7FFU` 表示精确匹配 11-bit ID。 */ #define CONFIG_CAN_RX_FILTER_MASK 0x7FFU /** @brief 单次 CAN 接收解析任务最多消费的软件队列帧数,避免主循环长期被接收流量占用。 */ #define CONFIG_CAN_RX_PARSE_BUDGET 48U /** @brief CAN 状态载荷中调试标识字符 0。 */ #define CONFIG_CAN_STATUS_TAG0 0x43U /** @brief CAN 状态载荷中调试标识字符 1。 */ #define CONFIG_CAN_STATUS_TAG1 0x41U /** @brief CAN 状态载荷中调试标识字符 2。 */ #define CONFIG_CAN_STATUS_TAG2 0x4EU /** @brief CAN 状态载荷中调试标识字符 3。 */ #define CONFIG_CAN_STATUS_TAG3 0x46U /** @brief 用户调度定时器实例。 */ #define CONFIG_SCHED_TIMER_INSTANCE TIMER2 /** @brief 用户调度定时器中断号。 */ #define CONFIG_SCHED_TIMER_IRQn TIMER2_IRQn /** @brief 用户调度定时器时钟使能宏参数。 */ #define CONFIG_SCHED_TIMER_RCU RCU_TIMER2 /** @brief 用户调度定时器预分频值。 */ #define CONFIG_SCHED_TIMER_PRESCALER 179U /** @brief 用户调度定时器周期重装值。 */ #define CONFIG_SCHED_TIMER_PERIOD 99U /** @brief 用户调度定时器 NVIC 抢占优先级。 */ #define CONFIG_SCHED_TIMER_IRQ_PREEMPT_PRIO 1U /** @brief 用户调度定时器 NVIC 子优先级。 */ #define CONFIG_SCHED_TIMER_IRQ_SUB_PRIO 0U /** @brief 调度基准节拍:ADC VREF 采样周期,单位 100us tick。 */ #define CONFIG_TASK_PERIOD_VREF_SAMPLE_TICKS 5U /** @brief 调度基准节拍:ADC 温度采样/处理周期,单位 100us tick。 */ #define CONFIG_TASK_PERIOD_TEMP_SAMPLE_TICKS 10U /** @brief 调度基准节拍:10ms 计数周期,单位 100us tick。 */ #define CONFIG_TASK_PERIOD_CAN_RX_TICKS 100U /** @brief 调度基准节拍:CAN 发送/状态灯周期,单位 100us tick。 */ #define CONFIG_TASK_PERIOD_CAN_TX_TICKS 1000U /** @brief 调度基准节拍:心跳/诊断打印周期,单位 100us tick。 */ #define CONFIG_TASK_PERIOD_HEARTBEAT_TICKS 10000U /** @brief 周期温度/电压 UART 打印开关:0=关闭,1=开启。 */ #define CONFIG_UART_TEMP_PERIODIC_PRINT 1 /** @brief UART 诊断打印级别:0=仅温度/电压,1=温度/电压+CAN 统计。 */ #define CONFIG_UART_DIAG_LEVEL 1 /** @brief SPI 命令逐帧日志开关:0=关闭,1=开启。高速 CAN 桥接时应关闭。 */ #define CONFIG_SPI_APP_LOG_ENABLE 0 /** @brief CAN_SEND 成功帧详细日志开关:0=关闭,1=开启。开启会显著影响高速传输。 */ #define CONFIG_SPI_CAN_SEND_VERBOSE_LOG 0 /** @brief FWDGT 独立看门狗预分频值。 */ #define CONFIG_FWDGT_PSC FWDGT_PSC_DIV64 /** @brief FWDGT 独立看门狗重载值。 * 超时 = (64 / 40000) * (RLD + 1) = 1.6ms * (RLD+1) * RLD=1874 → 1.6ms * 1875 ≈ 3.0s */ #define CONFIG_FWDGT_RLD 1874U /** @brief FWDGT 超时近似值(毫秒),仅供文档参考。 */ #define CONFIG_FWDGT_TIMEOUT_MS 3000U /* ============================================================ * APP 固件版本号 * ============================================================ */ /** @brief APP 主版本号。 */ #define APP_FW_VERSION_MAJOR 1U /** @brief APP 次版本号。 */ #define APP_FW_VERSION_MINOR 1U /** @brief APP 补丁版本号。 */ #define APP_FW_VERSION_PATCH 2U /** @brief APP 构建编号。 */ #define APP_FW_VERSION_BUILD 0U /* ============================================================ * BOOT 版本在 OTA 配置页中的 Flash 存储地址 * 与 BOOT 工程 sys/config.h 保持一致 * ============================================================ */ /** @brief OTA 配置页基地址。 */ #define CONFIG_OTA_CONFIG_PAGE_ADDR 0x0807E000U /** @brief BOOT 版本存储地址(word 6,低 32 位:major|minor)。 */ #define CONFIG_BOOT_VERSION_ADDR0 (CONFIG_OTA_CONFIG_PAGE_ADDR + 0x18U) /** @brief BOOT 版本存储地址(word 7,低 32 位:patch|build)。 */ #define CONFIG_BOOT_VERSION_ADDR1 (CONFIG_OTA_CONFIG_PAGE_ADDR + 0x1CU) /** @brief OTA 配置页总 word 数(6 个 OTA 标志 + 2 个 BOOT 版本)。 */ #define CONFIG_OTA_CONFIG_WORD_COUNT 8U /* ============================================================ * NVIC 优先级分组与中断优先级分层 * (EtherCAT 实时架构改造:PRE4_SUB0,4 位抢占优先级) * ============================================================ */ /** @brief NVIC 优先级分组:4 位抢占 + 0 位子优先级。 */ #define CONFIG_NVIC_PRIORITY_GROUP NVIC_PRIGROUP_PRE4_SUB0 /** @brief EtherCAT SYNC0 周期中断抢占优先级(最高,永不被阻塞)。 */ #define CONFIG_IRQ_PREEMPT_ETHERCAT_SYNC 0U /** @brief 调度器定时器抢占优先级。 */ #define CONFIG_IRQ_PREEMPT_SCHED 1U /** @brief CAN RX0 抢占优先级。 */ #define CONFIG_IRQ_PREEMPT_CAN 2U /** @brief EtherCAT ESC 事件中断抢占优先级(可被 SYNC0 抢占)。 */ #define CONFIG_IRQ_PREEMPT_ETHERCAT_ESC 1U /** @brief EtherCAT SYNC1 备用抢占优先级。 */ #define CONFIG_IRQ_PREEMPT_ETHERCAT_SYNC1 1U /** @brief SPI / EXTI / USART 抢占优先级(最低)。 */ #define CONFIG_IRQ_PREEMPT_SPI_USART 3U /* ============================================================ * 主循环与实时策略 * ============================================================ */ /** @brief 主循环 WFI 开关:0=关闭(忙等,适配 EtherCAT),1=开启(省电)。 */ #define CONFIG_MAIN_LOOP_WFI_ENABLE 0 /* ============================================================ * EtherCAT LAN9252 使能与配置 * ============================================================ */ /** @brief SYNC0 同步模式:0=EXTI 外部触发(ESC 硬件同步,默认),1=TIMER0 降级(DC 未同步时)。 */ #define CONFIG_ETHERCAT_SYNC_MODE 0 /** @brief periodicIsr 最大执行时间告警阈值(µs)。实测超过此值需评估减小 PDO 大小或优化 EXMC 时序。 * 当前阈值 5µs:基于 32 字节 PDO + EXMC 6 HCLK 时序的估算上限。 * preempt=0 ISR 阻塞窗口 ≤ 此阈值时,CAN/SPI 中断需容忍。 */ #define CONFIG_ETHERCAT_ISR_MAX_US_THRESHOLD 5U /** @brief 输入 PDO(TxPDO)在 PDI 内存区的起始偏移。 * 对应 LAN9252 SyncManager 内存映射,需与主站 ESI 配置匹配。 * @note 占位值,实际数值待主站配置确定后在集成阶段填入。 */ #define CONFIG_ESC_PDI_INPUT_OFFSET 0x1000U /** @brief 输出 PDO(RxPDO)在 PDI 内存区的起始偏移。 * 对应 LAN9252 SyncManager 内存映射,需与主站 ESI 配置匹配。 * @note 占位值,实际数值待主站配置确定后在集成阶段填入。 */ #define CONFIG_ESC_PDI_OUTPUT_OFFSET 0x1200U /* ---------- EXMC 引脚配置(GD32E508 EXMC 标准映射) ---------- */ /** @brief EXMC NOR/SRAM Region1 基址(NE1 片选)。 */ #define CONFIG_ESC_EXMC_BASE_ADDR 0x60000000U /** @brief EXMC BANK 选择(BANK0 Region1)。 * @note EXMC 库未纳入编译时回退为 0U;启用 EtherCAT 时 EXMC 组件将被引入。 */ #ifdef EXMC_BANK0_NORSRAM_REGION1 #define CONFIG_ESC_EXMC_BANK_NOR_SRAM_REGION1 EXMC_BANK0_NORSRAM_REGION1 #else #define CONFIG_ESC_EXMC_BANK_NOR_SRAM_REGION1 0U #endif /* ---------- ESC 中断引脚(PB0/PB1/PB2,三个独立 EXTI 向量) ---------- */ /** @note 保留 PA0 给未来 STANDBY 模式唤醒(WKUP_PIN0)。 */ #define CONFIG_ESC_SYNC0_PORT GPIOB #define CONFIG_ESC_SYNC0_PIN GPIO_PIN_0 #define CONFIG_ESC_SYNC0_EXTI EXTI_0 #define CONFIG_ESC_SYNC0_IRQn EXTI0_IRQn #define CONFIG_ESC_SYNC0_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB #define CONFIG_ESC_SYNC0_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_0 #define CONFIG_ESC_IRQ_PORT GPIOB #define CONFIG_ESC_IRQ_PIN GPIO_PIN_1 #define CONFIG_ESC_IRQ_EXTI EXTI_1 #define CONFIG_ESC_IRQ_IRQn EXTI1_IRQn #define CONFIG_ESC_IRQ_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB #define CONFIG_ESC_IRQ_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_1 #define CONFIG_ESC_SYNC1_PORT GPIOB #define CONFIG_ESC_SYNC1_PIN GPIO_PIN_2 #define CONFIG_ESC_SYNC1_EXTI EXTI_2 #define CONFIG_ESC_SYNC1_IRQn EXTI2_IRQn #define CONFIG_ESC_SYNC1_EXTI_SOURCE_PORT GPIO_PORT_SOURCE_GPIOB #define CONFIG_ESC_SYNC1_EXTI_SOURCE_PIN GPIO_PIN_SOURCE_2 /* ---------- EXMC 数据/控制线引脚(GD32E508 标准映射) ---------- */ #define CONFIG_EXMC_D0_PORT GPIOD #define CONFIG_EXMC_D0_PIN GPIO_PIN_14 #define CONFIG_EXMC_D1_PORT GPIOD #define CONFIG_EXMC_D1_PIN GPIO_PIN_15 #define CONFIG_EXMC_D2_PORT GPIOD #define CONFIG_EXMC_D2_PIN GPIO_PIN_0 #define CONFIG_EXMC_D3_PORT GPIOD #define CONFIG_EXMC_D3_PIN GPIO_PIN_1 #define CONFIG_EXMC_D4_PORT GPIOE #define CONFIG_EXMC_D4_PIN GPIO_PIN_7 #define CONFIG_EXMC_D5_PORT GPIOE #define CONFIG_EXMC_D5_PIN GPIO_PIN_8 #define CONFIG_EXMC_D6_PORT GPIOE #define CONFIG_EXMC_D6_PIN GPIO_PIN_9 #define CONFIG_EXMC_D7_PORT GPIOE #define CONFIG_EXMC_D7_PIN GPIO_PIN_10 #define CONFIG_EXMC_D8_PORT GPIOE #define CONFIG_EXMC_D8_PIN GPIO_PIN_11 #define CONFIG_EXMC_D9_PORT GPIOE #define CONFIG_EXMC_D9_PIN GPIO_PIN_12 #define CONFIG_EXMC_D10_PORT GPIOE #define CONFIG_EXMC_D10_PIN GPIO_PIN_13 #define CONFIG_EXMC_D11_PORT GPIOE #define CONFIG_EXMC_D11_PIN GPIO_PIN_14 #define CONFIG_EXMC_D12_PORT GPIOE #define CONFIG_EXMC_D12_PIN GPIO_PIN_15 #define CONFIG_EXMC_D13_PORT GPIOD #define CONFIG_EXMC_D13_PIN GPIO_PIN_8 #define CONFIG_EXMC_D14_PORT GPIOD #define CONFIG_EXMC_D14_PIN GPIO_PIN_9 #define CONFIG_EXMC_D15_PORT GPIOD #define CONFIG_EXMC_D15_PIN GPIO_PIN_10 #define CONFIG_EXMC_A16_PORT GPIOD #define CONFIG_EXMC_A16_PIN GPIO_PIN_11 #define CONFIG_EXMC_NOE_PORT GPIOD #define CONFIG_EXMC_NOE_PIN GPIO_PIN_4 #define CONFIG_EXMC_NWE_PORT GPIOD #define CONFIG_EXMC_NWE_PIN GPIO_PIN_5 #define CONFIG_EXMC_NE1_PORT GPIOD #define CONFIG_EXMC_NE1_PIN GPIO_PIN_7 #endif /* SYS_CONFIG_H */