CH579 CH573 CH582 GPIO中断
GPIO中断(PA0~PA15 PB0~PB15)支持GPIO中断
其中573 PB23和PB22 的GPIO中断
CH582M既有PB8/PB9 引脚,也有PB22/PB23引脚,默认GPIO中断在PB8和PB9,PB22和PB23就是普通IO,无中断功能。
但是通过R16_PIN_ALTERNATE寄存器,可以开启中断映射,使能PB22/PB 23的GPIO中断,此时PB8/PB9无中断功能,仅做普通IO。
GPIOPinRemap(ENABLE,RB_PIN_INTX); 映射函数参考 RB_PIN_INTX - INTX: INT24/INT25 PB8/PB9 -> INT24_/INT25_ PB22/PB23
中断标志位还是在原来8和9的位置上,清除对应的GPIO中断可以参考
__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler(void)
{
GPIOB_ClearITFlagBit(GPIO_Pin_8|GPIO_Pin_9);
}
GPIO中断使能
GPIOA_ModeCfg( GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_15|GPIO_Pin_14, GPIO_ModeIN_PU ); //部分GPIO中断引脚初始化
GPIOA_ITModeCfg( GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_15|GPIO_Pin_14, GPIO_ITMode_LowLevel ); // 低电平中断
PFIC_EnableIRQ( GPIO_A_IRQn );//开启GPIOA中断
中断函数
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void GPIOA_IRQHandler( void )
{
PRINT("%x \n",GPIOA_ReadITFlagPort()); //读GPIOA口中断状态
PRINT("%x \n",GPIOA_ReadITFlagBit(GPIO_Pin_4)); //读GPIO4口中断状态
PRINT("%x \n",GPIOA_ReadITFlagBit(GPIO_Pin_5)); //读GPIO5口中断状态
PRINT("%x \n",GPIOA_ReadITFlagBit(GPIO_Pin_14)); //读GPIO14口中断状态
PRINT("%x \n",GPIOA_ReadITFlagBit(GPIO_Pin_15)); //读GPIO15口中断状态
GPIOA_ClearITFlagBit( GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_14|GPIO_Pin_15 );//清中断
}
运行结果(串口打印)
PA4给低电平触发中断
3f10
10
0
0
0
PA15给低电平触发中断
3f20
0
20
0
0
PA15给低电平触发中断
bf00
0
0
0
8000