【经验】EFR32FG23无线SoC芯片使用IADC的single interrupt方式读取芯片引脚AD值的方法
本文以SILICON LABS EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片使用IADC的single interrupt方式读取芯片引脚AD值的方法。
1、在rail_soc_simple_trx工程中双击打开rail_soc_simple_trx.slcp文件,点击SOFTWARE COMPONENTS,在搜索栏输入iadc,点击搜索到的IADC组件,点击Install。
2、在工程中添加如下头文件:
#include "em_cmu.h"
#include "em_iadc.h"
#include "app_log.h"
3、在工程中添加IADC CLK和IADC输入引脚的定义代码,本文使用10MHz的ADC CLK,使用PA5来采集AD数据。
// Set CLK_ADC to 10 MHz
#define CLK_SRC_ADC_FREQ 20000000 // CLK_SRC_ADC
#define CLK_ADC_FREQ 10000000 // CLK_ADC - 10 MHz max in normal mode
#define IADC_INPUT_0_PORT_PIN iadcPosInputPortAPin5;
#define IADC_INPUT_0_BUS ABUSALLOC
#define IADC_INPUT_0_BUSALLOC GPIO_ABUSALLOC_AODD0_ADC0
4、在工程中添加两个变量,用来存放IADC采样数据和最终的电压数据。
// Raw IADC conversion result
static volatile IADC_Result_t sample;
// Result converted to volts
static volatile double singleResult;
5、在工程中添加IADC的初始化代码。
void initIADC(void)
{
// Declare initialization structures
IADC_Init_t init = IADC_INIT_DEFAULT;
IADC_AllConfigs_t initAllConfigs = IADC_ALLCONFIGS_DEFAULT;
IADC_InitSingle_t initSingle = IADC_INITSINGLE_DEFAULT;
// Single input structure
IADC_SingleInput_t singleInput = IADC_SINGLEINPUT_DEFAULT;
/*
* Enable IADC0 and GPIO register clock.
*
* Note: On EFR32xG21 devices, CMU_ClockEnable() calls have no effect
* as clocks are enabled/disabled on-demand in response to peripheral
* requests. Deleting such lines is safe on xG21 devices and will
* reduce provide a small reduction in code size.
*/
CMU_ClockEnable(cmuClock_IADC0, true);
CMU_ClockEnable(cmuClock_GPIO, true);
// Use the FSRC0 as the IADC clock so it can run in EM2
CMU_ClockSelectSet(cmuClock_IADCCLK, cmuSelect_FSRCO);
// Set the prescaler needed for the intended IADC clock frequency
init.srcClkPrescale = IADC_calcSrcClkPrescale(IADC0, CLK_SRC_ADC_FREQ, 0);
// Shutdown between conversions to reduce current
init.warmup = iadcWarmupNormal;
/*
* Configuration 0 is used by both scan and single conversions by
* default. Use unbuffered AVDD as reference and specify the
* AVDD supply voltage in mV.
*
* Resolution is not configurable directly but is based on the
* selected oversampling ratio (osrHighSpeed), which defaults to
* 2x and generates 12-bit results.
*/
initAllConfigs.configs[0].reference = iadcCfgReferenceVddx;
initAllConfigs.configs[0].vRef = 3300;
initAllConfigs.configs[0].osrHighSpeed = iadcCfgOsrHighSpeed2x;
/*
* CLK_SRC_ADC must be prescaled by some value greater than 1 to
* derive the intended CLK_ADC frequency.
*
* Based on the default 2x oversampling rate (OSRHS)...
*
* conversion time = ((4 * OSRHS) + 2) / fCLK_ADC
*
* ...which results in a maximum sampling rate of 833 ksps with the
* 2-clock input multiplexer switching time is included.
*/
initAllConfigs.configs[0].adcClkPrescale = IADC_calcAdcClkPrescale(IADC0,
CLK_ADC_FREQ,
0,
iadcCfgModeNormal,
init.srcClkPrescale);
/*
* Specify the input channel. When negInput = iadcNegInputGnd, the
* conversion is single-ended.
*/
singleInput.posInput = IADC_INPUT_0_PORT_PIN;
singleInput.negInput = iadcNegInputGnd;
// Allocate the analog bus for ADC0 inputs
GPIO->IADC_INPUT_0_BUS |= IADC_INPUT_0_BUSALLOC;
// Initialize IADC
IADC_init(IADC0, &init, &initAllConfigs);
// Initialize a single-channel conversion
IADC_initSingle(IADC0, &initSingle, &singleInput);
// Clear any previous interrupt flags
IADC_clearInt(IADC0, _IADC_IF_MASK);
// Enable single-channel done interrupts
IADC_enableInt(IADC0, IADC_IEN_SINGLEDONE);
// Enable IADC interrupts
NVIC_ClearPendingIRQ(IADC_IRQn);
NVIC_EnableIRQ(IADC_IRQn);
}
6、在工程中添加IADC的中断处理函数,在处理函数中打印最终的电压数据。
void IADC_IRQHandler(void)
{
// Read a result from the FIFO
sample = IADC_pullSingleFifoResult(IADC0);
/*
* Calculate the voltage converted as follows:
*
* For single-ended conversions, the result can range from 0 to
* +Vref, i.e., for Vref = AVDD = 3.30 V, 0xFFF represents the
* full scale value of 3.30 V.
*/
singleResult = sample.data * 3.3 / 0xFFF;
app_log_info("IADC Result: %.2f\n", singleResult);
/*
* Clear the single conversion complete interrupt. Reading FIFO
* results does not do this automatically.
*/
IADC_clearInt(IADC0, IADC_IF_SINGLEDONE);
}
7、在main()函数中添加initIADC();来初始化IADC。
8、在工程中合适的位置调用IADC_command(IADC0,iadcCmdStartSingle);来读取AD值。
9、本文在测试时使用稳压电源给EFR32FG23芯片的PA5引脚供2.5 V的电压。
10、EFR32FG23芯片通过IADC读取到电压为2.48~2.49V之间,使用IADC成功读取到芯片引脚的AD值。
- |
- +1 赞 0
- 收藏
- 评论 1
本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】Simplicity Studio v5软件创建ZigBee Z3Gateway Host工程的方法
本文主要介绍如何使用Simplicity Studio v5软件创建ZigBee Z3Gateway Host工程的方法,以Silicon Labs的无线SoC芯片EFR32MG21为例。
【经验】使用频谱仪测试无线模块EFR32FG23的发射功率和频偏的方法
本文使用Silicon Labs无线SoC芯片EFR32FG23的BRD4265B无线模块作为测试对象,介绍如何使用Simplicity Studio 5软件配置railtest工程,并使用频谱仪测试EFR32FG23模块的发射功率和频偏的方法。
【经验】Simplicity Studio v5软件导出和导入工程文件的方法介绍
在调试Silicon Labs的无线SoC芯片程序的时候,有时需要在Simplicity Studio v5软件导出工程文件或导入工程文件。本文以EFR32FG14无线SoC芯片的simple_trx工程为例,介绍如何导出和导入工程文件的方法。
SiWx917 Wi-Fi 6蓝牙低功耗无线SoC,助力智能手表功耗和安全性能提升
SiWx917是Silicon Labs推出的一款支持Wi-Fi 6、蓝牙LE 5.4 和低功耗特性的无线SoC(系统级芯片),专为物联网(IoT)和可穿戴设备设计。这款芯片不仅拥有强大的计算能力和先进的无线连接功能,还具有低功耗和小尺寸的优势,为智能手表市场带来了全新的技术突破。
【经验】基于Silicon Labs无线SoC芯片MG24开发套件的Matter入门指导文章汇总
本文主要介绍基于Silicon Labs MG24开发套件的Matter入门指导文章汇总。
Wi-SUN入门指导9:WSBRD使用OTA DFU升级Wi-SUN SoC Meter固件
本文主要介绍WSBRD使用OTA DFU升级Wi-SUN SoC Meter固件的方法。
【经验】使用Si4463或者Si4438无线收发芯片来解析其他无线设备通信速率的方法
本文使用EFR32FG23无线SoC芯片来模拟老产品,通过按键来触发EFR32FG23芯片发送无线数据包,然后使用Si4438芯片来捉取波形,并介绍使用Si4438无线收发芯片来解析其他无线设备通信速率的方法。
【经验】使用Simplicity Commander工具读写EFR32无线SoC芯片EUI和install code方法
本文以Silicon Labs EFR32FG23 Sub-G无线SoC芯片为例,介绍如何读写EFR32无线SoC芯片的EUI和install code的方法。
如何用EFR32FG23无线SoC芯片读取平均RSSI?
本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取某个信道的平均RSSI的方法。
【经验】使用串口来升级EFR32FG23无线SoC芯片固件的方法
本文主要介绍如何使用BootLoader——NCP UART XMODEM工程实现使用串口升级Silicon Labs EFR32FG23无线SoC芯片固件的方法。
【经验】配置迈斯威志WizPro200EFM烧录器实现脱机烧录无线SoC芯片EFR32MG21固件的方法
Silicon Labs的EFR32MG21无线SoC芯片,主要用于ZigBee和Matter设备。本文主要介绍如何配置迈斯威志WizPro200EFM烧录器,实现脱机烧录EFR32MG21无线SoC芯片固件的方法。
EFR32FG23无线SoC芯片读取数据包实时RSSI值的方法
本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取数据包的实时RSSI值的方法。
EFR32无线通信模块AN002——BootLoader(standalone)
Silicon Labs的EFR32系列无线SoC芯片提供了Gecko Bootloader支持设备更新应用程序,Gecko Bootloader分两种模式,一种模式称为standalone bootloader,另一种模式称为application bootloader。本文指导大家配置Standalone Bootloader工程,并对应用程序更新。
【经验】如何使用RAILTEST程序测试无线SoC芯片EFR32MG的蓝牙性能?
使用过Silicon Labs无线SoC芯片EFR32MG的Zigbee功能的工程师多数已经习惯使用Railtest软件对Zigbee性能做测试,而在Railtest软件下也可以对BLE性能做测试。本文将介绍具体的设置步骤与注意事项。
【经验】EFR32FG23无线SoC使用I2C读写MSA311传感器寄存器的方法
本文以 Silicon Labs 的 EFR32FG23 无线SoC芯片的 rail_soc_simple_trx 工程为例,介绍如何使用EFR32FG23 芯片 I²C外设来读写敏芯微 MSA311三轴加速度传感器寄存器的方法。
电子商城
品牌:SILICON LABS
品类:Wireless Gecko SoC
价格:¥8.1764
现货: 103,878
品牌:SILICON LABS
品类:Mighty Gecko Multi-Protocol Wireless SoC
价格:¥27.0929
现货: 90,767
现货市场
品牌:SILICON LABS
品类:Switch Hall Effect Magnetic Position Sensor
价格:¥2.2924
现货:126,000
服务
拥有IC烧录机20余款,100余台设备,可以烧录各种封装的IC;可烧录MCU、FLASH、EMMC、NAND FLASH、EPROM等各类型芯片,支持WIFI/BT模组PCBA烧录、测试。
最小起订量: 1 提交需求>
配备KEYSIGHT网络分析仪,可测量无线充电系统发射机/接收机线圈的阻抗,电感L、电阻R、电感C以及品质因数Q,仿真不同充电负载阻抗下的无线充电传输效率。支持到场/视频直播测试,资深专家全程指导。
实验室地址: 深圳 提交需求>
登录 | 立即注册
提交评论