【经验】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
本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】使用频谱仪测试无线模块EFR32FG23的发射功率和频偏的方法
本文使用Silicon Labs无线SoC芯片EFR32FG23的BRD4265B无线模块作为测试对象,介绍如何使用Simplicity Studio 5软件配置railtest工程,并使用频谱仪测试EFR32FG23模块的发射功率和频偏的方法。
设计经验 发布时间 : 2022-03-02
【经验】基于Silicon Labs无线SoC芯片MG24开发套件的Matter入门指导文章汇总
本文主要介绍基于Silicon Labs MG24开发套件的Matter入门指导文章汇总。
设计经验 发布时间 : 2023-06-30
【经验】使用Si4463或者Si4438无线收发芯片来解析其他无线设备通信速率的方法
本文使用EFR32FG23无线SoC芯片来模拟老产品,通过按键来触发EFR32FG23芯片发送无线数据包,然后使用Si4438芯片来捉取波形,并介绍使用Si4438无线收发芯片来解析其他无线设备通信速率的方法。
设计经验 发布时间 : 2023-04-19
SiWx917 Wi-Fi 6蓝牙低功耗无线SoC,助力智能手表功耗和安全性能提升
SiWx917是Silicon Labs推出的一款支持Wi-Fi 6、蓝牙LE 5.4 和低功耗特性的无线SoC(系统级芯片),专为物联网(IoT)和可穿戴设备设计。这款芯片不仅拥有强大的计算能力和先进的无线连接功能,还具有低功耗和小尺寸的优势,为智能手表市场带来了全新的技术突破。
应用方案 发布时间 : 2024-10-23
【经验】使用Simplicity Commander工具读写EFR32无线SoC芯片EUI和install code方法
本文以Silicon Labs EFR32FG23 Sub-G无线SoC芯片为例,介绍如何读写EFR32无线SoC芯片的EUI和install code的方法。
设计经验 发布时间 : 2023-04-21
如何用EFR32FG23无线SoC芯片读取平均RSSI?
本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取某个信道的平均RSSI的方法。
设计经验 发布时间 : 2024-03-07
【经验】使用串口来升级EFR32FG23无线SoC芯片固件的方法
本文主要介绍如何使用BootLoader——NCP UART XMODEM工程实现使用串口升级Silicon Labs EFR32FG23无线SoC芯片固件的方法。
设计经验 发布时间 : 2022-09-01
【经验】配置迈斯威志WizPro200EFM烧录器实现脱机烧录无线SoC芯片EFR32MG21固件的方法
Silicon Labs的EFR32MG21无线SoC芯片,主要用于ZigBee和Matter设备。本文主要介绍如何配置迈斯威志WizPro200EFM烧录器,实现脱机烧录EFR32MG21无线SoC芯片固件的方法。
设计经验 发布时间 : 2023-01-21
EFR32FG23无线SoC芯片读取数据包实时RSSI值的方法
本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取数据包的实时RSSI值的方法。
设计经验 发布时间 : 2024-03-07
EFR32无线通信模块AN002——BootLoader(standalone)
Silicon Labs的EFR32系列无线SoC芯片提供了Gecko Bootloader支持设备更新应用程序,Gecko Bootloader分两种模式,一种模式称为standalone bootloader,另一种模式称为application bootloader。本文指导大家配置Standalone Bootloader工程,并对应用程序更新。
设计经验 发布时间 : 2018-06-26
【经验】如何使用RAILTEST程序测试无线SoC芯片EFR32MG的蓝牙性能?
使用过Silicon Labs无线SoC芯片EFR32MG的Zigbee功能的工程师多数已经习惯使用Railtest软件对Zigbee性能做测试,而在Railtest软件下也可以对BLE性能做测试。本文将介绍具体的设置步骤与注意事项。
设计经验 发布时间 : 2020-09-26
【经验】EFR32FG23无线SoC使用I2C读写MSA311传感器寄存器的方法
本文以 Silicon Labs 的 EFR32FG23 无线SoC芯片的 rail_soc_simple_trx 工程为例,介绍如何使用EFR32FG23 芯片 I²C外设来读写敏芯微 MSA311三轴加速度传感器寄存器的方法。
设计经验 发布时间 : 2023-06-29
【经验】使用Simplicity Commander工具对无线SoC芯片EFR32FG23执行recover的方法
在使用芯科科技EFR32FG23时,有时一些错误的操作会导致芯片烧录一次固件之后就不能重新烧录,或无法识别到芯片等问题,需要对芯片执行recover。本文主要介绍使用Simplicity Commander工具对EFR32FG23执行recover的方法。
设计经验 发布时间 : 2022-01-15
【经验】解析创建EFR32FG23芯片Long Preamble Duty Cycle低功耗接收工程的方法
有些无线产品使用电池供电,要求待机功耗很低,但是又需要能够实时接收到其他设备发来的数据,这时候就需要使用到无线芯片的低功耗接收功能。本文使用Simplicity Studio v5软件,主要介绍如何创建EFR32FG23无线SoC芯片Long Preamble Duty Cycle低功耗接收工程的方法。
设计经验 发布时间 : 2022-05-29
【经验】无线SoC芯片EFR32MG21程序中MFG_SECURITY_CONFIG参数的设置与功能
在无线SoC芯片EFR32MG21的ZigBee默认Z3Light程序运行时我们可以通过keys print这个CLI命令打印NWK key与TC Link Key等密钥参数,打印的效果如下,那我们是否可以隐藏这些密钥无法打印呢?
设计经验 发布时间 : 2023-05-26
电子商城
品牌:SILICON LABS
品类:Wireless Gecko SoC
价格:¥8.1764
现货: 104,128
品牌:SILICON LABS
品类:Mighty Gecko Multi-Protocol Wireless SoC
价格:¥27.0929
现货: 90,767
现货市场
品牌:SILICON LABS
品类:Switch Hall Effect Magnetic Position Sensor
价格:¥2.2924
现货:126,000
服务
Ignion可支持多协议、宽频段的物联网天线方案设计,协议:Wi-Fi、Bluetooth、UWB、Lora、Zigbee、2G、3G、4G、5G、CBRS、GNSS、GSM、LTE-M、NB-IoT等,频段范围:400MHz~10600MHz。
最小起订量: 2500 提交需求>
世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。
实验室地址: 深圳 提交需求>
登录 | 立即注册
提交评论