找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6763|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Freescales i.mx6開發(fā)板配置IOMUX-迅為電子

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:151620 發(fā)表于 2016-12-28 11:17 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
為什么IOMUXSoc芯片上有很多引腳,每個(gè)引腳對(duì)應(yīng)特定的功能。例如控制電機(jī)需要控制電機(jī)的功能引腳1和引腳2,控制傳感器需要控制傳感器功能的引腳3和引腳4。對(duì)于使用Soc芯片的需求方來說,可能只是控制電機(jī),或者只是控制傳感器。這樣Soc芯片上的4個(gè)引腳就浪費(fèi)了2個(gè)引腳。為了能提供更多的功能,減少引腳的浪費(fèi),可以把引腳1,2和引腳3,4合并,通過復(fù)用引腳來解決問題。
i.mx6的Soc芯片提供IOMUX機(jī)制就是用來解決引腳復(fù)用的問題。
如何確定使用引腳12,還是使用引腳34,是下面要介紹的主要內(nèi)容
需要的概念Pad 對(duì)應(yīng)的是Soc芯片上的引腳
Signal 對(duì)應(yīng)的是控制電機(jī)的功能
需要配置的寄存器
  • Pad控制寄存器
  • Mux控制寄存器
  • Select Input寄存器
配置IOMUX的必備工具
  • 芯片原理圖
  • 芯片軟件手冊(cè)
  • 內(nèi)核源代碼
配置步驟1. 查看原理圖下面是USB轉(zhuǎn)串口芯片的原理圖,我們需要配置UART1_RX這個(gè)接口。

uart.jpeg

通過UART1_RX,我們可以在i.mx6的原理圖中找到對(duì)應(yīng)的引腳CSI0_DAT11。

imx6soc.jpeg

2. 查找軟件手冊(cè)(引腳功能)軟件手冊(cè)第4章
查找CSI0_DAT11,可以得到兩個(gè)重要的信息
  • Pad的控制寄存器名稱 SW_PAD_CTL_PAD_CSI0_DATA11
  • CSI0_DAT11的功能UART1_RX_DATA 用于查找其他兩個(gè)寄存器

  • uartfunction.jpeg
查找UART1_RX_DATA,可以得到兩個(gè)寄存器
  • Mux的控制寄存器名稱 IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11
  • Select Input的寄存器名稱 IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT

  • uartmuxoption.jpeg
3. 查找軟件手冊(cè)(IOMUX功能配置)軟件手冊(cè)第36章, 介紹了IOMUX需要配置寄存器的所有信息。
根據(jù)三個(gè)寄存器的名稱進(jìn)行查找
  • Pad的控制寄存器名稱 SW_PAD_CTL_PAD_CSI0_DATA11
  • Mux的控制寄存器名稱 IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11
  • Select Input的寄存器名稱 IOMUXC_UART1_UART_RX_DATA_SELECT_INPUTIOMUX_SW_PAD_CTL_PAD_CSI0_DATA11偏移地址:654h
    Pad控制寄存器主要用于控制引腳的上拉電阻,下拉電阻和電壓控制

  • pad.jpeg
IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11偏移地址:284h
配置MUX_MODE的模式為ALT3,就能使用UART1_RX_DATA的功能

mux.jpeg

IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT偏移地址:920h

selectinput.jpeg

三 源碼配置配置IOMUX的過程,實(shí)際上就是向指定的設(shè)備地址寫入配置值的過程。
內(nèi)核代碼提供專門的宏 IOMUX_PAD,用來把IOMUX的配置進(jìn)行拼裝,然后寫入到指定的設(shè)備地址中。
IOMUX_PAD 定義文件  ~/android/kernel_imx/arch/arm/plat-mxc/include/mach/iomux-v3.h
/* *      build IOMUX_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 does have an output routing register *   (IOMUXC_SW_MUX_CTL_PAD_x). * - Each pad can have but not necessarily does have an input routing register *   (IOMUXC_x_SELECT_INPUT) * * The three register sets do not have a fixed offset to each other, * hence we order this table by pad control registers (which all pads * have) and put the optional i/o routing registers into additional * fields. * * The naming convention for the pad modes is MX35_PAD___ * If  or  refers to a GPIO, it is named * GPIO__ * * 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)*/#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs,  _sel_input, _pad_ctrl)                  (((iomux_v3_cfg_t)(_mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) |                       ((iomux_v3_cfg_t)(_mux_mode) << MUX_MODE_SHIFT) |                                 ((iomux_v3_cfg_t)(_pad_ctrl_ofs) << MUX_PAD_CTRL_OFS_SHIFT) |                   ((iomux_v3_cfg_t)(_pad_ctrl) << MUX_PAD_CTRL_SHIFT) |                                 ((iomux_v3_cfg_t)(_sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT) |                 ((iomux_v3_cfg_t)(_sel_input) << MUX_SEL_INPUT_SHIFT))參數(shù)
  • _pad_ctrl_ofs  pad控制寄存器的偏移地址
  • _mux_ctrl_ofs mux控制寄存器的偏移地址
  • _mux_mode    mux的模式
  • _sel_input_ofs input寄存器的偏移地址
  • _sel_input       input的類型
配置通過軟件手冊(cè)查找到三個(gè)寄存器的地址, 使用IOMUX_PAD配置代碼。
  • SW_PAD_CTL_PAD_CSI0_DATA11 偏移地址 0x654
  • IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11 偏移地址 0x284
  • IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT 偏移地址 0x920
文件  ~/android/kernel_imx/arch/arm/plat-mxc/include/mach/iomux-mx6q.h
#define _MX6Q_PAD_CSI0_DAT11__UART1_RXD                                 IOMUX_PAD(0x0654, 0x0284, 3, 0x0920, 1, 0)上面的內(nèi)容描述了從原理圖查找指定引腳,到軟件手冊(cè)找到Mux,Pad,SelInput的寄存器配置信息,再到內(nèi)核代碼如何進(jìn)行配置的全部映射關(guān)系。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表