我目前正在使用 ModustoolBox 为 CYT4BF 创建一个项目。
我正在开发一个程序,该程序在按下按钮时利用 GPIO 中断来切换 LED。
尽管设置了 GPIO 中断标志,但回调函数并未被触发。
请指出代码中的任何错误或错误。
在主函数的无限循环中调用 ButtonInthandler 函数时,它可以正常工作。 但是,当尝试启用 NVIC 并在检测到中断时调用 ButtonInthandler 函数时,该函数可能无法按预期调用。
这是源代码:
const cy_stc_sysint_t intrCfg ={
.intrsrc=ioss_interrupts_gpio_16_IRQn,
/* Interrupt source is GPIO port 16 interrupt */
.intrPriority = GPIO_INTERRUPT_PRIORITY
/* Interrupt priority is 7 */};
int main(void){
cy_rslt_t result;
/* Initialize the device and board peripherals */
result = cybsp_init();
/* Board initialize failed. Stop program execution */
if (result != CY_RSLT_SUCCESS)
{ CY_ASSERT(0); }
__enable_irq();
/* Enable global interrupts. */
init_cycfg_pins();
Cy_GPIO_ClearInterrupt(USER_SW_PORT, USER_SW_PIN);
Cy_SysInt_Init( intrCfg, ButtonIntHandler);
NVIC_EnableIRQ(intrCfg.intrSrc);
for(;;);}
void ButtonIntHandler(void){
uint32_t intStatus;
/* If falling edge detected */
intStatus = Cy_GPIO_GetInterruptStatusMasked(USER_SW_PORT, USER_SW_PIN);
if (intStatus != 0ul) {
Cy_GPIO_ClearInterrupt(USER_SW_PORT, USER_SW_PIN);
/* Toggle LED */
Cy_GPIO_Inv(USER_LED_PORT, USER_LED_PIN); }}