Files
DCU_APP/GD32E508_DCU_APP/sys/config.h
T
cbb 1612e326ee feat(cproject): 重构项目文件结构并添加EtherCAT通信支持
- 将设备相关文件重新组织为device/spi和comm分组
- 添加EtherCAT从站通信模块(esc_exmc_bus、esc_lan9252、ethercat_slave等)
- 添加EXMC外设组件支持
- 统一文件命名规范为小写

refactor(canfd): 优化CANFD模块中断安全性和配置方式

- 替换自定义临界区函数为RT_CRITICAL_SAVE/RESTORE宏
- 使用配置常量CONFIG_IRQ_PREEMPT_CAN替代硬编码值
- 简化邮箱满时的处理逻辑,移除不必要的SysTick等待
- 移除废弃的中断保存头文件引用

refactor(timer): 更新定时器配置以使用配置常量

- 修复头文件包含路径大小写问题
- 使用CONFIG_NVIC_PRIORITY_GROUP配置项替代硬编码值
2026-06-26 00:57:59 +08:00

262 lines
12 KiB
C

/**
* @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 0
/** @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 0U
/** @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 EtherCAT 使能开关:0=禁用(未焊接 LAN9252),1=启用(焊接后)。
* 禁用时 comm/ 全部代码不编译,初始化不调用 EtherCAT,EXMC/EXTI0-2 不配置。 */
#define CONFIG_ETHERCAT_ENABLE 0
/** @brief SYNC0 同步模式:0=EXTI 外部触发(ESC 硬件同步,默认),1=TIMER0 降级(DC 未同步时)。 */
#define CONFIG_ETHERCAT_SYNC_MODE 0
/* ---------- 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 */