问答

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

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)
        {
             按键控制;
        }
    }
}

进不去中断

回答 +关注 6
4242人浏览 1人回答问题 分享 举报
1 个回答
  • int main()
    {

      SetSysClock( CLK_SOURCE_PLL_60MHz );

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

      while( 1 )
        ;
    }

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

        PRINT("GPIOB_irqFlag = 0x%08X\r\n",GPIOB_irqFlag);
       if(GPIOB_irqFlag&GPIO_Pin_15)
       {
          PRINT("Run at EXTI GPIO_Pin_15 \r\n");
          GPIOB_ClearITFlagBit(GPIO_Pin_15);     /* Clear Flag */
       }
       if(GPIOB_irqFlag&GPIO_Pin_14)
       {
          PRINT("Run at EXTI GPIO_Pin_14 \r\n");
          GPIOB_ClearITFlagBit(GPIO_Pin_14);     /* Clear Flag */
       }
       if(GPIOB_irqFlag&GPIO_Pin_13)
       {
          PRINT("Run at EXTI GPIO_Pin_13 \r\n");
          GPIOB_ClearITFlagBit(GPIO_Pin_13);     /* Clear Flag */
       }

       if(GPIOB_irqFlag&(GPIO_Pin_22))
      {
             PRINT("Run at EXTI GPIO_Pin_22 \r\n");
             GPIOB_ClearITFlagBit(GPIO_Pin_22);    /* Clear Flag */
      }
    }


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



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