Peripherals
简介
BouffaloSDK 中外设驱动分为两类: LHAL 和 SOC ,前者对通用外设进行了统一的封装,不同芯片使用同一套接口,方便用户使用和移植到其他平台。后者则是每个芯片独有且特殊的部分,比如 GLB、HBN、PDS、AON 等等。
下面主要列出 LHAL 相关 API 的使用。
LHAL 中各个外设 API 声明均在 drivers/include 目录下可以查看。在学习 API 使用之前,我们需要了解 struct bflb_device_s 结构体的含义和作用。
1struct bflb_device_s {
2 const char *name;
3 uint32_t reg_base;
4 uint8_t irq_num;
5 uint8_t idx;
6 uint8_t sub_idx;
7 uint8_t dev_type;
8 void *user_data;
9};
parameter |
description |
---|---|
name |
外设名称 |
reg_base |
外设寄存器基地址 |
irq_num |
外设中断号 |
idx |
外设 id |
idx |
外设 id,例如 UART0、UART1 |
sub_idx |
外设子 id,例如 DMA0_CH0、DMA0_CH1 |
dev_type |
外设类型 |
user_data |
用户变量 |
从上我们可以知道 struct bflb_device_s 结构体成员的具体信息,其中比较重要的就是 reg_base 和 irq_num ,有了这两个,我们才能操作外设寄存器和外设中断。那么当我们进行外设配置之前,就需要先获取该结构体句柄,从中获取我们需要的信息,否则不能对外设进行操作。获取结构体句柄有以下两种方式:
bflb_device_get_by_name 通过 name 获取
bflb_device_get_by_id 通过 dev_type 和 idx 获取
那么还有一个问题,结构体句柄保存在哪?
对于每个系列芯片支持的外设,我们将结构体句柄保存在一个 table 表中。详见 lhal/config/xxx/device_table.c 文件。
API 支持情况
了解了上面的基本概念以后,接下来就可以查阅相关 LHAL API 并使用了。当前已经支持的 LHAL API 列表如下:
备注
✔️ 表示已支持; ❌ 表示未支持; ❓ 表示已支持但未测试; ➖ 表示没有该外设。
peripheral |
BL602/BL604 |
BL702/BL704/BL706 |
BL616/BL618 |
BL808 |
---|---|---|---|---|
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 |
❓ |
✔️ |
✔️ |
✔️ |
API 列表
除了使用网页版查看 API 以外, 还提供了 LHAL Doxygen 版本,离线生成文档。 Doxyfile 文件在 drivers/lhal
目录下。
使用 Doxywizard 导入并运行即可。