c
#include <rtdevice.h>
#include <board.h>
#include "gd32f10x.h"
static rt_err_t gpio_irq_callback(rt_device_t dev, rt_size_t size)
{
rt_kprintf("GPIO interrupt triggered!\n");
/* 在这里添加您的中断处理代码 */
return 0;
}
static int rt_hw_gpio_irq_init(void)
{
rt_err_t result;
rt_device_t device;
struct rt_device_pin_mode mode;
/* 查找GPIO设备 */
device = rt_device_find("pin");
if (!device)
{
rt_kprintf("Can't find device: pin\n");
return -1;
}
/* 打开GPIO设备 */
result = rt_device_open(device, RT_DEVICE_OFLAG_RDWR);
if (result != RT_EOK)
{
rt_kprintf("Failed to open pin device\n");
return -1;
}
/* 配置PA0为上拉输入 */
mode.pin = GD32_PIN_PA0;
mode.mode = PIN_MODE_INPUT_PULLUP;
rt_device_control(device, RT_DEVICE_CTRL_PIN_MODE, &mode);
/* 注册中断回调函数 */
rt_device_set_rx_indicate(device, gpio_irq_callback);
/* 使能GPIO中断 */
mode.pin = GD32_PIN_PA0;
mode.mode = PIN_IRQ_ENABLE | PIN_IRQ_MODE_RISING;
rt_device_control(device, RT_DEVICE_CTRL_PIN_IRQ, &mode);
return 0;
}
INIT_BOARD_EXPORT(rt_hw_gpio_irq_init);
int main(void)
{
/* 其他初始化代码 */
return 0;
} |
|