了解和使用no-OS及平台驱动程序
2022-04-12
作者:ADI公司高级软件工程师 Mahesh Phalke
来源:ADI公司
快速发展的技术需要软件支持(固件驱动程序和代码示例)来简化设计导入过程。本文介绍如何利用no-OS(无操作系统)驱动程序和平台驱动程序来构建ADI公司精密模数转换器和数模转换器的应用固件,这些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。
ADI公司提供基于no-OS驱动程序的嵌入式固件示例来支持精密变换器。no-OS驱动程序负责器件配置、转换器数据采集、执行校准等,而基于no-OS驱动程序的固件示例则便于将数据传输到主机进行显示、存储和进一步处理。
no-OS和平台驱动程序简介
顾名思义,no-OS驱动程序设计用于通用(或无特定)操作系统。该名称还意味着这些驱动程序可以用在没有任何OS支持的裸机(BareMetal)系统上。no-OS驱动程序旨在为给定精密转换器的数字接口访问提供高级API。no-OS驱动程序使用器件的这些API接口访问、配置、读取、写入数据,而无需知道寄存器地址(存储器映射)及其内容。
no-OS驱动程序利用平台驱动程序层来支持跨多个硬件/软件平台复用相同的no-OS驱动程序,使固件高度可移植。平台驱动程序层的使用将no-OS驱动程序隔绝开来,后者无需知道平台特定接口(如SPI、I2C、GPIO等)的低级细节,因此no-OS驱动程序不需要修改就能跨多个平台复用。
精密转换器的no-OS驱动程序代码通常包含在两个以C编程语言编写的源文件中:adxxxx.c和adxxxx.h,其中xxxx代表器件名称(例如AD7606、AD7124等)。器件头文件(adxxxx.h)包含器件特定结构、枚举、寄存器地址和位掩码的公共编程接口,将此文件包含到所需的源文件中便可使用这些公开访问接口。器件源文件(adxxxx.c)包含接口的实现,用于初始化和移除器件、读/写器件寄存器、从器件读取数据、获取/设置器件特定参数等。
典型的no-OS驱动程序围绕一组常见功能来构建:
►器件特定寄存器地址、位掩码宏、器件配置枚举、读/写器件特定参数(如过采样、增益、基准电压等)的结构的声明。
►通过no-OS驱动程序的器件初始化/移除函数以及器件特定的初始化和驱动程序结构与描述符初始化物理器件/解除器件初始化。
►使用器件寄存器读/写函数访问器件存储器映射或寄存器详细信息,例如adxxxx_read_register()或adxxxx_write_register()。
no-OS驱动程序代码使用
使用器件特定地址、位掩码、参数配置枚举和结构:
如前所述,adxxxx.h头文件包含所有器件特定枚举和结构的声明,这些枚举和结构被传递到器件特定的函数或API以配置或访问器件参数。具体情况如图3所示。
图3中显示的adxxxx_config结构允许用户选择多路复用器通道并为其设置过采样率。此结构的成员(afe_mux_channel和oversampling)是存在于同一头文件中的枚举,其包含这两个字段的所有可能值的数字常量,用户可以选择。
adxxxx.c文件中定义的adxxxx_set_adc_config()函数通过配置结构获取用户传递的配置/参数,并进一步调用adxxxx_spi_reg_write()函数,通过数字接口(在上例中是SPI)将数据写入ADXXXX_REG_CONFIG器件寄存器。
使用no-OS驱动程序结构和初始化函数初始化器件:
用户可以通过no-OS驱动程序器件特定的adxxx_read/write()函数访问器件寄存器内容(例如产品ID、暂存区值、OSR等)。
大多数情况下,用户不会直接使用寄存器访问函数。器件特定的函数通过这些寄存器访问函数(如adxxxx_spi_reg_read/write())来调用。如果可能,建议使用器件配置和状态API来访问器件存储器映射,而不要使用直接寄存器访问函数,因为这样能确保器件驱动程序结构与器件中的配置保持同步。
平台驱动程序
平台驱动程序是包装平台特定API的硬件抽象层(HAL)之一。它们由no-OS器件驱动程序或用户应用程序代码调用,使后者可以独立于底层硬件和软件平台。平台驱动程序包装了平台特定的低级硬件功能,例如SPI/I2C初始化和读/写、GPIO初始化和读/写、UART初始化和接收/发送、用户特定的延迟、中断等。
作者简介
Mahesh Phalke是ADI公司位于印度班加罗尔的精密转换器技术软件部门的高级软件工程师。2011年毕业于瀑内大学,获电子工程学士学位。