专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
鲁中晨报  ·  涨涨涨涨!不少人后悔没多囤点…… ·  4 天前  
archrace  ·  竞赛 | 霍华德瀑布度假村设计竞赛 ·  5 天前  
gooood谷德设计网  ·  挪威“借来的土地”装置 ·  1 周前  
51好读  ›  专栏  ›  安信可科技

零基础开发小安派-Eyes-S1【外设篇】——UART

安信可科技  · 公众号  ·  · 2024-11-11 12:08

正文



AiPi-Eyes-S1是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口,具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SPI、UART、I2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。


AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。


从零开始学习小安派:


1、零基础开发小安派-Eyes-S1【入门篇】——初识小安派-Eyes-S1
2、零基础开发小安派-Eyes-S1【入门篇】——安装VMware与Ubuntu
3、入门篇:零基础开发小安派-Eyes-S1——新建工程并烧录调试
4、零基础开发小安派-Eyes-S1入门篇——Win下SSH连接Linux
5、零基础开发小安派-Eyes-S1【入门篇】——Samba共享文件夹
6、零基础开发小安派-Eyes-S1【入门篇】——工程文件架构
7、零基础开发小安派-Eyes-S1【外设篇】——GPIO 输入输出
8、零基础开发小安派-Eyes-S1【外设篇】——GPIO中断编程
9、零基础开发小安派-Eyes-S1【外设篇】——PWM





通用异步收发传输器(Universal Asynchronous Receiver/Transmitter, 通常称为 UART) 是一种异步收发传输器,提供了与外部设备进行全双工数据交换的灵活方式。BL616/BL618 共有 2 组 UART,配合 DMA 使用,可以实现高效的数据通信。



01

了解小安派-Eyes-S1 的 UART


小安派的 UART 是全双工异步通讯,具有丰富的中断控制,DMA 传输、485 协议、10Mbps 波特率、LIN 总线协议等等特征。其有三个时钟源,分别是 XCK、160Mhz CLK 和 BCLK。UART 的控制器分为两个功能模块:发送器和接收器。


数据位长度可选 5 / 6 / 7 / 8 比特


#define UART_DATA_BITS_5 0#define UART_DATA_BITS_6 1#define UART_DATA_BITS_7 2#define UART_DATA_BITS_8 3#define UART_DATA_BITS_9 4


停止位长度可选 0.5 / 1 / 1.5 / 2 比特


#define UART_STOP_BITS_0_5 0#define UART_STOP_BITS_1   1#define UART_STOP_BITS_1_5 2#define UART_STOP_BITS_2   3


支持 奇 / 偶 / 无 / 校验比特

#define UART_PARITY_NONE  0#define UART_PARITY_ODD   1#define UART_PARITY_EVEN  2#define UART_PARITY_MARK  3#define




    
 UART_PARITY_SPACE 4



可配置 MSB / LSB 优先输出

#define UART_LSB_FIRST 0#define UART_MSB_FIRST 1

1.struct bflb_uart_config_s

说明:uart 初始化配置结构体

struct bflb_uart_config_s {uint32_t baudrate;uint8_t direction;uint8_t data_bits;uint8_t stop_bits;uint8_t parity;uint8_t bit_order;uint8_t flow_ctrl;uint8_t tx_fifo_threshold;uint8_t rx_fifo_threshold;};

parameter

description

baudrate

波特率

direction

方向

data_bits

data_bits

stop_bits

停止位

parity

校验位

bit_orders

bit 先行方式

flow_ctrl

流控

tx_fifo_threshold

发送 fifo 中断触发阈值(大于阈值触发中断)

rx_fifo_threshold

接收 fifo 中断触发阈值(大于阈值触发中断)


2.bflb_uart_init

说明: 初始化 uart。使用之前需要开启 uart ip 时钟、设置 uart 时钟源和分频值、选择 gpio 为 uart 中的一个功能。

void bflb_uart_init(struct bflb_device_s *dev, const struct bflb_uart_config_s *config);


parameter

description

dev

设备句柄

config

配置项


3.bflb_uart_deinit

说明: 反初始化 uart。

void bflb_uart_deinit(struct bflb_device_s *dev);

parameter

description

dev

设备句柄


4.bflb_uart_link_txdma

说明: uart tx dma 使能开关。

void bflb_uart_link_txdma(struct bflb_device_s *dev, bool enable);


parameter

description

dev

设备句柄

enable

是否使能 dma


5.bflb_uart_link_rxdma

说明: uart rx dma 使能开关。

void bflb_uart_link_rxdma(struct bflb_device_s *dev, bool enable);


parameter

description

dev

设备句柄

设备句柄

是否使能 dma


6.bflb_uart_putchar

说明: 通过 uart 阻塞式发送一个字符。

int bflb_uart_putchar(struct bflb_device_s *dev, int ch);


parameter

description

dev

设备句柄

ch

字符


7.bflb_uart_getchar

说明: 通过 uart 异步接收一个字符。

int bflb_uart_getchar(struct bflb_device_s *dev);

parameter

description

dev

设备句柄

return

返回 -1 表示没有数据,返回其他表示接收的字符


8.bflb_uart_put

说明:通过 uart 轮询发送数据。

int bflb_uart_put(struct bflb_device_s *dev, uint8_t *data, uint32_t len);


parameter

parameter

dev

设备句柄

data

数据指针

len

数据长度



9.bflb_uart_put_block

说明:通过 uart 阻塞式发送数据。

int bflb_uart_put_block(struct bflb_device_s *dev, uint8_t *data, uint32_t len);


parameter

description

dev

设备句柄

data

数据指针

len

数据长度


10.bflb_uart_get

说明:通过 uart 异步阻塞接收数据。

int bflb_uart_get(struct bflb_device_s *dev, uint8_t *data, uint32_t len);

parameter

description

dev

设备句柄

data

数据指针

len

数据长度


11.bflb_uart_txready

说明: 查询 uart tx fifo 是否准备就绪,准备好才可以填充字符

bool bflb_uart_txready(struct bflb_device_s *dev);


parameter

description

dev

设备句柄

return

为 true 表示就绪


12.bflb_uart_txempty

说明: 查询 uart tx fifo 是否为空。

bool bflb_uart_txempty(struct bflb_device_s *dev);


parameter

description

dev

设备句柄

return

为 true 表示 fifo 已空,无法填充数据

13.bflb_uart_rxavailable

说明: 查询 uart rx 是否有数据。

bool bflb_uart_rxavailable(struct bflb_device_s *dev);


parameter

description

dev

设备句柄

return

为 true 表示有数据,可以进行读取


14.bflb_uart_txint_mask

说明: uart tx fifo 阈值中断屏蔽开关,开启后超过设定阈值则触发中断。

void bflb_uart_txint_mask(struct bflb_device_s *dev, bool mask);


parameter

description

dev

设备句柄

mask

是否屏蔽中断


15.bflb_uart_rxint_mask

说明: uart rx fifo 阈值中断和超时屏蔽开关,开启后超过设定阈值则或者超时则触发中断。

void bflb_uart_rxint_mask(struct bflb_device_s *dev, bool mask);


parameter

description

dev

设备句柄

mask

是否屏蔽中断


16.bflb_uart_errint_mask

说明:uart 错误中断屏蔽开关。

void bflb_uart_errint_mask(struct bflb_device_s *dev, bool mask);


parameter

description

dev

设备句柄

mask

是否屏蔽中断


17.bflb_uart_get_intstatus

说明: 获取 uart 中断标志。

uint32_t bflb_uart_get_intstatus(struct bflb_device_s *dev);


parameter

description

dev

设备句柄

retrun

中断标志


返回的中断标志有以下选项:


#define UART_INTSTS_TX_END  (1 << 0)#define UART_INTSTS_RX_END  (1 << 1)#define UART_INTSTS_TX_FIFO (1 << 2)#define UART_INTSTS_RX_FIFO (1 << 3)#define UART_INTSTS_RTO     (1 << 4)#define UART_INTSTS_PCE     (1 << 5)#define UART_INTSTS_TX_FER  (1 << 6)#define UART_INTSTS_RX_FER  (1 << 7)#if !defined(BL602)#define UART_INTSTS_RX_LSE (1 << 8)#endif#if !defined(BL602) && !defined(BL702)#define UART_INTSTS_RX_BCR (1 << 9)#define UART_INTSTS_RX_ADS (1 << 10)#define UART_INTSTS_RX_AD5 (1 << 11)#endif


18.bflb_uart_int_clear

说明: 清除 uart 中断标志。


void bflb_uart_int_clear(struct bflb_device_s *dev, uint32_t int_clear);


parameter

description

dev

设备句柄

int_clear

清除值

清除值可填入以下参数:


#define UART_INTCLR_TX_END (1 << 0)#define UART_INTCLR_RX_END (1 << 1)#define UART_INTCLR_RTO    (1 << 4)#define UART_INTCLR_PCE    (1 << 5)#if !defined(BL602)#define UART_INTCLR_RX_LSE (1 << 8)#endif#if !defined(BL602) && !defined(BL702)#define UART_INTCLR_RX_BCR (1 << 9)#define UART_INTCLR_RX_ADS (1 << 10)#define UART_INTCLR_RX_AD5 (1 << 11)#endif


19.bflb_uart_feature_control

说明:uart 其他特性相关控制,一般不常用。

int bflb_uart_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);


parameter

description

dev

设备句柄

cmd

控制字

arg

控制参数

return

为负表示不支持该命令

cmd 可以填入以下参数:

#define UART_CMD_SET_BAUD_RATE           (0x01)#define UART_CMD_SET_DATA_BITS           (0x02)#define UART_CMD_SET_STOP_BITS           (0x03)#define UART_CMD_SET_PARITY_BITS         (0x04)#define UART_CMD_CLR_TX_FIFO             (0x05)#define UART_CMD_CLR_RX_FIFO             (0x06)#define UART_CMD_SET_RTO_VALUE           (0x07)#define UART_CMD_SET_RTS_VALUE           (0x08)#define UART_CMD_GET_TX_FIFO_CNT         (0x09)#define UART_CMD_GET_RX_FIFO_CNT         (0x0a)#define UART_CMD_SET_AUTO_BAUD           (0x0b)#define UART_CMD_GET_AUTO_BAUD           (0x0c)#define UART_CMD_SET_BREAK_VALUE         (0x0d)#define UART_CMD_SET_TX_LIN_VALUE        (0x0e)#define UART_CMD_SET_RX_LIN_VALUE        (0x0f)#define UART_CMD_SET_TX_RX_EN            (0x10)#define UART_CMD_SET_TX_RS485_EN         (0x11)#define UART_CMD_SET_TX_RS485_POLARITY   (0x12)#define UART_CMD_SET_ABR_ALLOWABLE_ERROR (0x13)#define UART_CMD_SET_SW_RTS_CONTROL      (0x14)#define UART_CMD_IR_CONFIG               (0x15)#define UART_CMD_SET_TX_FREERUN          (0x16)#define UART_CMD_SET_TX_END_INTERRUPT    (0x17)#define UART_CMD_SET_RX_END_INTERRUPT    (0x18)#define UART_CMD_SET_TX_TRANSFER_LEN     (0x19)#define UART_CMD_SET_RX_TRANSFER_LEN     (0x20)#define UART_CMD_SET_TX_EN               (0x21)#define UART_CMD_SET_BCR_END_INTERRUPT   (0x22)#define UART_CMD_GET_BCR_COUNT           (0x23)




02

示例:UART 发送,中断接收







请到「今天看啥」查看全文