EFM32外设驱动库简析--

更新时间:2023-03-20 16:04:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EFM32外设驱动库简析

EFM32 外设驱动库简析

本文件简单介绍一下 EFM32 的 API 外设驱动,个人觉得写的还是非常好的,支持 CMSIS, 并在其上搭建 emlib,使用起来非常方便。

1. EFM32 外设驱动库架构

如上图所示,最底层的 Peripherals 表示 EFM32 片内的寄存器,可以称之为硬件层。CMSIS 是 ARM 公司提出的名为为了方便各大基于 Cortex Mx 内核 MCU 之间移植软件而定义的偏底层的软件框架 Cortex Microcontroller Software Interface Standar。再往上就是 emlib 了,所以可见 emlib 是基于 CMSIS 的。

MCU 的开发者可以有两个选择来编写应用程序:1. 通过 emlib 提供的 API 函数;2.直接 调用 CMSIS 提供的寄存器访问接口,以结构体的形式。

2. emlib 整个源代码

源码包含几个路径,用户可以打开\emlib\来查看。以下内容逐个对各个路径包含的文件进 行简单分析。

2.1 文件夹 emlib\Device\EnergyMicro\EFM32TG\Include

EFM32外设驱动库简析

该文件夹下包含了 CMSIS 的头文件,主要可以分成 5 类: efm32.h efm32tgxxxfxx.h efm32tg_peripheral.h,比如 efm32tg_adc.h system_efm32tg.h efm32_calibrate.h

efm32.h 文件是 EFM32 的 Peripheral Access Layer,通过在编译器中定义不同型号来选择包含 不同的头文件,具体用法:

Example: Add "-DEFM32G890F128" to your build options, to define part Add "#include "efm32.h" to your source files

EFM32外设驱动库简析

efm32tgxxxfxx.h 文件主要定义了该款 MCU 外设存在与否的情况,每个外设的配置寄存器组的起始地址等,同时用 include 包含了相应的 efm32tg_peripheral.h。还定义了如下结构体。

注意 , 以上定义均在 efm32tg_peripheral 中找,例如 ADC_Typedef * 的定义在 efm32tg_adc.h。

efm32tg_peripheral.h 主要定义了某外设 peripheral 的寄存器和比特域,以及一系列比特域 mask 等。 以 efm32tg_adc.h 为例,定义的 ADC 寄存器的结构体:

注意以上 struct 的__IO,__I 等修饰符。其实这些修饰符等同于 volatile,是 ARM 公司在

EFM32外设驱动库简析

CMSIS 3.0 中引入的,特此说明。如何使用 CMSIS?就这样使用:

system_efm32tg.h 文件主要内容为 system_efm32tg.c 中所有 system 函数的声明,外加所有中断服务函数 Handler 的函数原型声明:

EFM32外设驱动库简析

efm32_calibrate.h 文件只定义了一个结构体:

2.2 在文件夹\emlib\Device\EnergyMicro\EFM32TG\Source\ARM 中,包含启动文件 startup_efm32tg.s。

2.3 在文件夹 \emlib\Device\EnergyMicro\EFM32TG\Source 下有一个 c 文件

system_efm32tg.c,包含 system 系统函数的定义,主要是设置和获取系统高频和低频时 钟。

至此,从底层启动文件到 CMSIS 部分结束了。下面是建立在其上的 emlib 外设驱动库。

2.4 文件夹下\emlib 下包含 inc 和 src 两个子文件夹,inc 文件包含所有 EFM32 外设的驱动库的头文件,src 文件夹包含驱动库源代码。两者一一对应,即一个外设会有一个.h 文件

EFM32外设驱动库简析

和一个.c 文件与之对应。但是细心研究会发现,inc 中头文件总共有 35 个.h 文件,src 中总共有 30 个.c 文件。

EFM32外设驱动库简析

多出来的 5 个文件分别如下,而所有其他 30 个文件均为外设驱动 API 函数的来源。

em_version.h

em_bitband.h em_chip.h em_common.h em_part.h

em_version.h 只定义了几个常量用于表示 emlib 的版本

em_bitband.h 虽然是.h 文件,但是其中却定义两个函数,一个用于操作外设 Peripheral 的 Bitband,一个用于操作 SRAM 的 Bitband。

EFM32外设驱动库简析

em_chip.h 同样是.h 文件,但是也定义了一个函数,主要用于修复 EFM32 芯片的 Bug,在 Main 函数执行的最开始需要调用该函数。

em_common.h 定义了一些宏,被用于整个 emlib 的实现。

em_part.h 文件主要根据一个宏定义,从而让编译器能包含正确的型号的.h,比如,如果在 MDK IDE 中定义了 EFM32TG842F32, 通过包含 em_part.h 就可以让编译器找到 efm32.h,从而 找到 efm32tg842f32.h;如果定义了EFR4D1080F256,则整个工程将包含efr4.h文件。

关于如何使用 emlib 呢?

EFM32外设驱动库简析

本文来源:https://www.bwwdw.com/article/txy4.html

Top