James Blogs

简介


如果你正在使用NRF5 SDK的ADC功能,相信你一定也会被各种nrf_adc、nrfx_adc、nrfx_saadc、nrf_drv_saadc等一堆adc文件搞晕过。

Untitled

那么究竟为什么会存在这么多种adc、它们相互之间又是什么关系呢?下面就让我们来捋一捋。

理解目录和文件命名逻辑


根据Nordicsemi的介绍,nRF5 SDK的目录结构是这样的:

Untitled

其中和nrf_drv有关的integration目录没有介绍,那我们先看看modules:

Untitled

里面说Nordic有2套不同的芯片外设驱动程序。SDK14和以前版本的SDK使用nrf_drv传统的外设驱动程序。而SDK15/16使用了nrfx新的外设驱动(nrfx驱动在nRF5 SDK和nRF Connect SDK中都有使用)。

看到这里大致理解一些了,原来nrf_drv 开头的文件是老版本SDK的外设驱动,搜了一下文件名发现这些文件都放在没介绍的integration目录里面:

Untitled

打开其中的integration/nrfx/legacy/nrf_drv_saadc.h 文件看了一下,发现include了modules/nrfx/drivers/include/nrfx_saadc.h ,也就是新SDK的nrfx 外设驱动。并且老版本的常量和函数名也被define到了nrfx 对应的名字,就是说nrf_drv 只是保留了旧的函数和常量名称,实际调用的是nrfx 驱动。这也是为了以前使用nrf_drv 驱动程序开发的应用可以迁移到nrfx 上面来而不用大量修改代码。为了保持统一,官方example里面还是优先使用nrf_drv 开头的文件。