#include "gpio.h" #define TEST_PORT (0) #define TEST_PIN (3) #define SK_SW2_INIT() Gpio_InitIO(3, 3, GpioDirIn) #define SK_SW2_GET() Gpio_GetIO(3,3) #define SK_LED_INIT() Gpio_InitIO(0, 3, GpioDirOut) #define SK_LED_SET(x) Gpio_SetIO(0,3,(x)) uint8_t num = 1; void Gpio_IRQHandler(uint8_t u8Param) { *((uint32_t *)((uint32_t)&M0P_GPIO->P3ICLR + u8Param * 0x40)) = 0; SK_LED_SET(0); delay1ms(100); SK_LED_SET(1); delay1ms(100); } int32_t main(void) { SK_SW2_INIT(); SK_LED_INIT(); Gpio_InitIO(TEST_PORT, TEST_PIN, GpioDirOut); Gpio_SetIO(TEST_PORT, TEST_PIN, TRUE); Gpio_InitIOExt(3, 3, GpioDirIn, TRUE, FALSE, FALSE, 0); Gpio_ClearIrq(3, 3); Gpio_EnableIrq(3, 3, GpioIrqRising); EnableNvic(PORT3_IRQn, DDL_IRQ_LEVEL_DEFAULT, TRUE); while (1) { Gpio_SetIO(TEST_PORT, TEST_PIN, TRUE); delay1ms(1000); Gpio_SetIO(TEST_PORT, TEST_PIN, FALSE); delay1ms(1000); } }把这个代码改成p33按键可以控制中断的退出和进入
时间: 2024-03-16 17:45:02 浏览: 20
好的,我帮您修改了代码,如下所示:
```
#include "gpio.h"
#define TEST_PORT (0)
#define TEST_PIN (3)
#define SK_SW2_INIT() Gpio_InitIO(3, 3, GpioDirIn)
#define SK_SW2_GET() Gpio_GetIO(3,3)
#define SK_LED_INIT() Gpio_InitIO(0, 3, GpioDirOut)
#define SK_LED_SET(x) Gpio_SetIO(0,3,(x))
uint8_t num = 1;
uint8_t flag = 1;
void Gpio_IRQHandler(uint8_t u8Param) {
*((uint32_t *)((uint32_t)&M0P_GPIO->P3ICLR + u8Param * 0x40)) = 0;
if (flag == 1) { // 检测到按键中断
flag = 0;
Gpio_DisableIrq(3, 3, GpioIrqRising); // 禁用按键中断
} else { // 检测到按键松开
flag = 1;
Gpio_EnableIrq(3, 3, GpioIrqRising); // 重新使能按键中断
}
SK_LED_SET(0);
delay1ms(100);
SK_LED_SET(1);
delay1ms(100);
}
int32_t main(void) {
SK_SW2_INIT();
SK_LED_INIT();
Gpio_InitIO(TEST_PORT, TEST_PIN, GpioDirOut);
Gpio_SetIO(TEST_PORT, TEST_PIN, TRUE);
Gpio_InitIOExt(3, 3, GpioDirIn, TRUE, FALSE, FALSE, 0);
Gpio_ClearIrq(3, 3);
Gpio_EnableIrq(3, 3, GpioIrqRising);
EnableNvic(PORT3_IRQn, DDL_IRQ_LEVEL_DEFAULT, TRUE);
while (1) {
if (flag == 1) { // 检测到按键松开
Gpio_SetIO(TEST_PORT, TEST_PIN, TRUE);
delay1ms(1000);
Gpio_SetIO(TEST_PORT, TEST_PIN, FALSE);
delay1ms(1000);
}
}
}
```
这个修改后的代码中,添加了一个flag变量用来标志按键是否被按下,以及在中断处理函数中检测按键状态并相应地禁用或使能按键中断。在主函数中,只有在flag变量为1(即按键松开)的时候才执行LED闪烁的代码。这样,按下按键时,LED将停止闪烁,直到按键再次松开。