问答

汇集网友智慧,解决技术难题

21ic问答首页 - CH573中断进不去

CH573 pi gp IO GPIO TE

CH573中断进不去

CGX9905072021-08-18
void KEY_GPIO_Init(void)
{
    GPIOB_ModeCfg(GPIO_Pin_22,GPIO_ModeIN_PU);//初始化位输入上拉
    GPIOB_ITModeCfg(GPIO_Pin_22,GPIO_ITMode_FallEdge);//开启下降沿中断
    PFIC_EnableIRQ( GPIO_B_IRQn );//开启GPIOB中断}
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void GPIOB_IRQHandler(void)
{
    uint16_t GPIOB_irqFlag = GPIOB_ReadITFlagPort();
    if( GPIOB_irqFlag & GPIO_Pin_22 )
    {
        GPIOB_ClearITFlagBit(GPIO_Pin_22);
        if(GPIOB_ReadPortPin(GPIO_Pin_22) == 0)
        {
             按键控制;
        }
    }
}

进不去中断

回答 +关注 19
4986人浏览 1人回答问题 分享 举报
1 个回答
    1. int main()
    2. {

    3.   SetSysClock( CLK_SOURCE_PLL_60MHz );

    4.   /* 配置串口调试 */
    5.   DebugInit();
    6.   PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );
    7.   
    8.   GPIOB_ModeCfg(GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_22,GPIO_ModeIN_PU);
    9.   GPIOB_ITModeCfg(GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_22,GPIO_ITMode_FallEdge);
    10.   PFIC_EnableIRQ(GPIO_B_IRQn);

    11.   while( 1 )
    12.     ;
    13. }

    14. __attribute__((interrupt("WCH-Interrupt-fast")))
    15. __attribute__((section(".highcode")))
    16. void GPIOB_IRQHandler( void )                        //GPIOB中断服务程序
    17. {
    18.     uint32_t GPIOB_irqFlag = GPIOB_ReadITFlagPort();

    19.     PRINT("GPIOB_irqFlag = 0x%08X\r\n",GPIOB_irqFlag);
    20.    if(GPIOB_irqFlag&GPIO_Pin_15)
    21.    {
    22.       PRINT("Run at EXTI GPIO_Pin_15 \r\n");
    23.       GPIOB_ClearITFlagBit(GPIO_Pin_15);     /* Clear Flag */
    24.    }
    25.    if(GPIOB_irqFlag&GPIO_Pin_14)
    26.    {
    27.       PRINT("Run at EXTI GPIO_Pin_14 \r\n");
    28.       GPIOB_ClearITFlagBit(GPIO_Pin_14);     /* Clear Flag */
    29.    }
    30.    if(GPIOB_irqFlag&GPIO_Pin_13)
    31.    {
    32.       PRINT("Run at EXTI GPIO_Pin_13 \r\n");
    33.       GPIOB_ClearITFlagBit(GPIO_Pin_13);     /* Clear Flag */
    34.    }

    35.    if(GPIOB_irqFlag&(GPIO_Pin_22))
    36.   {
    37.          PRINT("Run at EXTI GPIO_Pin_22 \r\n");
    38.          GPIOB_ClearITFlagBit(GPIO_Pin_22);    /* Clear Flag */
    39.   }
    40. }


    去除警告
    1. #define        GPIOB_ClearITFlagBit( pin )                (R16_PB_INT_IF = (uint16_t)((pin)|(((pin)&(GPIO_Pin_22|GPIO_Pin_23))>>14)))                /* 清除GPIOB端口引脚中断标志状态 */



您需要登录后才可以回复 登录 | 注册