跳过正文

ch32v00x_misc.h

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 12: 本文

描述
#

该文件包含 CH32V00x 微控制器中断嵌套控制与 NVIC(嵌套向量中断控制器)初始化相关的函数原型和配置常量。通过配置 CSR 寄存器(0x804)的 bit1,系统可选择是否启用中断嵌套,从而影响优先级分组的分配方式。该模块允许开发者在有限的优先级位宽下灵活配置抢占优先级与子优先级,以满足实时性需求。在不启用嵌套时,所有中断共享同一抢占层级,仅通过子优先级调度;启用嵌套后,可实现真正的多级抢占,提升关键中断响应效率。

常量
#

CSR_INTSYSCR_INEST_definition
#

中断嵌套使能配置常量,用于控制 CSR 寄存器 0x804 的 bit1,决定优先级分组策略。该配置在编译时由 INTSYSCR_INEST 宏决定,通常在启动文件中设定,影响整个 NVIC 优先级结构的行为。

名称 简述
INTSYSCR_INEST_NoEN 0x00 禁用中断嵌套(CSR-0x804 bit1 = 0)
INTSYSCR_INEST_EN 0x01 启用中断嵌套(CSR-0x804 bit1 = 1)

以上所有值均为 uint8_t 类型,但用于配置 32 位 CSR 寄存器的单个位,实际写入时仅影响指定位。

Preemption_Priority_Group
#

优先级分组配置常量,根据中断嵌套是否启用,仅定义一个有效值。若启用嵌套,则使用 NVIC_PriorityGroup_1(1 位抢占 + 1 位子优先级);若禁用,则使用 NVIC_PriorityGroup_0(0 位抢占 + 2 位子优先级)。该设计简化了优先级管理,避免运行时配置冲突。

名称 简述
NVIC_PriorityGroup_0 0x00 禁用嵌套时使用:0 位抢占优先级,2 位子优先级
NVIC_PriorityGroup_1 0x01 启用嵌套时使用:1 位抢占优先级,1 位子优先级

以上所有值都强制转换为 uint32_t,用于传递给优先级配置函数,但实际仅使用低两位。

枚举
#

结构体
#

NVIC_InitTypeDef
#

NVIC 中断通道初始化结构体,用于配置特定中断源的优先级与使能状态。结构体字段与 CSR 寄存器的优先级分配策略紧密耦合,其有效取值范围依赖于 INTSYSCR_INEST 的编译时配置。

名称 类型 简述
NVIC_IRQChannel uint8_t 指定要配置的中断通道号(如 EXTI0_IRQn、TIM2_IRQn 等)
NVIC_IRQChannelPreemptionPriority uint8_t 抢占优先级:启用嵌套时范围为 0~1,禁用时必须为 0
NVIC_IRQChannelSubPriority uint8_t 子优先级:启用嵌套时范围为 01,禁用时范围为 03
NVIC_IRQChannelCmd FunctionalState 中断通道使能状态:ENABLEDISABLE

FunctionalStatech32v00x.h 中定义的枚举类型(ENABLE=1, DISABLE=0),用于控制中断使能开关。

函数
#

NVIC_PriorityGroupConfig
#

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
配置 NVIC 的优先级分组模式,决定抢占优先级与子优先级的位数分配。该函数仅保存配置值至全局变量 NVIC_Priority_Group,不直接写入硬件寄存器,实际优先级编码由 NVIC_Init() 在设置中断时应用。必须在调用 NVIC_Init() 前调用本函数,否则默认使用未定义的分组,可能导致优先级行为异常。

参数:

名称 类型 简述
NVIC_PriorityGroup uint32_t 优先级分组常量,必须为 NVIC_PriorityGroup_0NVIC_PriorityGroup_1,否则行为未定义。

返回值:

NVIC_Init
#

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
根据传入的初始化结构体配置指定中断通道的优先级与使能状态。该函数会根据 NVIC_Priority_Group 的当前配置,自动将抢占优先级与子优先级组合成硬件所需的 8 位优先级值(高 2 位为抢占,低 6 位为子优先级),并调用底层 NVIC_SetPriority() 写入 NVIC 寄存器。同时根据 NVIC_IRQChannelCmd 的值启用或禁用中断。

参数:

名称 类型 简述
NVIC_InitStruct NVIC_InitTypeDef * 指向包含中断通道、优先级和使能状态的配置结构体。必须确保字段值在当前嵌套模式下合法,否则可能导致优先级冲突或无效配置。

返回值:

重要说明

  • INTSYSCR_INEST_EN 模式下,抢占优先级只能为 0 或 1,子优先级只能为 0 或 1,共 4 种组合。
  • INTSYSCR_INEST_NoEN 模式下,抢占优先级必须为 0,子优先级可为 0~3,共 4 种组合。
  • 所有优先级值在内部通过左移 6 位(<< 6)对齐至 NVIC 的高 2 位,确保与硬件寄存器格式一致。
  • 该函数不检查 NVIC_IRQChannel 是否有效,开发者需确保使用的是芯片支持的中断号,否则可能触发异常。
Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 12: 本文

相关文章

ch32v00x.h

该文件是 CH32V003 微控制器的外设访问层头文件,定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象,使开发者可通过结构体指针直接访问寄存器,或通过位掩码配置外设功能。本文件不包含函数原型,仅提供寄存器定义与常量,是所有外设驱动开发的基础。

ch32v00x_adc.h

该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC(模数转换器)支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式,适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置,所有常量均以 uint32_t 或 uint8_t 类型定义,确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格,支持初始化、启动、中断、校准、偏移设置等完整功能链,适用于工业控制、传感器接口、电源管理等嵌入式应用。

ch32v00x_dma.h

该文件定义了 CH32V00x 系列微控制器 DMA(直接存储器访问)外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输,适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道,每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式,极大提升系统并发处理能力。