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

 

posted @ 2022-01-19 16:26  debugdabiaoge  阅读(1938)  评论(0编辑  收藏  举报