1.10.2_I2C_S3C2440的I2C控制器_P

在这里插入图片描述
2440通过I2C总线连接设备(AT24Cxx),芯片内部有一个I2C控制器。

当主机(2440)Master为Transmitter时,从机Slave为Receiver,当主机Master为Receiver时,从机Slave为Transmitter。

下图是2440的I2C总线框图。从左往右看,首先是I2C的时钟,I2C的时钟源是PCLK(50MHz),经过一个4bit的分频器,产生I2C的时钟。通过IICSTAT寄存器发出信号,通过IICDS发送数据或接受数据。
在这里插入图片描述数据的传输格式如下图如所示。首先发出开始信号S,然后是7位的从设备地址,1位的读写标志位,然后等待从机返回一个ACK信号,如果是发送数据,那么就将1B数据发出,然后等待从设备回传ACK,如果是接受,那么就接收从设备返回的1B的DATA数据,然后给从设备发送一个ACK信号,如果要结束传输,就使用一个P信号来结束。
在这里插入图片描述
在第九个时钟信号产生了中断,在中断处理过程中,SCL为低,谁都不可以使用I2C。

在这里插入图片描述
那么,在中断中做什么呢?

  1. 对于写,如果没有ACK,则出错,要结束传输(发出P信号);若有ACK,那么说明传输成功,这时若仍有数据,则继续写入IICDS,并清中断,若无数据要传输,则发出结束信号;
  2. 对于读,收到数据后要回应一个ACK信号,若还有数据要读,则清中断,启动下一次传输;若不想读了,则发送结束标志。
    在这里插入图片描述
    **重点:发生IIC中断时,SCL被拉低,阻止继续使用IIC,清中断后,才可以继续使用。**这种机制给我们的IIC控制器提供了处理时间。

下面是2440手册中,读写的操作说明。

在Transmitter模式,当数据发送完毕后,IIC总线将等待IICDS寄存器接收一个新数据。在新数据写入到IICDS寄存器之前,SCL被拉低,写入新数据后再被释放。2440要进入中断,来确定当前数据是否发送完成。在2440处理完中断后,要向IICDS寄存器写入下一个数据。

  1. IICDS = val;
  2. 发送完成,产生中断,要拉低SCL;
  3. 中断程序中,判断状态,IICDS = val,IIC继续工作;

在Receive模式,当数据接受完毕,IIC总线接口要等待IICDS寄存器被读取。在新数据被读取之前,SCL被拉低,只有在数据被取出后,SCL才被释放。2440要进入中断来保证新数据是否读取完成。在CPU收到一个中断请求之后,需要从IICDS寄存器中读取数据。

  1. 发起传输,接受DATA;
  2. 产生中断,SCL被拉低;
  3. 中断程序中,判断;判断并处理之后,val = IICDS,IIC继续工作,继续接受新数据;

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值