A平台pin mux reg 配置

2021-09-26 14:06:58 字數 3894 閱讀 8406

本文以s905d 三模配置為例,也即dvb-c/dvb-t,dvb-s 。

確認pin腳連線

檢視原理,確認外設和晶元pin的連線鏈路。serial ts stream如下

dvb - c/t 這一路連線的是晶元的管腳是v21(gpioz_0),v20(gpioz_1) ,u22(gpioz_2) ,u21(gpioz_3),主晶元只需要接入即可解ts流,該路屬於序列serial ts stream。

parallel ts stream 如下:

dvb - s 這一路連線的是晶元的管腳是e3,e2,e1,f4,f2,f3,g4,g2,g3,h3,h2,分別對應gpiodv_0 ~ gpiodv_10,主晶元只需要接入即可解ts流,該路屬於並行parallel stream。

梳理gpio口

dvb - c/t 序列的一路需要使用到gpioz_0,gpioz_1,gpioz_2,gpioz_3

dvb - s 並行的一路需要使用到gpiodv_0,gpiodv_1,gpiodv_2,gpiodv_3,gpiodv_4,gpiodv_5,gpiodv_6,gpiodv_7,gpiodv_8,gpiodv_9,gpiodv_10

定義pinmux

mesongxl.dtsi 檔案中定義如下pin腳,相關解析在aml_dvb.c檔案的probe 函式解析各個pin mux 配置

/* dvb-s 序列 pin mux 配置 */        

dvb_p_ts0_pins: dvb_p_ts0_pins ;

dvb_s_ts0_pins: dvb_s_ts0_pins ;

dvb_p_ts1_pins: dvb_p_ts1_pins ;

/* dvb-c/t 序列 pin mux 配置 */

dvb_s_ts1_pins: dvb_s_ts1_pins ;

pinmux 引數說明:

1. amlogic,pin 即為需要使用到的gpio口;

2. amlogic,setmask 暫存器bit置位的設定;

-- 例如:<2 0x1f> 其中 "2" 表示reg2,"0x1f" 用二進位制表示即為 "0001 1111",此時<2 0x1f>表示將reg2[0],reg2[1],reg2[2],reg2[3],reg2[4]設定為1

3. amlogic,clrmask 為暫存器bit位置零的設定;

-- 例如:<3 0x787 2 0xff000400>

其中 "2" 表示reg2,"3"表示reg3

"0x787" 用二進位制表示即為"0111 1000 0111" ,表示 reg3[0],reg3[1],reg3[2],reg3[7],reg3[8],reg3[9],reg3[10] 共7個bit位設定為0

"0xff000400 " 用二進位制表示即為"1111 1111 0000 0000 0000 0100 0000 0000 " ,表示 reg2[10],reg2[24],reg2[25],reg2[26],reg2[27],reg2[28],reg2[29],reg2[30],,reg2[31]

共9個bit位設定為0

dts 中dvb 裝置節點定義

例如:gxl_p230_2g.dts 配置檔案中定義如下

setmask clrmash 與pin_mux_regx 的關係

dvb-s 這一路如下:

查詢暫存器文件資訊例如「gxbblite-core_pin_mux.doc」,可以看到gpiodv_0~gpiodv_10 對映表,我們需要使用 tsin_*** 的功能,那麼對應的bit為要設定為1,其它的功能位要設定為0, 也即

amlogic,setmask = <2 0x1f>; // reg2_0 ~ reg2_4 總共五個bit 使能置為1

amlogic,clrmask = < 3 0x787 2 0xff000400 1 x100>; // reg1,reg2,reg3 對應的bit 置為0

dvb-c這一路如下:

查詢暫存器文件資訊例如「gxbblite-core_pin_mux.doc」,可以看到gpiodv_0~gpiodv_10 對映表,我們需要使用 tsin_*** 的功能,那麼對應的bit為要設定為1,其它的功能位要設定為0,也即

amlogic,setmask = < 3 0xf0000 >; // reg3_16~reg3_19 = 1

amlogic,clrmask = < 3 0xf0007000 4 0xf00000>;

// reg3[12~14, 28,31]=0,reg4[20 ~ 23] = 0

暫存器資訊查詢

查閱晶元暫存器資訊,計算暫存器的位址位址在查詢。

通過查詢「peripherals register specification」 文件知道

base_adr:0xc8834400

final_adr = base_adr + num *4

num 就是每個暫存器的索引號,例如:

pin_mux_reg0 0x2c

pin_mux_reg1 0x2d

pin_mux_reg2 0x2e

pin_mux_reg3 0x2f

pin_mux_reg4 0x30

pin_mux_reg5 0x31

pin_mux_reg6 0x32

pin_mux_reg7 0x33

pin_mux_reg8 0x34

pin_mux_reg9 0x35

pin_mux_reg10 0x36

pin_mux_reg11 0x37

pin_mux_reg12 0x38

那麼reg2 final_adr = 0xc8834400 + 0x2e << 2 = 0xc88344b8;

那麼rege final_adr = 0xc8834400 + 0x2f << 2 = 0xc88344bc;

系統啟動後,串列埠輸入指令,輸出的暫存器中的值,要轉換為二進位制對應和dts對比確認是否正確

echo 0xc88344b8 > /sys/kernel/debug/aml_reg/paddr;cat /sys/kernel/debug/aml_reg/paddr

echo 0xc88344bc > /sys/kernel/debug/aml_reg/paddr;cat /sys/kernel/debug/aml_reg/paddr

修改暫存器的值,例如修改reg3的 0~3 為1:

echo 0xc88344bc > /sys/kernel/debug/aml_reg/paddr;cat /sys/kernel/debug/aml_reg/paddr

echo 0xc88344bc 0x000f> /sys/kernel/debug/aml_reg/paddr;cat /sys/kernel/debug/aml_reg/paddr

windows平台下php開發平台的配置

最近想學php,配置了一下開發環境,把我的配置過程寫出來希望對各位有點小小幫助 用的是apache2.2.4 mysql 5.0,php5.2.3,作業系統windows xp sp2 1.安裝apache,mysql,php5.2.3 apache 用的是安裝包直接安裝 安裝路徑 c progra...

mac平台c 環境配置

部落格已搬家到 目標 乙個輕量級的 反應迅速 便於使用的c 環境 用途 學習c 刷acm試題 需求 具有控制台和最一般的除錯功能 先後嘗試過textmate codeblocks mac codeblocks parallel desktop win7 clion codelite 1.textma...

Windows平台下eclipse配置

安裝 go 環境 環境變數配置 對 go 的環境變數進行配置,有些安裝是預設配置,有些需要手動的配置環境變數。go 環境驗證,在控制台中輸入 go version,如顯示以下內容,則表示輸入成功。安裝環境 201606061100 platformruntime 安裝配置 mingw64 mingw...