码迷,mamicode.com
首页 > 其他好文 > 详细

s3c2440的IIC控制

时间:2014-08-22 22:34:00      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:s3c2440   iic   

      在tq2440和mini2440上都连接着EEPROM 它们作用也仅仅是测试I2C总线是否能用。 其中在mini2440上EEPROM型号是 AT24C08,在tq2440上这个型号是 AT24C02A。

      S3C2440A RISC 微处理器可以支持一个多主控 IIC 总线串行接口。一条串行数据线(SDA)和一条专用时钟线(SCL) 连接到 IIC 总线的总线主控和外设之间。SDA 和 SCL 线都为双向的,都连接到GPE14(SCL)  GPE15(SDA)。


为了控制多主控 IIC 总线操作,必须写入值到以下寄存器中:
– 多主控 IIC 总线控制寄存器,IICCON
– 多主控 IIC 总线控制/状态寄存器,IICSTAT
– 多主控 IIC 总线 Tx/Rx 数据移位寄存器,IICDS
– 多主控 IIC 总线地址寄存器,IICADD
由于我们只把s3c2440当做主设备来用,并且系统的IIC总线上只有这么一个主设备,因此用来设置从设备地址的地址寄存器IICADD无需配置。  


S3C2440A 的 IIC 总线接口有 4 种工作模式:
– 主机发送模式
– 主机接收模式
– 从机发送模式
– 从机接收模式


起始和停止条件
   当 IIC 总线接口不活动时,其通常在从机模式。换句话说,该接口在从 SDA 线上检测到起始条件之前应该处于从机模式(当 SCL 时钟信号为高时的一个高到低 SDA 的变化可

以启动一个起始条件)。当接口状态被改为主机模式时,可以起始发送数据到 SDA 上并且产生 SCL 信号。起始条件可以传输 1 字节串行数据到 SDA 线上,而停止条件可以结束

数据的传输。停止条件是在当 SCL 为高时的 SDA 线低到高的变化。起始和停止条件总由主机产生。当产生了一个起始条件时 IIC 总线变为忙。停止条件将使得 IIC 总线空闲。
     当主机发起一个起始条件时,其应该送出一个从机地址来通知从设备。地址字段的 1 字节由 7 位地址和 1 位传输方向标志(表现为读或写)组成。如果位[8]为 0,其表示一个写操

作(发送操作);如果位[8]为 1,其表示一个数据读取的请求(接收操作)。
   主机将通过发送一个停止条件来完成传输操作。如果主机希望持续发送数据到总线上,其应该在同一个从地址产生再一个起始条件。这样就可以执行各种格式的读写操作。

bubuko.com,布布扣

注意到在 起始 和 停止 条件之间还有若干个SCL时钟, 用来发送数据。


数据传输格式
    放置到 SDA 线上的每个字节应该以 8 位为长度。每次传输字节可以无限制的发送。起始条件随后的第一个字节应该包含地址字段。当 IIC 总线工作在主机模式时可以由主机

发送该地址字段。每个字节都应该跟随一个应答(ACK)位。总是最先发送串行数据和地址的 MSB。

bubuko.com,布布扣

上图勘误   这里图例应该反过来  ---  灰色框表示从从机到主机,看来翻译文档的人还不够细心呢。



    上面提到了4中工作模式,在这里我们只把s3c2440当做IIC总线的主设备来使用,因此只介绍前两种操作模式。
首先看下主设备发送流程图:

bubuko.com,布布扣

   首先配置IIC模式,然后把从设备地址写入接收发送数据移位寄存器IICDS中,再把0xF0写入控制状态寄存器IICSTAT中,这时等待从设备发送应答信号,如果想要继续发送

数据,那么在接收到应答信号后,再把待发送的数据写入寄存器IICDS中,清除中断标志后,再次等待应答信号;如果不想再发送数据了,那么把0x90写入寄存器IICSTAT

中,清除中断标志并等待停止条件后,即完成了一次主设备的发送。


然后就是主设备接收流程图:

bubuko.com,布布扣


    s3c2440的 IIC 时钟源为PCLK,当系统的 PCLK 为50MHz,而从设备最高需要100kHz时,需要配置IICCON寄存器 如下图所示:

bubuko.com,布布扣






s3c2440的IIC控制

标签:s3c2440   iic   

原文地址:http://blog.csdn.net/xsckernel/article/details/38762323

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!