1、简介
IOMUXC的核心功能就是实现IO口复用,简单来说就是因为RT1052对外的IO口的数量是有限的,但是RT1052内部的外设需要的IO口却可能远超实际RT1052所拥有的IO口,因此就需要IOMUXC来实现IO口的分时复用。
2、实现原理
以上是IOMUXC的框图,最右边的“IO Pad Cells”直接和“IOMUX Cells”连接,“IOMUX Cells”又和下方的“module”连接。同时“IOMUX Cells”受上图左方的“IOMUXC”的控制。接来下我们来一一看看这些奇怪名词的含义及其实际作用。
1、IO Pad Cells
“IO Pad Cells”,IO口单元,其实就是对应着RT1052的实际上的IO引脚,一个IO引脚对应一个IO Pad Cells。
2、IOMUX Cells
“IOMUX Cells”,IO口复用单元,每一个实际的IO引脚内部都连接着一个“IOMUX Cells”,这个“IOMUX Cells”有点类似单刀多掷开关,可以动态的切换这个IO引脚通向哪里(通向哪个模块(外设))。
3、Module
“Module”,模块,其实就是RT1052的内部外设,比如串口外设、GPIO外设等等等等,这些外设的输入输出信号都是通过“IOMUX Cells”这个单刀多掷开关,流入或流出“IO Pad Cells”(IO引脚)。如果串口外设想要发送数据,但是“IOMUX Cells”没有搭建起串口外设和IO口之间的桥梁,那不好意思,串口这个数据没办法发送出去。
4、IOMUXC
IOMUXC是用户(内核)能直接控制的地方,前面说的“IOMUX Cells”是由“IOMUXC”来控制,但是“IOMUXC”是由谁控制呢?他是由内核来控制的。因此我们实际写程序的时候直接配置IOMUXC的寄存器就可以配置以下属性:
IO口分时复用的配置
IO口电气属性的配置
最后我们再来看看GPIO章节里面的一张框图,有没有豁然开朗的感觉?
3、特殊机制
IOMUXC有两个比较特别的地方。
1、菊花链
用过32的朋友都知道,32有的外设管脚是可以重映射的(如下图)。这种灵活的配置方法可以方便PCB的布局。
通过配置IOMUXC可以实现引脚的灵活分配,方便PCB布局和IO口合理分配。
2、SION
SION是“Software Input On”的简写,他是IOMUXC的一部分,使能了这个功能之后,哪怕这个IO口设置为输出模式,各种外设也能在IOMUXC的配合下,读取当前IO口的实际电平。
比如最简单的点灯:
当IO口配置成GPIO输出的情况下,对GPIO_DR寄存器操作可以直接控制IO口的输出电平,这个GPIO_DR寄存器的值只是你写进去的,但是IO口的电平真的和你想的一样吗?如果这个时候你不开启SION功能的话,那你是没办法获取IO口的实际电平的,如果开启了的话,可以通过读取GPIO_PSR寄存器,获取IO口的实际电平。
4、总结
以下代码可以使能IOMUXC的时钟。
CLOCK_EnableClock(kCLOCK_Iomuxc); /* iomuxc clock (iomuxc_clk_enable): 0x03u */
————————————————
版权声明:本文为CSDN博主「Leaves~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44021648/article/details/113872195