[一、外部中断介绍]
CH32V307VCT6]的外部中断/事件控制器总共包含 19 个边沿检测器,用于产生中断/事件请求。每个中断线都可以独立地配置其触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;挂起寄存器维持所有中断请求状态。EXTI 可以检测到脉冲宽度小于内部 APB2 的时钟周期。多达 80 个通用 I/O 口都可选择连接到16 个外部中断线。
CH32V307VCT6的外部中断由内部集成的可编程快速中断控制器管理,可以嵌套8级(这个是可以编程设置的),支持3级深度的硬件压栈(可以通过编程决定是否使用硬件压栈)。每个中断请求都有独立的触发和屏蔽控制位和专用的状态位。外部中断有以下几个:
1、EXTI 线 0 中断
2、EXTI 线 1 中断
3、EXTI 线 2 中断
4、EXTI 线 3 中断
5、EXTI 线 4 中断
6、EXTI 线[9:5]中断
7、EXTI 线[15:10]中断
当发生中断时,系统会去中断向量表找到属于该中断的偏移处找到所在中断的处理地址,同时会更新状态标志。使用外部中断需要配置相应外部中断通道,即选择相应触发沿,使能相应中断。当外部中断通道上出现了设定的触发沿时,将产生一个中断请求,对应的中断标志位也会被置位。对标志位写 1 可以清除该标志位。
二、使用外部硬件中断步骤:
1、配置 GPIO 操作
2、配置对应的外部中断通道的中断使能位(EXTI_INTENR);
3、配置触发沿(EXTI_RTENR 或 EXTI_FTENR),选择上升沿触发、下降沿触发或双边沿触发;
4、在内核的 NVIC/PFIC 中配置 EXTI 中断,以保证其可以正确响应。
三、中断相关寄存器
1 中断使能寄存器(EXTI_INTENR)
2 上升沿触发使能寄存器(EXTI_RTENR)
3 下降沿触发使能寄存器(EXTI_FTENR)
4 软中断事件寄存器(EXTI_SWIEVR)
5 中断标志位寄存器(EXTI_INTFR)
和外部中断相关的寄存器还有很多,就不一一介绍了。我只挑选了以上几个和GPIO口中断有关的简单说明一下。
四、和GPIO有关的中断说明
所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,比如 PA1(或 PB1、PC1、PD1、PE1 等)只能映射到 EXTI1 上,且 EXTI1 只能接受 PA1、PB1、PC1、PD1 或 PE1 等其中之一的映射,两方都是一对一的关系。
外部中断线路有EXTI_Line0~EXTI_Line20,其中EXTI_Line0~EXTI_Line15是供GPIO使用的(因为每个口占用16位,如PE0~PE15),其他的用于别的功能。
更多回帖