CC2640R2F BLE5.0 CC2640R2F UART驱动

本文详细介绍了CC2640R2F芯片在BLE5.0环境下UART驱动的分层实现,包括概述、驱动配置、接口函数等。通过实例展示了如何初始化UART、配置参数、读写数据,并提供了利用UART串口实现数据打印的方法。此外,还介绍了如何编译和调试程序,以实现串口通信功能。
摘要由CSDN通过智能技术生成
公司主页 文档归类 淘宝

UART驱动

这一节我们讲一下UART驱动的分层实现,UART APIs以及如何调用UART APIs来实现基本的串口打印。

概述

UART用于芯片和串行端口之间的数据传输,UART驱动程序经过多层的封装简化了应用程序对UART外设的读写操作,应用程序开发者只需要调用封装好的驱动接口就可以操作串口进行读写了。当然UART也有多种操作模式,例如:阻塞,非阻塞,轮询以及文本/二进制模式,我们可以通过相应的参数配置来选择需要的模式继而进行数据传输。

UART驱动的分层实现

虽然我们在应用层直接调用几个驱动接口就可操作UART进行读写,但是在驱动程序内部从接口函数到底层硬件操作是通过了多层封装的。如图1所示是UART驱动程序的分层实现图:

图1 UART驱动程序的分层实现
由图1我们可以看到,应用程序开发者只需要直接调用中间件层的驱动接口(例如:UART_init,UART_open等等)就可以实现UART驱动功能,这里的中间件层就是我们程序中的UART.c和UART.h所在层。这一层规范统一了应用程序的调用接口,也就是说对于TI不同类型的芯片平台它们在这一层给出的接口都是一样的。应用层都是调用相同的接口来实现UART功能,这样做的好处在于增强了程序的可移植性,不管你的平台怎么换,我的应用程序都是不变的,因为调用的接口相同。
中间件层往下就是业务逻辑层,从业务逻辑层开始往下根据不同的芯片平台其接口封装实现就不尽相同了。这里我们以CC26XX芯片平台为例,业务逻辑层就位于UARTCC26XX.c和UARTCC26XX.h所在的层。这一层主要是调用下一层驱动库中的函数进行一些逻辑操作,实现相应驱动功能接口的封装。需要注意的是这一层封装的驱动接口函数被全部放在一个函数指针结构体中,如List1所示,中间件层不直接调用这些驱动接口,而是通过一个配置文件(CC2640R2_LAUNCHXL.c)将装有驱动接口指针的结构体指针注册到UART_config中,如List2所示,这样中间件层通过调用UART_config中的结构体指针就可以调用业务逻辑层的驱动接口了。
List1:业务逻辑层驱动接口指针结构体

const UART_FxnTable UARTCC26XX_fxnTable = {
    UARTCC26XX_close,
    UARTCC26XX_control,
    UARTCC26XX_init,
    UARTCC26XX_open,
    UARTCC26XX_read,
    UARTCC26XX_readPolling,
    UARTCC26XX_readCancel,
    UARTCC26XX_write,
    UARTCC26XX_writePolling,
    UARTCC26XX_writeCancel
};

List2:UART_config中的驱动接口结构体指针注册

const UART_Config UART_config[CC2640R2_LAUNCHXL_UARTCOUNT] = {
    {
        .fxnTablePtr = &UARTCC26XX_fxnTable,//业务逻辑层接口函数结构体指针注册
        .object      = &uartCC26XXObjects[CC2640R2_LAUNCHXL_UART0],
        .hwAttrs     = &uartCC26XXHWAttrs[CC2640R2_LAUNCHXL_UART0]
    },
};

业务逻辑层再往下就是驱动库层(driver library),业务逻辑层是直接调用这一层的接口函数来实现相应功能的。驱动库层位于uart.c和uart.h所在的层,这一层就开始与硬件接触,进行相应寄存器操作来实现串口驱动了。

UART的驱动配置

在上文中我们已经提到UART的配置数组UART_config[],它位于相应芯片平台的配置文件中,这里我们以CC26XX芯片平台为例,其配置文件为CC2640R2_LAUNCHXL.c。如List3所示,是CC2640R2_LAUNCHXL.c中关于UART的配置代码段。
List3:UART的配置代码段

/*
 *  =============================== UART ===============================
 */
#include <ti/drivers/UART.h>
#include <ti/drivers/uart/UARTCC26XX.h>

UARTCC26XX_Object uartCC26XXObjects[CC2640R2_LAUNCHXL_UARTCOUNT];

const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2640R2_LAUNCHXL_UARTCOUNT] = {
    {
        .baseAddr       = UART0_BASE,
        .powerMngrId    = PowerCC26XX_PERIPH_UART0,
        .intNum         = INT_UART0_COMB,
        .intPriority    = ~0,
        .swiPriority    = 0,
        .txPin          = CC2640R2_LAUNCHXL_UART_TX,
        .rxPin          = CC2640R2_LAUNCHXL_UART_RX,
        .ctsPin         = PIN_UNASSIGNE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值