日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qcom LK阶段如何使用ADC介绍

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qcom LK阶段如何使用ADC介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

摘要

本文敘述了在高通平臺LK階段讀取mpp2引腳電平的實現過程,附上實現代碼。主要實現過程包括配置引腳功能,讀取引腳電壓。需要特別注意配置mpp2通道和AIN route的選擇。

需要修改的文件:

bootable\bootloader\lk\app\aboot\aboot.cPm8x41_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)注意:mpp2mpp_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[cpp] view plaincopy
  • 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)?[cpp] view plaincopy
  • /*?
  • ?*?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)[cpp] view plaincopy
  • #define?MPP_2_CHAN_ID???????????????????33??

  • 總結

    以上是生活随笔為你收集整理的Qcom LK阶段如何使用ADC介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。