加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之IOMUX介绍

6小时前
37
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

IOMUX是指引脚功能复用功能配置,MUX是指multiplex多路复用的意思,由于芯片硬件引脚资源有限,但又想实现尽可能多的功能,于是芯片厂商,就实现了一个引脚可复用为多路功能的设计。不同厂家的SOC芯片有不同的配置方法,下面我们讲i.MX6ULL的引脚功能复用的配置方法。

下边以背光引脚为例进行讲解。

原理图中我们可以看出屏幕背光用的是核心板上的63引脚。

接下来我们查看硬件资料中的<<FETMX6ULx-S核心板管脚功能分配表20200624.xlsx>>

核心板管脚功能分配表中,第一列是连接器的引脚编号;第二列是信号名称;第三列是开发板默认功能;第四列是功能描述;Alt0-Alt5表示该引脚可以复用成的功能,能够看出63引脚可以复用成pwm1,wdog1,spdif,csi.VSYNC,usdhc2.VSELECT,gpio1.IO8。

软件中是如何对应的呢,打开源码中arch/arm/boot/dts/imx6ull-elf1-emmc.dts,其中背光节点backlight节点引用了pwm1标签。

接下来搜索pwm1标签,pinctrl-0属性中定义了引脚的复用状态:

进一步搜索pinctrl_pwm1标签:

其中GPIO1_IO08是引脚的信号名称,PWM1_OUT为此引脚复用成的功能。那MX6UL_PAD_GPIO1_IO08__PWM1_OUT这个宏是在哪里定义的呢?我们打开arch/arm/boot/dts/imx6ull-pinfunc.h,在文件中搜索信号名称GPIO1_IO08:

搜索发现此文件中没有没有这个引脚的相关描述。

这个文件还引用了imx6ul-pinfunc.h,因为imx6ull与imx6ul有一些通用的配置,所以就把通用的部分都放到了imx6ul-pinfunc.h文件中,然后把差异的部分放到imx6ull-pinfunc.h中来描述。

接下来再打开arch/arm/boot/dts/imx6ul-pinfunc.h,搜索信号名称GPIO1_IO08,能搜索到如下宏定义。其中GPIO1_IO08能复用成9种功能,我们使用到的是第一种PWM1_OUT。

将其展开为: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

注意:下述参考手册为《IMX6ULLRM.pdf》找到32章节IOMUX Controller

此章节IOMUXC Memory Map/Register Definition中的IOMUXC中有两类描述,一类是IOMXUC_SW_MUX_CTL_PAD,另一类是IOMUXC_SW_PAD_CTL_PAD。其中IOMXUC_SW_MUX_CTL_PAD描述的是复用寄存器;IOMUXC_SW_PAD_CTL_PAD描述的是电气属性寄存器。

先查看复用寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO08。

从下图可以看到此引脚复用寄存器的偏移地址就是7C,想把此引脚复用成pwm1,需要选择ALT0,所以mux_ctrl_ofs为0x007C,mux_mode为0x0

pad_ctrl_ofs为电气属性寄存器的偏移地址0x0308,并根据pad_ctrl的值(0x110b0)来设置此寄存器。此寄存器主要时配置一些内部上下拉电阻,转换速率,引脚驱动强度等电气属性。

我们以一个引脚为例来介绍IOMUX,相信通过这个实例,我们对如何将一个引脚复用成想用的功能有了清晰的理解,接下来我们通过理解ELF 1开发板的接口功能的适配,进一步强化这方面的技能,通过后边内容的加强,您很快就可以自己实现自己的软件接口适配了。

相关推荐