1. 程式人生 > >iMX6引腳配置的暫存器使用方法總結

iMX6引腳配置的暫存器使用方法總結

平臺:  OKMX6Q-S

系統:  Linux

核心版本:linux-3.0.35

Datasheet:IMX6DQRM.pdf

 i.MX 6Q包含有限數量的引腳,其中大部分具有多個訊號選項。這些訊號到引腳和引腳到訊號的選項由輸入輸出多路複用器IOMUX選擇。IOMUX還用於配置其他引腳特性,例如電壓電平,驅動強度和滯後。

在IMX6DQRM.pdf中的第4章ExternalSignals and Pin Multiplexing中分別給出了引腳分配表4-1和複用選項表4-2。引腳分配列出晶片的管腳名稱、可分配給每個管腳的各種訊號以及每個管腳的預設設定,如表1所示。複用選項列出按模組例項分組的外部訊號,每個訊號的複用選項以及用於將訊號路由至選定管腳的暫存器,如表2所示。

表1 Pin Assignments(部分)

表2 Muxing Options(部分)

 

1.   暫存器命名規則

在\arch\arm\plat-mxc\include\mach\iomux-v3.h中的第43行,說明了iMX6引腳配置的暫存器的一般命名規則

/*
 *   buildIOMUX_PAD structure
 *
 * This iomux scheme is based around pads,which are the physical balls
 * on the processor.
 *
 * - Each pad has a pad control register(IOMUXC_SW_PAD_CTRL_x) which controls
 *  things like driving strength and pullup/pulldown.
 * - Each pad can have but not necessarily doeshave an output routing register
 *  (IOMUXC_SW_MUX_CTL_PAD_x).
 * - Each pad can have but not necessarily doeshave an input routing register
 *  (IOMUXC_x_SELECT_INPUT)
 *
 * The three register sets do not have a fixedoffset to each other,
 * hence we order this table by pad controlregisters (which all pads
 * have) and put the optional i/o routingregisters into additional
 * fields.
 *
 * The naming convention for the pad modes is MX35_PAD_<padname>__<padmode>
 * If <padname> or <padmode> refersto a GPIO, it is named
 * GPIO_<unit>_<num>
 *
 * IOMUX/PAD Bit field definitions
 *
 * MUX_CTRL_OFS:                  0..11 (12)
 * PAD_CTRL_OFS:                  12..23 (12)
 * SEL_INPUT_OFS:                 24..35 (12)
 * MUX_MODE + SION:               36..40 (5)
 * PAD_CTRL + NO_PAD_CTRL:        41..58 (18)
 * SEL_INP:                       59..62(4)
 * reserved:                      63    (1)
*/

這個標頭檔案中提到,每個複用管腳最多有三個暫存器:

管腳控制暫存器:IOMUXC_SW_PAD_CTRL_x, x代表某某管腳名稱

輸出路由暫存器:IOMUXC_SW_MUX_CTL_PAD_x

輸入路由暫存器:IOMUXC_x_SELECT_INPUT

Datasheet中使用

管腳模式的命名規則為:MX6Q_PAD_<padname>__<padmode>

padname為管腳名,padmode為管腳模式。

如表1中,CSI0_DAT4為padname,取Signal為GPIO5_IO22是,padmode即為ALT5,則其複用管腳名稱為MX6Q_PAD_CSI0_DAT4__GPIO5_IO22

Linux核心中使用

2.   在核心中定義複用管腳的暫存器

\arch\arm\plat-mxc\include\mach\iomux-mx6q.h中

MX6Q_PAD_SD3_DAT6__GPIO_6_18的定義為

#define  MX6Q_PAD_SD3_DAT6__GPIO_6_18         \

       (_MX6Q_PAD_SD3_DAT6__GPIO_6_18 |MUX_PAD_CTRL(NO_PAD_CTRL))
其中
#define MUX_PAD_CTRL(x)              ((iomux_v3_cfg_t)(x)<< MUX_PAD_CTRL_SHIFT)

typedef u64 iomux_v3_cfg_t;

#define MUX_PAD_CTRL_SHIFT     41
#defineNO_PAD_CTRL               (1 << 17)

其中_MX6Q_PAD_SD3_DAT6__GPIO_6_18定義為:

#define_MX6Q_PAD_SD3_DAT6__GPIO_6_18                 \

              IOMUX_PAD(0x0694, 0x02AC, 5,0x0000, 0, 0)
這個IOMUX_PAD巨集是定義GPIO的關鍵巨集,其原型為:
#defineIOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, \

              _sel_input, _pad_ctrl)      
IOMUX_PAD巨集有6個引數,每個引數的意思是:

引數

含義

_pad_ctrl_ofs

控制暫存器的偏移地址(16進位制)

_mux_ctrl_ofs

MUX控制暫存器的偏移地址(16進位制),用於選擇引腳的功能

_mux_mode

MUX模式,bit0~3,範圍0~7

_select_input_ofs

SELECT_INPUT暫存器偏移地址(16進位制)

_select_input

Daisy Chain模式,bit0~1,範圍0~3

_pad_ctrl

bits to be set in register _pad_ctrl_ofs for configuration selection

因此對應關係如下:

    0x0694|     0x02AC|         0x5      |    0x0000   |      0x0     |      0x0

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

mux_ctrl_ofs | pad_ctrl_ofs |sel_input_ofs | mux_mode | sel_input | pad_ctrl

對映關係:

MX6Q_PAD_SD3_DAT6__GPIO_6_18  ->   IOMUX_PAD(0x0694, 0x02AC, 5, 0x0000, 0, 0)

例如:MX6Q_PAD_SD3_DAT6__GPIO_6_18,管腳名(padname)為SD3_DAT6。

由於是對複用管腳的配置,於是在管腳複用的章節(IOMUXC)中查詢。但是現確定padname才方便,於是定義在ExternalSignals and Pin Multiplexing章節,搜尋MX6Q_PAD_SD3_DAT6__GPIO_6_18的中間部分:SD3_DAT6,如下圖


可知GPIO_6_18是屬於SD3_DAT6的ALT5,於是mux_mode=0x5即可。上圖表格中最後一列SW_PAD_CTL_PAD_SD3_DATA6是config配置需要查詢的名稱,跳到管腳複用的章節(IOMUXC)中,找到SW_PAD_CTL_PAD_SD3_DATA6,如下所示:


如果直接取預設值的話結果是config=0x1b0b0,這裡可以根據自己的需要(硬體)更改為與自己的板子匹配的值,我把最後SRE的值設定為1,即Fast Slew Rate,如下圖說明:


接下來是mux_ctrl_ofs、pad_ctrl_ofs、sel_input_ofs三個偏移值,這些值都是在複用管腳的章節確定的。因為pad name為SD3_DAT6,所以在找的時候可以拿它當關鍵字。

首先是mux_ctrl_ofs,找到IOMUXC_SW_MUX_CTL_PAD_*開頭的部分,結尾選擇SD3_DATA6,即IOMUXC_SW_MUX_CTL_PAD_SD3_DATA6,如下圖,


Address: 20E_0000h base + 2ACh offset= 20E_02ACh 中可知offset=2AC,即mux_ctrl_oft=0x2AC

其他的查詢方法類似。pad_ctrl_ofs,查詢IOMUXC_SW_PAD_CTL_PAD_SD3_DATA6一節,可知偏移值pad_ctrl_ofs=0x694



sel_input_ofs查詢IOMUXC章節以SELECT_INPUT結尾的部分,中間選擇GPIO_6_18,即IOMUXC_GPIO_6_18_SELECT_INPUT,如果沒有這裡sel_input_ofs=0x000即可,對應的sel_input0即可。

如果有例如IOMUXC_UART2_UART_RX_DATA_SELECT_INPUT,即uartrx管腳配置,如下圖,所以RXsel_input_ofs=0x928,這裡選擇對應的值“110 SD4_DATA4_ALT2 — Selecting ALT2 mode ofpad SD4_DAT4 for UART2_RX_DATA.“所以RXsel_input=0x6


參考:

imx6ul 裝置樹中iomux處pad_ctrl暫存器配置詳解

飛思卡爾IMX6處理器的GPIO配置方式

新增GPIO的方法請參考:


相關推薦

iMX6配置使用方法總結

平臺:  OKMX6Q-S系統:  Linux核心版本:linux-3.0.35Datasheet:IMX6DQRM.pdf i.MX 6Q包含有限數量的引腳,其中大部分具有多個訊號選項。這些訊號到引腳和引腳到訊號的選項由輸入輸出多路複用器IOMUX選擇。IOMUX還用於配置

STM32 串列埠的基本配置(版)筆記

1.串列埠1.串列埠作為MCU和外界的連線工具,既可以檢驗程式碼的正確性,也可以和上位機進行交流2.在STM32F103RCT6中,最多支援5路串列埠,對於串列埠而言,一般使用序列通訊(USART1--5)3.幾個比較重要的暫存器:<1>:USART->SR

STM32F407配置配置GPIO的例子)

在STM32F407中,有一個結構體控制引腳的高低電平:GPIOX(x∈(A, G) typedefstruct {   __IO uint32_t MODER;    /*!< GPIO port mode register,               Addre

STM32 GPIO的8種工作模式及相關配置

GPIO八種工作模式四種輸入: GPIO_Mode_IPU(上拉輸入) GPIO_Mode_IPD(下拉輸入) 原理: 經過上拉開關和下拉開關的連線,再經過觸發器轉化為0,1的數字訊號,儲存到資料暫存器中,然後我們就可以通過配置暫存器CRL,CRH控制這兩個開關。 用法: 若

通俗易懂解析stm32 (一) HAL庫 標準庫 直接配置 三種開發方式的區別

    通常新手在入門STM32的時候,首先都要先選擇一種要用的開發方式,不同的開發方式會導致你程式設計的架構是完全不一樣的。一般大多數都會選用標準庫和HAL庫,而極少部分人會通過直接配置暫存器進行開發。網上關於標準庫、HAL庫的描述相信是數不勝數。可是一個對於很多剛入門的朋

第二章知識總結

一、什麼是暫存器: (1)暫存器是cpu的主要部件,是程式設計師可以用指令讀寫的部件。 (2)8086cpu有14個暫存器:AX,BX,CX,DX(通用暫存器)SI,DI,SP,BP(基址和變址暫存器)IP,(指令指標和標誌暫存器)CS,SS,ES,DS(段暫存器) (3)通用暫存器:AX,BX,CX,

【第二章】總結

一,通用暫存器(8086CPU的所有暫存器都是16位的,可以存放兩個位元組。) 1,種類:AX,BX,CX,DX       有課細分為兩個獨立的8位暫存器來用,如:AX可分為AH和AL; 二,字在暫存器中的儲存 1.位元組(byte):由8個bit組成,可以存在8位暫存

51微控制器常用功能總結

原文地址:http://blog.chinaunix.net/uid-22209292-id-1783757.html 程式狀態暫存器PSW D7 D6 D5 D4 D3 D2 D1 D0 Cy AC F0 RS1 RS0 OV --- P AC:輔助進位標誌位。低4位向高

ADS1248 配置和通道轉換

ADS1248是TI的一款 24位delta-sigma(ΔΣ) 、2KSPS、8通道(4通道差分)ADC晶片。TI官方有RTD設計方案,參考文件做了一板4通道3線PT100溫度採集。除錯ADS1248過程中遇到一些問題,記錄下來方便以後使用。 參考程式碼:

H3 GPIO 配置相關函式(ioremap iounmap)

對暫存器操作遵循一個原則:  讀------改 ------寫 1. 配置暫存器操作 (ioremap   //  iounmap)         #define BASE_

F28335 ePWM計數模組(CC)與 動作模組(AC)及其配置 ————TMS320F28335學習筆記(六)

1 計數比較模組 1.1 計數比較模組作用 計數比較模組是以時基計數器的值作為輸入,與比較暫存器CMPA和CMPB不斷進行比較的,當時基計數器的值等於其中之一時,就會產生相應的事件。 F28335就是通過對比這些值,來產生事件,與動作模組AC相配合來調節PWM的佔空比以及頻率。 補充:採

F28335 ePWM時基模組(TB)及其 配置————TMS320F28335學習筆記(五)

1 時基模組 TB 組成及工作原理簡介 每個PWM模組都有自己的時基單元,這決定了每個PWM模組的時序,時基模組的作用: 確定PWM的週期或頻率 管理當前ePWM模組和其他ePWM模組的相位,以此保持各個ePWM模組的同步性 設定時基計數器的計數方式,是增計數(up)

UVM篇之七:模型的常規方法(下)

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266224.html mem與reg的聯絡和差別 UVM暫存器模型也可以用來對儲存建模。uvm_mem類可以用來模擬RW(讀寫)、RO(只讀)和WO(只寫)型別的儲存,並且可以配置其模型的資料寬度

UVM篇之六:模型的常規方法(上)

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266223.html mirrored、desired和actual value 在我們應用暫存器模型的時候,除了利用它的暫存器檔案資訊,也會利用它來跟蹤暫存器的值。跟蹤暫存器的值,一方面是建立m

操作方法

一, 暫存器的設定和操作特性 1,一個暫存器的每個位有其不同的意義,進行不同的設定會使硬體產生不同的效果和功能; 2,有些情況下需要對一個暫存器進行連續的不同的甚至完全相反的設定; 3,有些情況下需要對一個暫存器中的某一位或一位進行連續的不同的甚至完全相反的設定,而其餘的位要保持不變;

TMOD、SCON、PCON配置

TMOD控制暫存器 TMOD是定時器、計數器模式控制暫存器,它是一個逐位定義的8為暫存器,但只能使用位元組定址。 其各位是: 由上圖我們就可以看出,這個暫存器控制了兩個定時器/計數器 暫存器的高四位控制定時器1,低四位控制定時器0 GA

TMS320F28335學習筆記(五)——ePWM時基模組(TB)及其 配置

1 時基模組 TB 組成及工作原理簡介 每個PWM模組都有自己的時基單元,這決定了每個PWM模組的時序,時基模組的作用: 確定PWM的週期或頻率 管理當前ePWM模組和其他ePWM模組的相位,以此保持各個ePWM模組的同步性 設定時基計數器的計數方式,是增

tw9912 配置

給出4組,還是以FAE給的配置給為準 NTSC_in_656i_output: 輸入為CVBS NTSC模擬訊號,輸出為隔行BT656 w FF 00 ; Page 00 w 01 78 w 02 40 w 03 20 w 04 00 w 05 01 w 06 03 w

PCIe配置空間和PCI裝置中的

1、訪問PCI配置空間,PCI基本配置空間的讀寫使用下列函式: 原型定義在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pdev, intwhere, u8 *val); int pci_read

stm32 usart的BRR配置

程式是CMSIS中的,分析它是怎麼實現的? 波特率由整數和分數兩部分組成。 RCC_GetClocksFreq(&RCC_ClocksStatus); if (usartxbase == USART1_BASE) { apbclock = RCC_Clo