这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» CYT4BFgpio中断不起作用的原因?

共2条 1/1 1 跳转至

CYT4BFgpio中断不起作用的原因?

工程师
2024-02-29 20:15:45 打赏

我目前正在使用 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); }}




关键词: CYT4BF ModustoolBox GPIO

助工
2024-02-29 20:16:15 打赏
2楼

中断的原因可以有很多,以下是一些可能的原因和解决方法:

1. 硬件连接问题:确保按钮正确连接到 GPIO 引脚。
2. 外部中断处理器(如中断控制器)设置问题:确保正确启用 NVIC 并设置适当的优先级。请检查 `NVIC_EnableIRQ()` 和 `NVIC_SetPriority()` 函数的调用。

例如,以下代码示例启用了 GPIO 中断,并设置了优先级为中断控制器的默认值:

```
NVIC_EnableIRQ(intrCfg.intrsrc);
NVIC_SetPriority(intrCfg.intrsrc, (uint32_t)cy_isr_priority_default);
```

3. 中断配置问题:确保正确配置了 GPIO 中断,并设置中断触发模式。例如,以下代码示例将 GPIO 引脚配置为下降沿触发的中断:

```
Cy_GPIO_SetInterruptEdge(pinNumber, CY_GPIO_INTR_FALLING);
```

4. 回调函数命名问题:确保回调函数命名正确,并与中断配置匹配。例如,以下代码示例将回调函数命名为 `ButtonIntHandler()`:

```
void ButtonIntHandler(void)
{
// 中断处理逻辑
}

// 中断处理函数
void ioss_interrupts_gpio_16_IRQHandler(void)
{
ButtonIntHandler();
}
```

5. 中断优先级问题:如果系统中存在多个中断源,则确保优先级正确设置。如果两个中断共享相同的优先级,则可能出现中断冲突。尝试设置不同的优先级以解决此问题。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]