
文章目录
- [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

观察实验结果:
