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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM