带消抖动的外部中断
根据例子来看,初始化部分跟GPIO中断是一样的,我们看中断配置
/*-----------------------------------------------------------------------------------------------------*/
/* GPIO External Interrupt Function Test */
/*-----------------------------------------------------------------------------------------------------*/
printf("EINT0(P3.2) and EINT1(P3.3) are used to test interrupt \n");
/* Configure P3.2 as EINT0 pin and enable interrupt by falling edge trigger */
GPIO_SetMode(P3, BIT2, GPIO_PMD_INPUT);
GPIO_EnableEINT0(P3, 2, GPIO_INT_FALLING);
NVIC_EnableIRQ(EINT0_IRQn);
/* Configure P3.3 as EINT1 pin and enable interrupt by rising and falling edge trigger */
GPIO_SetMode(P3, BIT3, GPIO_PMD_INPUT);
GPIO_EnableEINT1(P3, 3, GPIO_INT_BOTH_EDGE);
NVIC_EnableIRQ(EINT1_IRQn);
/* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 clocks of LIRC clock */
GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_LIRC, GPIO_DBCLKSEL_1024);
GPIO_ENABLE_DEBOUNCE(P3, BIT2 | BIT3);
这里使用的是P3.2和P3.3这两个是从51单片机继承来的外部中断引脚,也就是一个PIN对应一个中断入口,跟GPIO中断多个PIN共用端口是不同的
P3.2设置成输入模式,下降沿触发外部中断0,然后启动对应的中断入口。
P3.3设置为输入模式,双边沿触发模式,然后启动对应的外部中断1.
接下来就是设置防抖动功能了,防抖功能是使用了LIRC实现的,设置防抖时钟,这里用的是1024
然后使能防抖的接口
那意思是这个接口响应速度只有1024了。
看看还有别的设置没有
/**
* @brief Set De-bounce Sampling Cycle Time
*
* @param[in] u32ClkSrc The de-bounce counter clock source. It could be GPIO_DBCLKSRC_HCLK or GPIO_DBCLKSRC_LIRC.
* @param[in] u32ClkSel The de-bounce sampling cycle selection. It could be \n
* GPIO_DBCLKSEL_1, GPIO_DBCLKSEL_2, GPIO_DBCLKSEL_4, GPIO_DBCLKSEL_8, \n
* GPIO_DBCLKSEL_16, GPIO_DBCLKSEL_32, GPIO_DBCLKSEL_64, GPIO_DBCLKSEL_128, \n
* GPIO_DBCLKSEL_256, GPIO_DBCLKSEL_512, GPIO_DBCLKSEL_1024, GPIO_DBCLKSEL_2048, \n
* GPIO_DBCLKSEL_4096, GPIO_DBCLKSEL_8192, GPIO_DBCLKSEL_16384, GPIO_DBCLKSEL_32768.
*
* @return None
*
* @details Set the interrupt de-bounce sampling cycle time based on the debounce counter clock source. \n
* Example: _GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_LIRC, GPIO_DBCLKSEL_4). \n
* It's meaning the De-debounce counter clock source is internal 10 KHz and sampling cycle selection is 4. \n
* Then the target de-bounce sampling cycle time is (4)*(1/(10*1000)) s = 4*0.0001 s = 400 us,
* and system will sampling interrupt input once per 400 us.
*/
#define GPIO_SET_DEBOUNCE_TIME(u32ClkSrc, u32ClkSel) (GPIO->DBNCECON = (GPIO_DBNCECON_ICLK_ON_Msk | (u32ClkSrc) | (u32ClkSel)))
我们肯定防抖能力是可以设定的。
|