【瑞萨RA x Zephyr评测】二、ADC模块测试


文章目录

  • [1. 简介📢](#1. 简介📢)
  • [2. 基础知识📒](#2. 基础知识📒)
  • [3. ADC实验准备](#3. ADC实验准备)
  • 参考

1. 简介📢

在上一篇中,我们搭建了环境,点亮了开发板,这一篇我们开始熟悉Zephyr的设备驱动,以FPB-RA6E2上的ADC为例展开,欢迎大家收藏、转发,多多交流哈🤗😃🎉🪅📢

🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈

🚀 ------评测系列跳转------🚀
瑞萨FPB-RA6E2开发板快速入门
【瑞萨RA x Zephyr评测】一、点亮FPB-RA6E2开发板


2. 基础知识📒

复制代码
ADC通道是板载硬件,所以在DeviceTree中直接"挂在"板子下面。

关于设备树中的设备引脚配置,我们先温习一下,后面ADC实验中可能会用到。

以Renesas RA 系列微控制器引脚选择(PSEL)配置的宏定义为例:

c 复制代码
...
#define RA_PSEL_ADC          0x0
...
#define RA_PSEL_POS  8
#define RA_PSEL_MASK 0x1f

#define RA_MODE_POS  13
#define RA_MODE_MASK 0x1

#define RA_PSEL(psel, port_num, pin_num)                                                           \
	(1 << RA_MODE_POS | psel << RA_PSEL_POS | port_num << RA_PORT_NUM_POS |                    \
	 pin_num << RA_PIN_NUM_POS)

其中,

#define RA_MODE_POS 31 // 模式位位置(最高位)

#define RA_PSEL_POS 24 // 外设选择位位置

#define RA_PORT_NUM_POS 16 // 端口号位位置

#define RA_PIN_NUM_POS 8 // 引脚号位位置

  • psel:外设选择码(如 ADC、SPI、SCI 等)
  • port_num:端口号(0-9 等)
  • pin_num:引脚号(0-15 等)

生成的32位数值结构:

text 复制代码
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| MODE |       PSEL       |     PORT_NUM     |      PIN_NUM      |        可能保留位            |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

那如果要配置ADC通道:

c 复制代码
// adc0_default: 端口0,引脚0
RA_PSEL(RA_PSEL_ADC, 0, 0)

// 假设:
// RA_PSEL_ADC = 0x0A(ADC外设代码)
// 端口0,引脚0

// 计算结果:
1 << 31 = 0x80000000  // 模式位设为1
0x0A << 24 = 0x0A000000  // ADC外设选择
0 << 16 = 0x00000000      // 端口0
0 << 8 = 0x00000000       // 引脚0

// 最终值:0x8A000000

最终,在设备树中:

text 复制代码
// 配置ADC0使用端口0,引脚0
adc0_default: adc0_default {
    group1 {
        psels = <RA_PSEL(RA_PSEL_ADC, 0, 0)>;  // 生成0x8A000000
        renesas,analog-enable;  // 启用模拟功能
    };
};

那如果是想在程序中查看配置值,则可以:

c 复制代码
// 如果想在代码中查看这些值
#define ADC_PSEL_VALUE RA_PSEL(RA_PSEL_ADC, 0, 0)
printk("ADC PSEL值: 0x%08X\n", ADC_PSEL_VALUE);

3. ADC实验准备

我们先看一下Zephyr中对FPB-RA6E2开发板的设备树文件:

可以看到,默认是支持ADC的,再确认一下瑞萨原厂的R6设备树文件:

文件路径:zephyr\dts\arm\renesas\ra\ra6\ra6-cm33-common.dtsi

OK,那我们再来找一个APP程序就可以了。

在sample的driver中有ADC的应用例程:

但是,我们发现,这个例程中,没有对FPB-RA6E2开发板做支持,那我们就需要添加一个.overlay文件:

文件路径:zephyr\samples\drivers\adc\adc_dt\boards\fpb_ra6e2.overlay

c 复制代码
/*
 * Copyright (c) 2024 Renesas Electronics Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/ {
	zephyr,user {
		io-channels = <&adc0 0>, <&adc0 2>;
	};
};

&adc0 {
	status = "okay";
	#address-cells = <1>;
	#size-cells = <0>;

	channel@0 {
		reg = <0>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,resolution = <12>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,vref-mv = <3300>;
	};

	channel@2 {
		reg = <2>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,resolution = <12>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,vref-mv = <3300>;
	};
};

在这个文件中,我们将io-channels与adc0绑定,并且对adc0做了配置。

powershell 复制代码
 west build -p always -b fpb_ra6e2 ./samples/drivers/adc/adc_dt

powershell 复制代码
west flash

观察实验结果:


参考

【1】Introduction to devicetree

【2】初识Zephyr?看这个就够了!

【3】详解Zephyr设备数与设备驱动模型

【4】详解Zephyr设备树(DeviceTree)与驱动模型

相关推荐
智驾2 天前
瑞萨FPB-RA6E2开发板快速入门
瑞萨·renesas·ra6e2
Sean_woo19982 天前
Zephyr rtos ESP32系列BSP提交流程指南
stm32·单片机·esp32·wsl·zephyr·立创开发板
TedLeeX5 天前
【Nordic随笔】从零开始学习使用nRF Connect SDK(一、安装ncs3.2.0步骤)
学习·nordic·zephyr·ncs·nrf54
mftang5 天前
Zephyr RTOS 工作队列函数(k_work_reschedule )的应用方法介绍
zephyr·k_work·delayed work
FPGA小迷弟5 天前
基于FPGA开发高速ADC/DAC芯片笔记
图像处理·fpga开发·数据采集·fpga·adc
硬汉嵌入式10 天前
瑞萨推出M33内核WiFi6双频(2.4G+5G) + BLE蓝牙芯片RA6W2/W1,同时还将推出现成模组
蓝牙·瑞萨·wifi6·ra6w1·ra6w2
Strugglingler13 天前
Zephyr 的 Counter alarm
alarm·counter·zephyr
Aiah.19 天前
STM8-S001J3M3ADC采样时间分析
adc·stm32f103c8t6·stm8·stm8s001j3m3·采样周期
Amonter22 天前
Zephyr OS驱动0.96OLED
oled·ssd1306·zephyr