4.3.7. ADC 调试指南
4.3.7.1. 概述
ADC( Analog-to-Digital Converter,模数转换器)主要将接收到的模拟信号转换为数字信号。该控制器适用于传感器数据采集、电源监控、环境监测等场景,为嵌入式系统提供高精度模拟量检测能力。
4.3.7.2. 特点
多通道输入:支持 8 路独立模拟输入通道( CH0-CH7 ),其中 CH3-7 在 EVB 板上靠近 40pin 的位置,参考 ADC 接口章节。
灵活配置:支持 CPU 和 DMA 模式,而且都能分别支持单次采样和连续采样。
用户态接口:通过 sysfs 节点直接读取原始电压值,支持两种获取数据的方式分别为 signle 模式和 scan 模式。
电压量程: 0~1.8V
分辨率: 10bit
注: 当实际电压超出 0.1V~1.7V 的范围时, ADC 的采样精度会大幅下降,所以建议测量的电压范围尽量控制在 0.1~1.7V 使用。
4.3.7.3. 功能描述
典型应用
传感器接口:连接温度、光敏等模拟输出传感器。
电池管理:实时监测电池电压,实现低电量预警。
工业控制:采集模拟信号控制执行机构(如电机调速)。
功能原理
在一定的时间间隔内通过采样和量化模拟信号如电压,将连续的模拟信号离散为一系列的数字值,也就是我们常说的模数转换。
工作方式
ADC 本身的原理不复杂,但在使用的过程中可能涉及到 IIO(Industrial Input/Output) 和 DMA(Dorect Memory Access) , 这里分别介绍一下。
IIO , 工业输入输出接口 , 它是为了统一管理 ADC 和 DAC 设备而设立的, 接入 IIO 的常见设备有加速度计、光传感器、陀螺仪、气压计、磁力计。可以理解为通过 IIO 接口,可以访问这 一系列本质是 ADC 或者 DAC 的传感器设备 ; IIO 子系统框架主要包括 IIO sysfs , IIO core , IIO drivers Cdev。在使用的时候可以理解为使用 IIO 框架将 ADC 设备管理起来了。
DMA , 直接内存访问,即一种允许外设直接与主存进行数据传输,而不需要通过 CPU,它显著提高了数据传输速度。 实现 DMA 的时候,一般是有一个 DMA 控制器, CPU 只需要配置 DMA 控制器的参数,并将控制权交给 DMA 控制器, 然后就可以继续执行其他任务,不需要参与具体的数据传输过程。
单次采样模式:触发后完成一次转换后自动停止。
连续采样模式:持续转换并更新数据寄存器,适用于实时监控。
如果觉得抽象,可以结合本文的 功能使用部分 , 对照进行理解。
4.3.7.4. 驱动代码
uboot
uboot/drivers/adc/guc_adc.c
dts 配置在: uboot/arch/arm/dts/x5.dtsi
adc: adc@34190000 {
compatible = "guc,igav04a"; /*定义 adc 设备的兼容性属性,用于设备匹配*/
status = "okay";
/* 定义 adc 设备的寄存器基地址和长度 */
reg = <0x34190000 0x10000>, /*adc*/
<0x34180100 0x10>; /*password*/
clocks = <&adcclk>; /* 定义 adc 设备使用的时钟源 */
clock-names = "adc-clk"; /* 定义时钟名称,用于与时钟源关联 */
vref-supply = <®_adc_vref_1v8>; /* 定义 adc 设备的参考电源供应 */
#io-channel-cells = <1>; /* 定义 io 通道单元数,表示每个 io 通道需要1个单元来描述 */
guc,adc-channels = <0 1 2 3 4 5 6 7>; /* 定义 adc 支持的通道列表 */
guc,passwd = <12345678>; /* 定义 efuse 偏移量,用于读取 efuse 中的校准数据 */
efuse-offset = <0x74>; /* 定义 efuse 偏移量,用于读取 efuse 中的校准数据 */
#address-cells = <1>; /* 定义子节点的地址单元数,表示子节点需要用1个单元来描述地址 */
#size-cells = <0>; /* 定义子节点的大小单元数,表示子节点不需要用单元来描述大小 */
};
kernel
驱动代码 ADC 的驱动代码主要存在与 kenel 里面
驱动实现: kernel/drivers/iio/adc/guc_adc.c
关键函数:
guc_adc_probe():设备初始化,注册 IIO 设备。
guc_adc_read_raw():处理用户态读取请求,返回原始数据。
IIO 的驱动代码主要在如下位置
industrialio-core.c
industrialio-buffer.c
industrialio-event.c
IIO sysfs/Cdev 对用户空间提供 IIO 设备访问和配置。 IIO Core 提供 IIO 设备、 IIO Trigger、 IIO Buffer 分配、初始化、注册等工作。
IIODriver 不同 IIO 设备的驱动程序。 结合 guc_adc.c 文件 , 可以看到下调用流程 :
iio_interrupt_trigger_poll
->iio_trigger_poll
->iio_pollfunc_store_time
->guc_adc_trigger_handler
也就是 adc 的驱动最终会被 IIO 框架进行管理。
DMA 控制器的代码路已经是
kernel/drivers/dma/dw-axi-dmac
.
├── dw-axi-dmac.h
├── dw-axi-dmac-platform.c
└── Makefile
DTS 配置示例:
arch/arm64/boot/dts/hobot/x5.dtsi
adc: adc@34190000 {
compatible = "guc,igav04a";
status = "disabled";
reg = <0x34190000 0x10000>, /* adc */
<0x34180100 0x10>; /* password */
interrupt-parent = <&gic>; /* 定义中断父设备为 gic(通用中断控制器) */
interrupts = <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>; /* 定义 adc 设备的中断号和触发类型,这里为 GIC_SPI 74号中断,上升沿触发 */
clocks = <&hpsclks X5_LSIO_ADC_CLK>,<&hpsclks X5_LSIO_ADC_PCLK>; /* 定义 adc 设备使用的时钟源,包括 adc 时钟和 adc 外围时钟 */
clock-names = "adc-clk","adc-pclk"; /* 定义时钟名称,用于与时钟源关联 */
assigned-clock-rates = <32000000>; /* 定义 adc 设备的时钟频率,这里设置为32000000Hz */
/* disable efuse binding by default */
nvmem-cells = <&efuse_adc_offset>, <&efuse_adc_trimming>;
nvmem-cell-names = "adc-offset", "adc-trimming";
vref-supply = <®_adc_vref_1v8>; /* 定义 adc 设备的参考电源供应 */
#io-channel-cells = <1>; /* 定义 io 通道单元数,表示每个 io 通道需要1个单元来描述 */
guc,adc-channels = <0 1 2 3 4 5 6 7>;
guc,passwd = <12345678>;
#address-cells = <1>;
#size-cells = <0>;
guc,sample-rate=<50000>; /* 定义 adc 设备的采样率,单位为 Hz */
resets = <&socrst LSIO_ADC_RESET>; /* 定义 adc 设备的复位信号,用于设备复位 */
reset-names = "guc-adc"; /* 定义复位信号的名称 */
};
如果要使用 DMA ,需要在 adc 的 dts 配置中新增字段:
dmas = <&axi_dmac 34>; /* ADC 使用的是 DMA 34 通道 */
dma-names = "rx"; /* 定义 DMA 通道的名称 rx*/
通过修改 guc,sample-rate 字段,设置采样频率 , 单位 HZ, 默认 :50KHz,dma 模式下实际采样频率为
(guc,sample-rate)*6; 所以如果配置采样频率为 1.56MHz, 只需要将 “guc,sample-rate” 字段设置为
0.26MHz 即可。如下列举了 dma 模式下在配置设备树的时候 , 设置的采样频率为 0.26M,0.21M,0.13M,0.10M,
对应的实际采样率。
guc,sample-rate=<260000>; # 对应 1.56MHz
guc, sample-rate=<210000>; # 对应 1.25MHz
guc,sample-rate=<130000>; # 对应 0.78MHz
guc,sample-rate=<100000>; # 对应 0.63MHz
例如:
adc: adc@34190000 {
compatible = "guc,igav04a";
status = "disabled";
reg = <0x34190000 0x10000>, /* adc */
<0x34180100 0x10>; /* password */
interrupt-parent = <&gic>;
interrupts = <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>;
clocks = <&hpsclks X5_LSIO_ADC_CLK>,<&hpsclks X5_LSICO_ADC_PCLK>;
clock-names = "adc-clk","adc-pclk";
assigned-clock-rates = <32000000>;
/* disable efuse binding by default */
nvmem-cells = <&efuse_adc_offset>, <&efuse_adc_trimming>;
nvmem-cell-names = "adc-offset", "adc-trimming"",
vref-supply = <®_adc_vref_1v8>;
#io-channel-cells = <1>;
guc,adc-channels = <0 1 2 3 4 5 6 7>;
guc,passwd = <12345678>;
#address-cells = <1>;
#size-cells = <0>;
guc,sample-rate=<160000>;
resets = <&socrst LSIO_ADC_RESET>;
reset-names =
"guc-adc";
dmas = <&axi_dmac 34>;
dma-names = "rx"
};
内核配置:
arch/arm64/configs/hobot_x5_soc_defconfig
CONFIG_DW_AXI_DMAC=y /* 如果需要用到 DMA 则需要确认是否有开启,默认是开启的 */
CONFIG_IIO=y
CONFIG_GUC_ADC=y
4.3.7.5. 功能使用
uboot
ADC 在 uboot 阶段主要是支撑 board id,可以参考 硬件 Board ID 概述 的介绍
用户态使用
IIO 的用户态文件基本在如下位置 :
/sys/bus/iio/devices/iio:deviceX/
/dev/iio:deviceX
非连续采样
非连续采样使用 cpu 读取数据,可以称为 ingle 模式,由于存在低采样率采样数据失真的问题 , 所以为保证 ADC 数据采样的正确性 , 建议采样频率设置到 600KHz 以上。非连续采样的采样频率范围在 0 ~ 2MHz。
单通道
#in_voltageN_raw 表示通道 N , 比如这里举例通道 0
cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw
多通道
#in_voltageN_raw 表示通道 N
cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage1_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage2_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage3_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage4_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage5_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage6_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage7_raw
连续采样 -scan 模式
连续采样支持两种模式,一种是 DMA 模式,一种是 CPU 模式,这两种模式都支持单通道和多通道读取,分别都可以使用 hexdump 、 iio_readdev 读取。
DMA 模式
在保证 dts 配置好的前提下才能使用
单通道
方式一:使用 hexdump 读取
#in_voltageN_en 表示通道 N
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage0_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/enable
hexdump -d -v /dev/iio\:device0
root@buildroot:/userdata# hexdump -d -v /dev/iio\:device0
0000000 00025 00021 00025 00029 00037 00061 00045 00037
0000010 00039 00035 00043 00041 00040 00048 00049 00040
0000020 00046 00053 00044 00049 00045 00053 00041 00045
0000030 00032 00025 00045 00056 00056 00046 00036 00056
0000040 00033 00041 00053 00048 00055 00037 00032 00041
0000050 00046 00049 00049 00060 00044 00036 00045 00048
0000060 00043 00030 00050 00025 00048 00028 00035 00046
0000070 00040 00036 00035 00035 00032 00032 00026 00023
0000080 00044 00032 00033 00041 00028 00040 00040 00056
0000090 00041 00044 00029 00037 00027 00041 00043 00037
00000a0 00033 00032 00017 00028 00037 00044 00016 00026
00000b0 00048 00045 00026 00024 00037 00030 00030 00044
00000c0 00024 00035 00043 00039 00044 00040 00040 00043
00000d0 00040 00037 00037 00040 00042 00024 00033 00039
······
关闭连续采样 :
echo 0 > /sys/bus/iio/devices/iio\:device0/buffer0/enable
echo 0 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage0_en
其它通道 : 只需修改 in_voltage0_en 字段即可。
方式二:使用 iio_readdev 读取 ( iio_readdev 获取方式 : http://ftp.cn.debian.org/debian/pool/main/libi/libiio/ , 选择其中的 libiio-utils_0.26-2_arm64.deb , 解压之后找到 iio_readdev 放到系统中即可使用)
voltageN 表示通道 N
iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 | hexdump -d -v
root@buildroot:/userdata# ./iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 | hexdump -d -v
WARNING: High-speed mode not enabled
0000000 00032 00027 00035 00037 00019 00030 00035 00032
0000010 00028 00026 00028 00024 00008 00030 00024 00028
0000020 00035 00024 00024 00019 00020 00029 00029 00024
0000030 00024 00033 00039 00030 00023 00027 00025 00041
0000040 00030 00024 00032 00036 00030 00023 00025 00036
0000050 00036 00045 00029 00030 00032 00029 00023 00032
0000060 00032 00035 00041 00028 00029 00025 00024 00021
0000070 00029 00021 00026 00035 00036 00021 00035 00030
0000080 00049 00029 00030 00035 00028 00037 00035 00029
0000090 00035 00020 00027 00033 00026 00016 00021 00016
00000a0 00038 00012 00013 00021 00028 00014 00036 00024
00000b0 00014 00016 00049 00022 00029 00028 00007 00025
00000c0 00030 00029 00047 00037 00032 00032 00031 00032
······
其他通道 : 只需修改 voltage0 字段即可。
多通道
DMA 不支持同时读取多通道读取 , 目前 DMA 的多通道读取数据使用周期切换的方式进行数据读取。周期时间可以使 用如下方式进行配置 , 单位为 ms ( 默认为 100ms)。
方式一:使用 hexdump 读取
echo 50 > /sys/bus/iio/devices/iio\:device0/cycle_period
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage0_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage2_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage5_en
echo 1 > /sys/bus/iio/devices/iio\:device0/bbuffer0/enable
hexdump -d /dev/iio\:device0
方式二:使用 iio_readdev 读取
echo 50 > /sys/bus/iio/devices/iio\:device0/cycle_period
iio_readdev -u local: -b 256 -s 0 -T 0 3419000.adc voltage0 voItage2 voltage5 | hexdump
注意 cycle_periiod 文件只有在使用 DMA 读取的时候下才会创建 , 使用 cpu 读取的时候下不支持。
CPU 模式
连续采样使用 CPU 模式采样 , 存在低采样率采样数据失真 , 高采样率 (>500KHz) 下长时间连续采样会出现 overflow 问题 , 为了达到比较好的采样效果,建议使用时将 CPU speed 固定到 1.5G, 设置采样频率为 500KHz。
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1500000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed
同样,在配置好 dts 之后,我们可以单通道或者多通道可以读取 ADC 数值,分别都可以使用 hexdump 、 iio_readdev 读取。
单通道
方式一:使用 hexdump 读取
例如测试 channel 0 , 执行如下操作 :
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage0_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/enable
hexdump -d /dev/iio\:device0
显示信息如下 :
root@buildroot:/userdata# hexdump -d /dev/iio\:device0
0000000 00028 00037 00045 00032 00039 00039 00035 00048
0000010 00041 00032 00040 00037 00037 00026 00043 00031
0000020 00044 00035 00039 00030 00026 00027 00025 00041
0000030 00035 00041 00040 00032 00019 00020 00045 00028
0000040 00033 00035 00032 00026 00029 00044 00035 00043
0000050 00036 00039 00033 00035 00040 00032 00049 00040
0000060 00032 00043 00040 00049 00039 00053 00043 00045
0000070 00049 00037 00039 00039 00036 00037 00037 00028
0000080 00041 00032 00024 00035 00035 00033 00032 00045
0000090 00040 00049 00036 00046 00053 00046 00043 00032
00000a0 00045 00032 00031 00045 00027 00039 00045 00040
······
方式二:使用 iio_readdev 读取
直接使用 iioreaddev 命令进行读取 , 例如测试 channel 0 测试方式如下 :
iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 | hexdump -d
测试 channel 1:
iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage1 | hexdump -d
34190000.adc 表示检测设备 , 来源为 :
root@buildroot:/userdata# ./iio_attr -a -s -c
Using auto-detected IIO context at URI "local:"
IIO context has 2 devices:
iio:device0, 34190000.adc: found 8 scan channels
trigger0, 34190000.adc-dev0: found 0 scan channels
root@buildroot:/userdata#
voltage0: 表示通道 0
显示信息如下 :
root@buildroot:/userdata# ./iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 | hexdump -d
WARNING: High-speed mode not enabled
0000000 00029 00019 00030 00028 00028 00044 00036 00045
0000010 00043 00045 00044 00024 00035 00029 00035 00037
0000020 00016 00021 00044 00032 00032 00030 00030 00029
0000030 00043 00024 00049 00036 00024 00039 00038 00039
0000040 00037 00036 00030 00048 00049 00045 00046 00039
0000050 00029 00024 00032 00035 00035 00029 00040 00048
0000060 00024 00027 00028 00032 00025 00039 00035 00035
0000070 00043 00035 00040 00048 00036 00044 00048 00048
0000080 00035 00046 00043 00043 00035 00045 00039 00032
0000090 00036 00028 00043 00044 00048 00046 00052 00052
00000a0 00040 00035 00036 00035 00042 00048 00037 00046
00000b0 00040 00032 00025 00051 00035 00032 00036 00048
00000c0 00039 00053 00035 00039 00040 00023 00049 00037
······
多通道
方式一:使用 hexdump 读取
例如测试 channel 012 执行如下操作 :
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage0_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage1_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/in_voltage2_en
echo 1 > /sys/bus/iio/devices/iio\:device0/buffer0/enable
hexdump -d /dev/iio\:device0
显示信息如下 :
root@buildroot:/userdata# hexdump -d /dev/iio\:device0
0000000 00032 00038 00003 00037 00032 00003 00046 00029
0000010 00003 00030 00041 00003 00039 00053 00003 00032
0000020 00043 00003 00030 00035 00003 00023 00025 00003
0000030 00040 00032 00003 00024 00048 00003 00045 00039
0000040 00003 00039 00045 00003 00039 00047 00003 00052
0000050 00030 00003 00046 00040 00003 00041 00037 00003
0000060 00049 00046 00003 00049 00043 00003 00040 00046
0000070 00003 00037 00044 00003 00040 00041 00003 00048
0000080 00059 00003 00056 00056 00003 00055 00046 00003
0000090 00058 00046 00003 00054 00041 00003 00045 00050
00000a0 00003 00045 00045 00003 00053 00041 00003 00026
00000b0 00050 00003 00053 00039 00003 00045 00050 00003
00000c0 00047 00049 00003 00045 00043 00003 00045 00044
00000d0 00003 00037 00031 00003 00040 00037 00003 00035
00000e0 00038 00003 00045 00032 00003 00040 00023 00003
00000f0 00044 00037 00003 00028 00030 00003 00035 00037
······
方式二:使用 iio_readdev 读取
直接使用 iioreaddev 命令进行读取 , 例如测试 channel0,1,2 测试方式如下 :
iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 voltage1 voltage2 | hexdump -d
显示信息如下:
root@buildroot:/userdata# ./iio_readdev -u local: -b 256 -s 0 -T 0 34190000.adc voltage0 voltage1 voltage2 | hexdump -d
WARNING: High-speed mode not enabled
0000000 00048 00040 00003 00039 00044 00003 00044 00046
0000010 00003 00048 00042 00003 00061 00053 00003 00036
0000020 00046 00003 00049 00041 00003 00047 00037 00003
0000030 00044 00045 00003 00050 00056 00003 00061 00061
0000040 00005 00069 00052 00007 00057 00061 00008 00048
0000050 00052 00012 00056 00045 00003 00053 00058 00012
0000060 00045 00043 00003 00049 00045 00003 00043 00041
0000070 00003 00044 00039 00003 00045 00046 00003 00053
0000080 00043 00003 00043 00052 00003 00053 00054 00003
0000090 00058 00055 00003 00060 00049 00003 00057 00048
00000a0 00003 00040 00040 00003 00039 00045 00003 00040
00000b0 00048 00008 00040 00044 00003 00037 00033 00003
00000c0 00048 00043 00003 00050 00056 00003 00039 00039
00000d0 00003 00049 00025 00003 00045 00061 00005 00047
电压计算公式:
电压 = 采样值 * ( 1800 / (2 ^ 10) ) mv
例如采样值为 524
电压 = 524 * (1800 / 1024) = 524 * 1.7578125 = 921.09375 mv
4.3.7.6. 常见问题
Q1 :采样值波动较大 排查步骤:
检查硬件电源稳定性,确保模拟信号无噪声干扰。
多次采样取平均值。
Q2 :无法检测到 IIO 设备 排查步骤:
确认内核配置 CONFIG_GUC_ADC=y。
检查 DTS 中 ADC 节点状态是否为 “okay”。
使用 dmesg | grep adc 查看驱动加载日志。
Q3 : 使用 single 模式和 scan 模式时 cpu loading 分别是怎样的? 这边测量的数据如下:
single 模式 单通道非连续采样几乎不消耗 cpu,所以该模式下 cpu loading 几乎为 0.
scan 模式
DMA 方式 CPU 固定到 1.5G 下 CPU 利用率 (单核)
| 采样率 | 实际采样数据个数 (/s) | CPU loading(%) |
|---|---|---|
| 1.25MHz | 200k | 8% |
| 0.83MHz | 138k | 5% |
| 0.78MHz | 130k | 5% |
| 1.79MHz | 290k | 9% |
| 0.6MHz | 100k | 4% |
CPU 默认 1.2G 频率
| 采样率 | 实际采样数据个数 (/s) | CPU loading(%) |
|---|---|---|
| 1.25MHz | 200k | 19% |
| 0.83MHz | 138K | 12% |
| 0.78MHz | 130K | 12% |
| 1.79MHz | 290k | 23% |
| 0.6MHz | 100k | 10% |
CPU 方式 CPU 固定到 1.5G,DDR 固定到 3200 下 cpu 利用率 ( 单核 )。
| 采样率 | 实际采样数据个数 (/s) | CPU loading(%) |
|---|---|---|
| 500KHz | 500k | 6% |
CPU 默认状态 :1.2G 大于等于 300KHz 长时间采样会出现 overflow, 不建议使用
Q4 :以 cycle_period 为变量,在固定 CPU 1.5G 的情况下, cpu loading 如何?
600KHz 采样率下, DMA 方式, 多通道( 3 个通道)不同切换时间周期的 cpu load
| 10ms | 50ms | 100ms | |
|---|---|---|---|
| 单通道 | 2-5% | 2-5% | 2-5% |
| 多通道 (3) | 4-6% | 2-5% | 3-5% |
900KHz 采样率下, DMA 方式, 多通道( 3 个通道)不同切换时间周期的 cpu load
| 10ms | 50ms | 100ms | |
|---|---|---|---|
| 单通道 | 4-6% | 4-6% | 4-6% |
| 多通道 | 5-8% | 4-7% | 4-7% |
1MHz 采样率下, DMA 方式, 多通道( 3 个通道)不同切换时间周期的 cpu load
| 10ms | 50ms | 100ms | |
|---|---|---|---|
| 单通道 | 6-7% | 6-7% | 6-7% |
| 多通道 | 5-8% | 5-8% | 5-8% |
1.2MHz 采样率下, DMA 方式, 多通道( 3 个通道)不同切换时间周期的 cpu load
| 10ms | 50ms | 100ms | |
|---|---|---|---|
| 单通道 | 6-8% | 6-8% | 6-8% |
| 多通道 | 7-9% | 6-8% | 6-8% |
1.5MHz 采样率下, DMA 方式, 多通道( 3 个通道)不同切换时间周期的 cpu load
| 10ms | 50ms | 100ms | |
|---|---|---|---|
| 单通道 | 8-10% | 8-10% | 8-10% |
| 多通道 | 12-14% | 9-11% | 7-9% |