GPIO
总览
本示例主要介绍gpio的使用方法。
准备及使用步骤
- 使用步骤:
- 插入将板子的USB电源线;
- 编译
customer_app/periperal/demo_gpio
工程(./genromap BL602
编译602平台,./genromap BL702
编译702版本)并下载工程;- 打开一个串口终端窗口(波特率为2000000,用于接收和发送uart消息)。
- 串口终端输入
demo_gpio_led_on
,可以看到板子上led被点亮。
- 串口输入
demo_gpio_led_off
led灯灭。
- 串口输入
demo_gpio_irq_test
,将demo中用于中断测试的pin3和pin4接GND,会产生下降沿中断。
- 串口输入
demo_gpio_irq1_mask
,此时pin1下降沿中断不会触发,pin2下降沿触发正常。
应用实例
- 示例代码
#include <stdio.h>
#include <hosal_gpio.h>
#include <hosal_dma.h>
#include <blog.h>
static hosal_gpio_dev_t gp1;
void gpio_set_led_on(void)
{
gp1.port = 5;
gp1.config = OUTPUT_OPEN_DRAIN_NO_PULL;
hosal_gpio_init(&gp1);
hosal_gpio_output_set(&gp1, 1);
}
void gpio_set_led_off(void)
{
hosal_gpio_output_set(&gp1, 0);
}
- 通过
hosal_gpio_dev_t
定义一个gpio设备,port对应pin脚,调用hosal_gpio_init
初始化gpio,调用hosal_gpio_output_set(&gp1, 1)
使相应pin脚输出高电平,hosal_gpio_output_set(&gp1, 0)
输出低电平。
static hosal_gpio_dev_t key1;
static hosal_gpio_dev_t key2;
static uint8_t arg1 = 2, arg2 = 3;
void key1_irq(void *arg)
{
uint8_t val1 = *(uint8_t *)arg;
if (val1 == arg1) {
blog_info("[HOSAL][GPIO] irq1 ok\r\n");
}
}
void key2_irq(void *arg)
{
uint8_t val2 = *(uint8_t *)arg;
if (val2 == arg2) {
blog_info("[HOSAL][GPIO] irq2 ok\r\n");
}
}
void gpio_irq_test(void)
{
key1.port = 3;
key1.config = INPUT_PULL_UP;
hosal_gpio_init(&key1);
key2.port = 4;
key2.config = INPUT_PULL_UP;
hosal_gpio_init(&key2);
hosal_gpio_irq_set(&key1, HOSAL_IRQ_TRIG_NEG_PULSE, key1_irq, &arg1);
hosal_gpio_irq_set(&key2, HOSAL_IRQ_TRIG_NEG_PULSE, key2_irq, &arg2);
}
void key1_irq_mask_test(uint8_t mask)
{
hosal_gpio_irq_mask(&key1, mask);
}
- 通过
hosal_gpio_irq_set(&key1, HOSAL_IRQ_TRIG_NEG_PULSE, key1_irq, &arg1)
注册下降沿中断函数key1_irq
,传入参数arg1
。 - 不再使用该gpio可调用
hosal_gpio_finalize
释放相应内存。
hosal_gpio_finalize(&gp1);