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