【沁恒RISC-V内核 CH582】3- IO外部中断的使用
[复制链接]
CH582的中断也有一个中断控制器,缩写是PFIC。应该和ARM里的NVIC有点相似,管理中断的优先级和使能。
本次只用最基本的外部中断功能。使用按键触发中断,控制LED等的翻转。
包括2个部分:
- 中断源的设置
- 中断函数的编写
中断源的设置
同ARM一样,中断源的使能是由2部分共同控制的:外设本身和中断管理器。
IO输入端口的中断设置
GPIOB_ModeCfg(GPIO_Pin_4,GPIO_ModeIN_PU);
GPIOB_ITModeCfg(GPIO_Pin_4,GPIO_ITMode_RiseEdge);
首先将IO设置成输入模式,然后配置中断类型,可配置的类型包括:高电平、低电平、上升沿和下降沿。
PFIC中断控制器的设置
PFIC_EnableIRQ(GPIO_B_IRQn);
上面这个函数出现在"core_riscv.h"文件中,这个文件里类似于ARM里的"cm3.h"那个头文件。包括了全局中断的使能和关闭,中断优先级的设置,快速中断设置,重启等指令。
中断函数的编写
我是参考工程中uart的中断函数写的,其中断函数的上部有2个预编译指令(见下面的两行指令)不清楚是做什么用的,百度了一下,大概是为了在编译的时候把中断统一放在某个代码区里。
__INTERRUPT
__HIGH_CODE
按键触发中断翻转LED的中断函数如下:
__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler()
{
if(GPIOB_ReadITFlagBit(GPIO_Pin_4) != 0){
GPIOB_InverseBits(GPIO_Pin_19);
GPIOB_ClearITFlagBit(GPIO_Pin_4);
}
}
中断函数的函数名可以在"startup_CH583.S"里找到。
一些疑问
__INTERRUPT 和__HIGH_CODE 的作用还不知道。
- 手册中提到了 ,对这个不是很理解,手册上也没有细说。猜测可能是有4个可配置的通道,能够连接其它的中断源,然后能够更快速的跳转到中断执行函数里。
手册写的有些简单,而且例程上也没有体现中断的用法。这个希望后期官方能够补充一下。
|