• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹(shù)之IOMUX介紹

01/13 09:05
784
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

IOMUX是指引腳功能復(fù)用功能配置,MUX是指multiplex多路復(fù)用的意思,由于芯片硬件引腳資源有限,但又想實(shí)現(xiàn)盡可能多的功能,于是芯片廠(chǎng)商,就實(shí)現(xiàn)了一個(gè)引腳可復(fù)用為多路功能的設(shè)計(jì)。不同廠(chǎng)家的SOC芯片有不同的配置方法,下面我們講i.MX6ULL的引腳功能復(fù)用的配置方法。

下邊以背光引腳為例進(jìn)行講解。

原理圖中我們可以看出屏幕背光用的是核心板上的63引腳。

接下來(lái)我們查看硬件資料中的<<FETMX6ULx-S核心板管腳功能分配表20200624.xlsx>>

核心板管腳功能分配表中,第一列是連接器的引腳編號(hào);第二列是信號(hào)名稱(chēng);第三列是開(kāi)發(fā)板默認(rèn)功能;第四列是功能描述;Alt0-Alt5表示該引腳可以復(fù)用成的功能,能夠看出63引腳可以復(fù)用成pwm1,wdog1,spdif,csi.VSYNC,usdhc2.VSELECT,gpio1.IO8。

軟件中是如何對(duì)應(yīng)的呢,打開(kāi)源碼中arch/arm/boot/dts/imx6ull-elf1-emmc.dts,其中背光節(jié)點(diǎn)backlight節(jié)點(diǎn)引用了pwm1標(biāo)簽。

接下來(lái)搜索pwm1標(biāo)簽,pinctrl-0屬性中定義了引腳的復(fù)用狀態(tài):

進(jìn)一步搜索pinctrl_pwm1標(biāo)簽:

其中GPIO1_IO08是引腳的信號(hào)名稱(chēng),PWM1_OUT為此引腳復(fù)用成的功能。那MX6UL_PAD_GPIO1_IO08__PWM1_OUT這個(gè)宏是在哪里定義的呢?我們打開(kāi)arch/arm/boot/dts/imx6ull-pinfunc.h,在文件中搜索信號(hào)名稱(chēng)GPIO1_IO08:

搜索發(fā)現(xiàn)此文件中沒(méi)有沒(méi)有這個(gè)引腳的相關(guān)描述。

這個(gè)文件還引用了imx6ul-pinfunc.h,因?yàn)閕mx6ull與imx6ul有一些通用的配置,所以就把通用的部分都放到了imx6ul-pinfunc.h文件中,然后把差異的部分放到imx6ull-pinfunc.h中來(lái)描述。

接下來(lái)再打開(kāi)arch/arm/boot/dts/imx6ul-pinfunc.h,搜索信號(hào)名稱(chēng)GPIO1_IO08,能搜索到如下宏定義。其中GPIO1_IO08能復(fù)用成9種功能,我們使用到的是第一種PWM1_OUT。

將其展開(kāi)為:0x007C 0x0308 0x0000 0x0 0x0 0x110b0

??0x007C ???| ???0x0308 ?| ???0x0000 ??| ????0x0 ????| ???0x0 ??| ?0x110b0

----------------------------------------------------------------------------------------------------------------------

mux_ctrl_ofs | pad_ctrl_ofs | sel_input_ofs | mux_mode ?| sel_input | ?pad_ctrl

注意:下述參考手冊(cè)為《IMX6ULLRM.pdf》找到32章節(jié)IOMUX Controller

此章節(jié)IOMUXC Memory Map/Register Definition中的IOMUXC中有兩類(lèi)描述,一類(lèi)是IOMXUC_SW_MUX_CTL_PAD,另一類(lèi)是IOMUXC_SW_PAD_CTL_PAD。其中IOMXUC_SW_MUX_CTL_PAD描述的是復(fù)用寄存器;IOMUXC_SW_PAD_CTL_PAD描述的是電氣屬性寄存器。

先查看復(fù)用寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO08。

從下圖可以看到此引腳復(fù)用寄存器的偏移地址就是7C,想把此引腳復(fù)用成pwm1,需要選擇ALT0,所以mux_ctrl_ofs為0x007C,mux_mode為0x0

pad_ctrl_ofs為電氣屬性寄存器的偏移地址0x0308,并根據(jù)pad_ctrl的值(0x110b0)來(lái)設(shè)置此寄存器。此寄存器主要時(shí)配置一些內(nèi)部上下拉電阻,轉(zhuǎn)換速率,引腳驅(qū)動(dòng)強(qiáng)度等電氣屬性。

我們以一個(gè)引腳為例來(lái)介紹IOMUX,相信通過(guò)這個(gè)實(shí)例,我們對(duì)如何將一個(gè)引腳復(fù)用成想用的功能有了清晰的理解,接下來(lái)我們通過(guò)理解ELF?1開(kāi)發(fā)板的接口功能的適配,進(jìn)一步強(qiáng)化這方面的技能,通過(guò)后邊內(nèi)容的加強(qiáng),您很快就可以自己實(shí)現(xiàn)自己的軟件接口適配了。

相關(guān)推薦