时钟信号的同步
在I2C总线上传送信息时的时钟同步信号是由挂接在SCL线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。
i2c的有关图例:
参考博客:
http://blog.csdn.net/chuckfql/article/details/19834137
二、iomux
I OMUXC指IO多路复用控制器。由于imx6集成了很多的功能模块,BGA封装容纳不了那么多引脚,所以就想到用IOMUXC的方式来解决此问题,也即一个功能模块的引脚,通过n选1的多路开关,把需要的外设连接到该引脚上。要使用哪个功能,就需要配置引脚参数。
在实际开发中,具体的配置是通过IOMUXC_SW_MUX_CTL_PAD_(BGAcontact NAME,比如UART3_RXD)寄存器来实现,然后通过配套的寄存器
IOMUXC_SW_PAD_CTL_PAD_(PAD NAME, 比如UART3_RXD)来配置管脚的驱动电压,回转率,驱动强度,开漏,上拉, DDR 类型等等。
下面通过一个具体实例,来让大家有个认识:
在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样:
? ?
#define MX6Q_PAD_GPIO_19__GPIO_4_5 \\
(_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL))
其中_MX6Q_PAD_GPIO_19__GPIO_4_5定义为:
? ?
#define _MX6Q_PAD_GPIO_19__GPIO_4_5 \\ IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)
这个IOMUX_PAD宏是定义GPIO的关键宏,其原型为:
? ?
#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, _sel_input, _pad_ctrl)
IOMUX_PAD宏有6个参数,每个参数的意思是: 参数
_pad_ctrl_ofs _mux_ctrl_ofs
含义
控制寄存器的偏移地址(16进制)
MUX控制寄存器的偏移地址(16进制), 用于选择引脚的功能
_mux_mode _select_input_ofs _select_input
MUX模式,bit0~3,范围0~7
SELECT_INPUT寄存器偏移地址(16进制) Daisy Chain模式, bit0~1,范围0~3
_pad_ctrl bits to be set in register _pad_ctrl_ofs for configuration selection
具体的含义要结合IMX6数据手册【Chapter 36 IMOUX Controller(IOMUXC)】的内容。 下面看下IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)中参数的在数据手册中的位置,请看截图。
1、_pad_ctrl_ofs
从图中可以看到_pad_ctrl_ofs=0624h
2、_mux_ctrl_ofs、_mux_mode
如上图,_mux_ctrl_ofs取值为0x254,_mux_mode范围为000~110
只有_mux_mode = 0时,_select_input_ofs和_select_input才有效,其余时候_select_input_ofs和_select_input 都为0。
I2c2的复用
结合上边对iomux的介绍,参考原理图,
Tianqian
在Iomux工具中ball中查看U5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库I2C驱动培训文档(2)在线全文阅读。
相关推荐: