关于ch582M的GPIO外部下降沿中断,为什么把对应的中断脚的中断位清零,再使能中断,还是能进入中断一次

①GPIO_Pin_5下降沿中断初始化:

GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_PU );

GPIOA_ITModeCfg( GPIO_Pin_5, GPIO_ITMode_FallEdge );        // 下降沿唤醒

GPIOA_ClearITFlagBit( GPIO_Pin_5 );        //清GPIO_Pin_5中断标志位

R16_PA_INT_EN &= ~GPIO_Pin_5;           //GPIO_Pin_5中断不使能

PFIC_EnableIRQ( GPIO_A_IRQn );


②应用程序:

中断函数中:另一个脚中断判断状态后打开GPIO_Pin_5中断使能,代码具体如下:

GPIOA_ClearITFlagBit( GPIO_Pin_5 );    //清GPIO_Pin_5中断标志位

R16_PA_INT_EN |= GPIO_Pin_5;            //GPIO_Pin_5中断使能


③现象:

打开该脚中断使能前,该脚外部有脉冲输入,打开使能后,这时即便外部没脉冲输入,中断也能进一次,这个比较危险。


④怎么处理这记忆性的中断?

注:打开中断使能前已经清该脚的中断标志了,怎么还会进去?


你可以看一下我们的PM例程,结合睡眠的函数,通过PA5唤醒,是正常的。

1.png


根据你的描述,我也写了相似的代码进行测试,但没有出现已经清除标志还能进中断的现象,只进入了一次中断,清除了pin5的中断标志,打开了pin5的中断使能。(在pin5没有使能中断时产生下降沿标志位会置,但中断中清除即可)

emobile_2022-03-28_21-20-23.png

emobile_2022-03-28_21-21-45.png


我不知道你测试的外部条件是怎么样的;初始化先设置PIN5脚为下降沿中断,但先不使能中断;这时给PIN5脚输入一个脉冲,之后关闭脉冲输入,再打开中断使能,看看这时会不会有中断进入


就是按照你所说的情况测试的,中断开启前清除标志则不会进中断,如果测试结果不同,可将测试工程贴出。


有可能是我模拟的外部输入的脉冲太快了,超过了中断处理速度


#define PK GPIO_Pin_14


int main()

{

  SetSysClock( CLK_SOURCE_PLL_80MHz );

  GPIOB_ModeCfg( PK , GPIO_ModeIN_Floating );    //PK=1M

  while( 1 )

  {

    if(  GPIOB_ReadPortPin(  PK  )   )  GPIOB_SetBits(LED);

    else  GPIOB_ResetBits(LED);

  }

image.png

请问:如上图显示,有脉冲丢失,如何用IO模拟4M高速采集端口数据?


在此帖已回复http://www.wch.cn/bbs/thread-87084-1.html


只有登录才能回复,可以选择微信账号登录