驱动程序

C2000Ware 支持通过多种方式访问外设寄存器:直接寄存器访问、驱动程序库 (DriverLib) 和位域。以下各节详细介绍了这些方式。DriverLib 是新一代 MCU 访问外设的优选模式。老一代 MCU 仅支持 Bitfield。但新一代 MCU 也支持 Bitfield,以实现兼容性和轻松迁移。

图 3 显示了 DriverLib 和 Bitfield 之间的比较。

../_images/RegAccess.png

图 3 DriverLib、位域和直接寄存器访问

下面汇总了差异:

  • 间接寄存器访问

    • 寄存器地址分别定义 #define

    • 用户必须计算位域掩码

    • 不易于读取

    • 例如 *CMPR1 = 0x1234;

  • 位域头文件

    • 头文件将所有寄存器定义为结构

    • 位域直接访问

    • 易于读取

    • 例如 EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD * duty;

  • DriverLib

    • DriverLib 执行低级寄存器操作

    • 易于读取

    • 抽象级别最高

    • 例如 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, duty);

DriverLib

C2000 外设驱动程序库 (Driverlib) 是一组用于配置内存映射外设寄存器的低级驱动程序。它为所有外设提供驱动程序并提供对几乎所有功能的访问。driverlib 用 C 语言编写,由数据结构、宏定义和函数组成。C2000Ware 中提供了 driverlib 的完整源代码。

在顶层,driverlib 是基于器件整理的,每个器件下都有一个器件特定的 driverlib 文件夹。在此器件特定的 driverlib 文件夹中,提供了适用于该器件的外设驱动程序的源代码。

../_images/C2000WareDriver.png

driverlib 的源代码和头文件位于 driverlib 文件夹中。头文件(.h 文件)包含:

  • #defines – 通常用于参数

  • typedefs – 结构和枚举,通常用于参数

  • 静态内联函数 – 所有相对较短的函数都被内联以提高性能

  • extern 函数原型

实现(.c 文件)包含 extern 函数的实现。外设驱动程序使用硬件头文件来获取有关外设寄存器定义的信息。这些硬件头文件在 driverlib/inc 文件夹中提供,在大多数情况下,每个外设器件都有一个头文件。在 driverlib/ccs 文件夹下提供了一个 CCS 工程来构建 driverlib 库。

位域

使用寄存器文件和位域是访问硬件或外设寄存器的另一种方法。这种方法用于访问外设并在 controlSUITE 中编写应用程序。从 C2000Ware 开始,访问外设的推荐方法是使用 driverlib。但是,为了帮助从 bitfield 平稳过渡到 driverlib,bitfield 软件依旧打包在 C2000Ware 中。

../_images/C2000WareBitfield.png

Bitfield 源代码在 C2000Ware 的 device_support 文件夹中进行整理。device_support 下有特定于器件的文件夹,其中包含 bitfield 标头、用于初始化的通用代码和每个外设的示例。用户可以参考应用报告 SPRAAA85E,以详细了解有关 driverlib 和 bitfield 实现以及如何在构建应用程序时利用这些方法。