150***995
GR5515
SDK2.0.2
void gpio_interrupt_init(void)
{
uint16_t ret;
app_io_init_t io_init = APP_IO_DEFAULT_CONFIG;
io_init.pull = APP_IO_PULLUP;
io_init.mode = APP_IO_MODE_IT_FALLING;
io_init.mux = APP_IO_MUX;
io_init.pin = APP_GPIO_INT1_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT1_TYPE, &io_init, app_io_event_handler, "INT1 pin interrupt");
io_init.pin = APP_GPIO_INT2_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT2_TYPE, &io_init, app_io_event_handler, "INT2 pin interrupt");
io_init.pin = APP_GPIO_INT3_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT3_TYPE, &io_init, app_io_event_handler, "INT3 pin interrupt");
io_init.pin = APP_GPIO_INT4_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT4_TYPE, &io_init, app_io_event_handler, "INT4 pin interrupt");
io_init.pin = APP_GPIO_INT5_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT5_TYPE, &io_init, app_io_event_handler, "INT5 pin interrupt");
io_init.pin = APP_GPIO_INT6_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT6_TYPE, &io_init, app_io_event_handler, "INT6 pin interrupt");
io_init.pin = APP_GPIO_INT7_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT7_TYPE, &io_init, app_io_event_handler, "INT7 pin interrupt");
io_init.pin = APP_GPIO_INT8_PIN;
ret = app_io_event_register_cb(APP_GPIO_INT8_TYPE, &io_init, app_io_event_handler, "INT8 pin interrupt");
io_init.pin = APP_GPIO_EMERGENCY_PIN;
ret = app_io_event_register_cb(APP_GPIO_EMERGENCY_TYPE, &io_init, app_io_event_handler, "EMERGENCY pin interrupt");
}
void app_io_event_handler(app_io_evt_t *p_evt)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
QueueIOReadPacket io_wr_packet;
app_io_pin_state_t pin_level = APP_IO_PIN_RESET;
if (p_evt->arg != NULL)
{
// printf("%s\r\n", (char *)p_evt->arg);
}
if (p_evt->pin == APP_GPIO_INT1_PIN) //int1
{
pin_level = app_io_read_pin(APP_GPIO_INT1_TYPE, APP_GPIO_INT1_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT1_TYPE, APP_GPIO_INT1_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 0;
}
}
if (p_evt->pin == APP_GPIO_INT2_PIN) //int2
{
pin_level = app_io_read_pin(APP_GPIO_INT2_TYPE, APP_GPIO_INT2_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT2_TYPE, APP_GPIO_INT2_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 1;
}
}
if (p_evt->pin == APP_GPIO_INT3_PIN) //int3
{
pin_level = app_io_read_pin(APP_GPIO_INT3_TYPE, APP_GPIO_INT3_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT3_TYPE, APP_GPIO_INT3_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 2;
}
}
if (p_evt->pin == APP_GPIO_INT4_PIN) //int4
{
pin_level = app_io_read_pin(APP_GPIO_INT4_TYPE, APP_GPIO_INT4_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT4_TYPE, APP_GPIO_INT4_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 3;
}
}
if (p_evt->pin == APP_GPIO_INT5_PIN) //int5
{
pin_level = app_io_read_pin(APP_GPIO_INT5_TYPE, APP_GPIO_INT5_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT5_TYPE, APP_GPIO_INT5_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 4;
}
}
if (p_evt->pin == APP_GPIO_INT6_PIN) //int6
{
pin_level = app_io_read_pin(APP_GPIO_INT6_TYPE, APP_GPIO_INT6_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT6_TYPE, APP_GPIO_INT6_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 5;
}
}
if (p_evt->pin == APP_GPIO_INT7_PIN) //int7
{
pin_level = app_io_read_pin(APP_GPIO_INT7_TYPE, APP_GPIO_INT7_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT7_TYPE, APP_GPIO_INT7_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 6;
}
}
if (p_evt->pin == APP_GPIO_INT8_PIN) //int8
{
pin_level = app_io_read_pin(APP_GPIO_INT8_TYPE, APP_GPIO_INT8_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_INT8_TYPE, APP_GPIO_INT8_PIN);
} while(pin_level == APP_IO_PIN_SET);
io_wr_packet.daughtboard_index = 7;
}
}
if (p_evt->pin == APP_GPIO_EMERGENCY_PIN) //int8
{
pin_level = app_io_read_pin(APP_GPIO_EMERGENCY_TYPE, APP_GPIO_EMERGENCY_PIN);
if (pin_level == APP_IO_PIN_RESET)
{
delay_ms(20);
do
{
pin_level = app_io_read_pin(APP_GPIO_EMERGENCY_TYPE, APP_GPIO_EMERGENCY_PIN);
} while(pin_level == APP_IO_PIN_SET);
}
}
board_led_on();
delay_ms(20);
board_led_off();
}
#define APP_GPIO_INT1_PIN APP_IO_PIN_8
#define APP_GPIO_INT1_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT2_PIN APP_IO_PIN_9
#define APP_GPIO_INT2_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT3_PIN APP_IO_PIN_10
#define APP_GPIO_INT3_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT4_PIN APP_IO_PIN_11
#define APP_GPIO_INT4_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT5_PIN APP_IO_PIN_12
#define APP_GPIO_INT5_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT6_PIN APP_IO_PIN_13
#define APP_GPIO_INT6_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT7_PIN APP_IO_PIN_14
#define APP_GPIO_INT7_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_INT8_PIN APP_IO_PIN_15
#define APP_GPIO_INT8_TYPE APP_IO_TYPE_NORMAL
#define APP_GPIO_EMERGENCY_PIN APP_IO_PIN_3
#define APP_GPIO_EMERGENCY_TYPE APP_IO_TYPE_AON
每次复位中断能正常工作,看到LED点亮, 但是触发几十次后,就不响应中断了。 9个GPIO都不响应。不响应的时候使用示波器观察信号源仍然正常的,每次按键有一个向下的脉冲。
Seiyou
你好,可以确认一下系统是否进入了睡眠状态,或者直接禁用睡眠模式看看是否还有问题。
在GR5515中,只有AON_GPIO可以将系统从睡眠状态下唤醒。
禁用睡眠模式的方法:
在user_periph_setup.c中找到pwr_mgmt_mode_set函数调用,将入参改为PMR_MGMT_ACTIVE_MODE
打开微信,使用“扫一扫”即可关注