在嵌入式系統(tǒng)設(shè)計(jì)中,引腳復(fù)用功能通常是通過(guò)設(shè)備樹(Device Tree)預(yù)先配置設(shè)定的。出廠的設(shè)備樹中UART2_TX_DATA和UART2_RX_DATA兩個(gè)引腳被復(fù)用成了UART2功能,如果想要在不更換系統(tǒng)鏡像的情況下,將這兩個(gè)引腳的功能轉(zhuǎn)換為GPIO,并作為數(shù)字輸出(DO)引腳來(lái)控制高低電平信號(hào),該如何實(shí)現(xiàn)呢?
下面我們將逐步解析如何在應(yīng)用層修改IOMUX復(fù)用寄存器,從而實(shí)現(xiàn)將上述兩個(gè)引腳重新復(fù)用為GPIO功能的操作。
UART2_TX_DATA和UART2_RX_DATA的PAD寄存器如下圖:
可以直接使用memtool工具進(jìn)行修改。
鏈接:https://pan.baidu.com/s/10ixxhbwf4yGajS8SYUIATQ
提取碼:ju2x
(1)測(cè)試
在修改之前先進(jìn)行測(cè)試,直接在文件系統(tǒng)中,使用以下命令操作,通過(guò)萬(wàn)用表測(cè)量發(fā)現(xiàn)不能成功輸出高低電平:
echo 20 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio20/direction
echo "1" > /sys/class/gpio/gpio20/value
echo "0" > /sys/class/gpio/gpio20/value
echo 21 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio21/direction
echo "1" > /sys/class/gpio/gpio21/value
echo "0" > /sys/class/gpio/gpio21/value
(2)用memtool工具讀一下這兩個(gè)寄存器
因?yàn)檫@兩個(gè)寄存器是連續(xù)的,所以也可以使用這個(gè)命令直接讀兩個(gè)寄存器:
可以看出,這兩個(gè)MUX寄存器的值為0,以UART2_TX_DATA為例,通過(guò)下圖得知0表示復(fù)用成UART2功能:
同時(shí)也讀一下這兩個(gè)引腳的PAD寄存器:
可以看到讀出來(lái)的電氣參數(shù)跟設(shè)備樹中配置一致:
設(shè)置這兩個(gè)引腳的PAD寄存器值為0x10b0。
(4)測(cè)試驗(yàn)證
此時(shí),再去將這兩個(gè)引腳當(dāng)做GPIO去操作:
通過(guò)萬(wàn)用表測(cè)量,能夠控制引腳高低電平的輸出。完成以上所有步驟后,即可實(shí)現(xiàn)應(yīng)用層對(duì)引腳復(fù)用功能的動(dòng)態(tài)調(diào)整。期待以上的指南能對(duì)各位小伙伴提供切實(shí)的幫助!