一、概述
gd32c10x_misc.c 是 GD32C10x 固件库的内核杂项驱动,直接操作 Cortex‑M3 内核寄存器,实现三大功能:
- NVIC 中断优先级分组、中断开关
- 向量表重映射
- 低功耗模式、SysTick 时钟源配置所有外设中断配置都依赖本文件,使用频率极高。
二、核心函数说明
1. nvic_priority_group_set()
设置中断优先级分组(抢占优先级 + 子优先级)
- 常用:
NVIC_PRIGROUP_PRE2_SUB2(2 位抢占 + 2 位子优先级,默认) - 整个工程只调用一次,放在
main最开头
2. nvic_irq_enable()
开启指定中断并配置优先级
- 参数:中断号、抢占优先级、子优先级
- 优先级数值越小,优先级越高
3. nvic_irq_disable()
关闭指定中断
4. nvic_vector_table_set()
向量表重映射(FLASH/RAM,IAP 升级常用)
5. system_lowpower_set / reset()
设置 / 清除睡眠、深度睡眠低功耗模式
6. systick_clksource_set()
配置 SysTick 时钟源:HCLK 或 HCLK/8
三、例程
#include "gd32c10x_misc.h"
int main(void)
{
// 1. 设置中断分组
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
// 2. 开启外部中断0,抢占优先级1,子优先级0
nvic_irq_enable(EXTI0_IRQn, 1, 0);
// 3. SysTick时钟源配置
systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);
while(1)
{
}
}
// EXTI0中断服务函数
void EXTI0_IRQHandler(void)
{
if(exti_interrupt_flag_get(EXTI_0) != RESET)
{
exti_interrupt_flag_clear(EXTI_0);
// 中断业务逻辑
}
}