本文檔主要講解在 iMX6 開發板設備樹內核 IO 是如何配置為各種功能的基礎文檔。 1 飛思卡爾系列 IO 配置概述 在作者接觸過的所有的飛思卡爾 BSP 源碼中,它們的 IO 配置方法基本都是類似的。 源碼中都會有一個頭文件,用戶保存全部 IO 的所有配置宏,在設備樹源碼中是 “arch/arm/boot/dts/imx6q-pinfunc.h”這個文件。 如下圖所示,是該文件 GPIO_2(這是 LED 燈的宏定義)中所有的宏定義。這些宏定義在 內核運行的時候根據需要,選擇一個,默認內核中應該是使用的是 “MX6QDL_PAD_GPIO_2__GPIO1_IO02 ”這個宏,使用這個宏配置之后,它就是 GPIO 了。 源碼中都有一個初始化的地方,也就是引用上面宏的數組或者結構體。在設備樹代碼中 是“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”文件。 例如上面提到的宏,在如下圖所示位置定義。 當然,我們在這個設備樹文件中,可以看到還有其它宏在別的地方定義和初始化,這里我 們先只介紹 GPIO 的,GPIO 在上圖中的位置定義即可,另外如果還有別的地方調用 IO 的 宏,是需要屏蔽掉的。 假如我們在調試 LED(GPIO_2)的時候,在上面位置加入了 “MX6QDL_PAD_GPIO_2__GPIO1_IO02”這個宏,另外還需要確保源碼中沒有引用其它的 宏,如果有引用必須屏蔽掉,如下圖所示剩下的四個宏都不能被引用。 2 LED 燈 IO 的配置原理分析 前面提到 LED 的 IO 宏對應的是 MX6QDL_PAD_GPIO_2__GPIO1_IO02,作者是直接給 的結論,這里給大家詳細分析下如果通過網絡標號找到對應的宏定義。 LED 小燈的網絡標號是“KEY_ROW6”,如下圖所示。 搜索“KEY_ROW6”,找到網絡標號在核心板上對應的 PIN 腳,如下圖所示,PIN 腳名 稱為“GPIO_2”。 |