发帖
4 0 0

小安派-Eyes-S1 - GPIO输入输出

st780206
论坛元老

22

主题

25

回帖

9632

积分

论坛元老

积分
9632
小安派·S1 510 4 2025-12-4 17:11:37
本帖最后由 st780206 于 2025-12-8 09:00 编辑

根据 零基础开发小安派-Eyes-S1【外设篇】——GPIO输入输出 https://bbs.ai-thinker.com/forum ... ead&tid=524&ctid=19
开发gpio输出


了解LHAL库和小安派-Eyes-S1外设
LHAL库配备了一个结构体作为通用外设的配置工具——struct bflb_device_s

struct bflb_device_s {
  const char *name;uint32_t reg_base;
  uint8_t irq_num;
  uint8_t idx;
  uint8_t sub_idx;
  uint8_t dev_type;
  void *user_data;
};


parameter              description
name              外设名称
reg_base             外设寄存器基地址
irq_num             外设中断号
idx             外设 id,例如 UART0、UART1
sub_idx            外设子 id,例如 DMA0_CH0、DMA0_CH1
dev_type            外设类型
user_data           用户变量
name           外设名称



我们知道,我们对芯片的所有操作其实都是基于对寄存器的配置,所以该结构体的成员中较为重要的为reg_base 和 irq_num ,有了这两个,我们才能操作外设寄存器和外设中断。

在配置之前,我们也得先初始化结构体获得它的句柄,有两种方式

1.bflb_device_get_by_name 通过 name 获取

2.bflb_device_get_by_id 通过 dev_type 和 idx 获取

获得的句柄会在一个table表中,详情可以看lhal/config/xxx/device_table.c 文件。

小安派-Eyes-S1所支持的外设LHAL库API有如下:
√表示已支持,×表示未支持,-表示没有该外设


parameter                        BL616/BL618
ADC                        √
CAM                        ×
CKS                        √
DAC                        √
DMA                        √
EFUSE                        √
EMAC                        √
FLASH                        √
GPIO                        √
I2C                        √
IR                        √
MJPEG                        √
PWM_v1                        -
PWM_v2                        √
RTC                        √
SEC_AES                        √
SEC_SHA                        √
SEC_TRNG                √
SEC_PKA                        √
SPI                        √
TIMER                        √
UART                        √
USB_v1                        -
USB_v2                        √
WDG                        √



GPIO配置简介
1.头文件bflb_gpio.h
2.gpio mode
gpio的模式可以设置为四种,分别是输入、输出、模拟、复用

#define GPIO_INPUT      (0 << GPIO_MODE_SHIFT) /* Input Enable */
#define GPIO_OUTPUT     (1 << GPIO_MODE_SHIFT) /* Output Enable */
#define GPIO_ANALOG     (2 << GPIO_MODE_SHIFT) /* Analog Enable */
#define GPIO_ALTERNATE  (3 << GPIO_MODE_SHIFT) /* Alternate Enable */

3.gpio pupd
gpio可以选择上拉、下拉、浮空

#define GPIO_FLOAT      (0 << GPIO_PUPD_SHIFT) /* No pull-up, pull-down */
#define GPIO_PULLUP     (1 << GPIO_PUPD_SHIFT) /* Pull-up */
#define GPIO_PULLDOWN   (2 << GPIO_PUPD_SHIFT) /* Pull-down */

4.gpio smt
gpio滤波开关

#define GPIO_SMT_DIS   (0 << GPIO_SMT_SHIFT)
#define GPIO_SMT_EN    (1 << GPIO_SMT_SHIFT)

5.gpio drive
gpio输出能力选择

#define GPIO_DRV_0     (0 << GPIO_DRV_SHIFT)
#define GPIO_DRV_1     (1 << GPIO_DRV_SHIFT)
#define GPIO_DRV_2     (2 << GPIO_DRV_SHIFT)
#define GPIO_DRV_3     (3 << GPIO_DRV_SHIFT)

6.gpio init trig mode
gpio外部中断的触发模式

#define GPIO_INT_TRIG_MODE_SYNC_FALLING_EDGE 0
#define GPIO_INT_TRIG_MODE_SYNC_RISING_EDGE  1
#define GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL    2
#define GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL   3
#if defined(BL702)
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE  5
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL    6
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL   7
#else
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE       8
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE        9
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL          10
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL         11
#endif

7.gpio uart function
每个gpio都可以选择到Uart的任意一个功能,当然区别是在初始化时的选择

#define GPIO_UART_FUNC_UART0_RTS 0
#define GPIO_UART_FUNC_UART0_CTS 1
#define GPIO_UART_FUNC_UART0_TX  2
#define GPIO_UART_FUNC_UART0_RX  3
#define GPIO_UART_FUNC_UART1_RTS 4
#define GPIO_UART_FUNC_UART1_CTS 5
#define GPIO_UART_FUNC_UART1_TX  6
#define GPIO_UART_FUNC_UART1_RX  7
#if defined(BL808) || defined(BL606P)
#define GPIO_UART_FUNC_UART2_RTS 8
#define GPIO_UART_FUNC_UART2_CTS 9
#define GPIO_UART_FUNC_UART2_TX  10
#define GPIO_UART_FUNC_UART2_RX  11
#endif












──── 0人觉得很赞 ────

使用道具 举报

楞刷积分?
哈哈哈
2025-12-5 11:20:57
没编辑完
2025-12-6 21:31:44
感谢分享!赞~🤗
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31134 个
  • 话题数: 42217 篇