生活随笔
收集整理的這篇文章主要介紹了
Qcom LK阶段如何使用ADC介绍
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
點(diǎn)擊打開(kāi)鏈接
摘要
本文敘述了在高通平臺(tái)LK階段讀取mpp2引腳電平的實(shí)現(xiàn)過(guò)程,附上實(shí)現(xiàn)代碼。主要實(shí)現(xiàn)過(guò)程包括配置引腳功能,讀取引腳電壓。需要特別注意配置mpp2通道和AIN route的選擇。
需要修改的文件:
bootable\bootloader\lk\app\aboot\aboot.cPm8x41_adc.c (dev\pmic\pm8x41)Pm8x41_adc.h (dev\pmic\pm8x41\include)
PM8916 MPP2引腳說(shuō)明
可以看出
MPP2引腳具有ADC輸入的功能。
修改過(guò)程及例子
在使用mpp2
引腳之前需要配置這個(gè)引腳為ADC
功能,在LK
階段提供了一個(gè)操作函數(shù),在Pm8x41_adc.c (dev\pmic\pm8x41)
中實(shí)現(xiàn)。/** 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)
!這個(gè)通道號(hào)是根據(jù)這個(gè)寄存器VADC1_LC_USR_ADC_CH_SEL_CTL來(lái)的:
在配置引腳的地方有一個(gè)選擇ADC
輸入路線(xiàn)選擇的地方,根據(jù)寄存器信息可知道這里可以選擇AMUX5-8!
下面是需要修改的代碼:
\bootable\bootloader\lk\app\aboot\aboot.c[cpp] view plaincopy
void?adc_test_selc_lcm()??{???????????uint32_t?vadc_chan3;??????????????uint16_t?mpp2_chan?=?33;??????????????????????????????????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)?[cpp] view plaincopy
?????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;}??????????????????????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);??????????????????????val?=(MPP_MASTER_ENABLE?<<Q_REG_MASTER_EN_SHIFT);???????????REG_WRITE((MPP_REG_BASE?+mpp_num?*MPP_REG_RANGE?+Q_REG_EN_CTL),val);??????????????????????val?=(0x1<<Q_REG_AIN_ROUTE_SHIFT);???????????REG_WRITE((MPP_REG_BASE?+mpp_num?*MPP_REG_RANGE?+Q_REG_AIN_CTL),val);??}??Pm8x41_adc.h (dev\pmic\pm8x41\include)[cpp] view plaincopy
#define?MPP_2_CHAN_ID???????????????????33??
總結(jié)
以上是生活随笔為你收集整理的Qcom LK阶段如何使用ADC介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。