Qcom LK阶段如何使用ADC介绍
发布日期:2021-06-30 21:59:16
浏览次数:3
分类:技术文章
本文共 2537 字,大约阅读时间需要 8 分钟。
摘要
本文叙述了在高通平台LK阶段读取mpp2引脚电平的实现过程,附上实现代码。主要实现过程包括配置引脚功能,读取引脚电压。需要特别注意配置mpp2通道和AIN route的选择。
需要修改的文件:
bootable\bootloader\lk\app\aboot\aboot.c
Pm8x41_adc.c (dev\pmic\pm8x41)
Pm8x41_adc.h (dev\pmic\pm8x41\include)
PM8916 MPP2引脚说明
可以看出 MPP2引脚具有ADC输入的功能。
修改过程及例子
在使用mpp2 引脚之前需要配置这个引脚为ADC 功能,在LK 阶段提供了一个操作函数,在Pm8x41_adc.c (dev\pmic\pm8x41) 中实现。
/*
* API: pm8x41_enable_mpp_as_adc
* Configurate the MPP pin as the ADC feature.
*/
void pm8x41_enable_mpp_as_adc(uint16_t mpp_num)
注意:mpp2 的mpp_num 值为0x01 !
使用pm8x41_adc_channel_read(mpp2_chan);读取该引脚ADC采样得到的电压值
另外 mpp2_chan 的值是33(0x21) ! 这个通道号是根据这个寄存器 VADC1_LC_USR_ADC_CH_SEL_CTL 来的:
在配置引脚的地方有一个
选择ADC 输入路线选择的地方,根据寄存器信息可知道这里可以选择AMUX5-8!
下面是需要修改的代码:
\bootable\bootloader\lk\app\aboot\aboot.c
- void adc_test_selc_lcm()
- {
- uint32_t vadc_chan3;
- uint16_t mpp2_chan = 33;
- /*
- * TEST: Read the voltage on batt_id & vbat_sns channels
- */
- pm8x41_enable_mpp_as_adc_for_mpp2(1);
- vadc_chan3 = pm8x41_adc_channel_read(mpp2_chan);
- dprintf(INFO, "The channel [%d] voltage is :%d\n",mpp2_chan, vadc_chan3);
- }
- void aboot_init(const struct app_descriptor *app)
- {
- ……
- adc_test_selc_lcm();
- ……
- }
Pm8x41_adc.c (dev\pmic\pm8x41)
- /*
- * This is the predefined adc configuration values for the supported
- * channels
- */
- static struct adc_conf adc_data[] = {
- CHAN_INIT(VADC_USR1_BASE, VADC_BAT_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_RATIO),
- CHAN_INIT(VADC_USR1_BASE, VADC_BAT_VOL_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_ABS),
- CHAN_INIT(VADC_USR1_BASE, MPP_8_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_ABS),
- CHAN_INIT(VADC_USR1_BASE, MPP_2_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_ABS),
- };
- void pm8x41_enable_mpp_as_adc_for_mpp2(uint16_t mpp_num)
- {
- uint32_t val;
- if(mpp_num >MPP_MAX_NUM)
- {dprintf(CRITICAL,"Error: The MPP pin number is unavailable\n");
- return;}
- /* set the MPP mode as AIN */
- val =(MPP_MODE_AIN <<Q_REG_MODE_SEL_SHIFT)\
- |(0x1<<Q_REG_OUT_INVERT_SHIFT)\
- |(0x0<<Q_REG_SRC_SEL_SHIFT);
- REG_WRITE((MPP_REG_BASE +mpp_num *MPP_REG_RANGE +Q_REG_MODE_CTL),val);
- /* Enable the MPP */
- val =(MPP_MASTER_ENABLE <<Q_REG_MASTER_EN_SHIFT);
- REG_WRITE((MPP_REG_BASE +mpp_num *MPP_REG_RANGE +Q_REG_EN_CTL),val);
- /* AIN route to AMUX8 */
- val =(0x1<<Q_REG_AIN_ROUTE_SHIFT);//AMUX1
- REG_WRITE((MPP_REG_BASE +mpp_num *MPP_REG_RANGE +Q_REG_AIN_CTL),val);
- }
Pm8x41_adc.h (dev\pmic\pm8x41\include)
- #define MPP_2_CHAN_ID 33
转载地址:https://loongembedded.blog.csdn.net/article/details/80577667 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月26日 04时19分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
区块链的优势和劣势的对比
2019-05-01
新技术,区块链能用在什么领域
2019-05-01
区块链技术应用,最先医疗行业
2019-05-01
新币上市旧币会降价吗
2019-05-01
为什么币圈的基础设施越来越多
2019-05-01
区块链投资要注意这几点
2019-05-01
市场套利策略是什么
2019-05-01
跨市场套利怎么处理
2019-05-01
当博士进入币圈会怎么样
2019-05-01
以太坊技术分解
2019-05-01
以太坊技术怎么提供安全性
2019-05-01
如何验证以太坊技术安全性
2019-05-01
数字货币的投资正确之路
2019-05-01
委员会怎么验证比特币真伪
2019-05-01
迅雷陷入窘迫,但是无可替代
2019-05-01
迅雷进军区块链速度很快
2019-05-01
区块链新的基建有几个考量
2019-05-01
我们为什么不需要BNB?
2019-05-01
getResourceAsStream()路径问题
2019-05-01
MongoDB之学习【三】:MongoDB的体系结构
2019-05-01