1.I2c主控与从设备关系
对于写操作,主控作为transmitter,从设备作为receiver
对于读操作,主控作为receiver, 从设备作为transmitter
2.I2c控制器
2.1总框图
Pclk = 50Mhz, 经过prescaler分频,可以得到SCL。
IICSTAT:发出S(start)信号或者P(stop)信号。
Data Bus可以把数据写入IICDS寄存器,然后会自动产生SCL,并且会将8位数据从SDA同步给slave dev,
在数据发送出去后,在第9个SCL时钟,会受到slave dev的ack应答,可以通过查询IICSTAT来判断是否有ACK回应。
当slave dev回应ACK后,那么又可以继续发送数据,继续写入据到IICDS。
当主控想结束,设置IICSTAT发出P信号。
2.2 寄存器介绍
1.IICCON(用来配置i2c时钟)
Bit[7]: 对于发送模式,不需要配置ack信号,ack是接收者发送回来的应答。对于接受模式,设置成1,让它在第9个CLK发出ack讯号(拉低sda)。
Bit[6]:SCL时钟源,pclk分频即可
Bit[5]:中断使能,使用i2c时要去enable
Bit[4]:中断状态标识 表示中断有没有结束,当该bit读出来是1时,SCL被拉低表示busy,也就是i2c中断还在处理中。当i2c中断处理结束后,可以将该bit 清0,释放出SCL。
Bit[3:0]:i2c时钟分频系数配置,SCL时钟 = IICCLK/(IICCON[3:0]+1)
2.IICSTAT(配置模式,S,P信号,查询是否有ack)
bit[7:6]:模式选择
Bit[5]:当读的时候,0表示not busy,1表示busy
当写的时候,0表示写入STOP, 1表示写入START
Bit[4] : 数据输出使能,0:表示disable, 1表示enable
Bit[3]:仲裁flag
Bit[0]:表示i2c总线上的第9个时钟周期有没有ack,1表示有ack, 0表示无ack
3.IICADD(配置从机地址)
4.IICDS: (保存的是要发送或已经接收的数据)
3. 读写操作流程
The following steps must be executed before any IIC Tx/Rx operations.
1. Write own slave address on IICADD register, if needed.
2. Set IICCON register.
a) Enable interrupt
b) Define SCL period
3. Set IICSTAT to enable Serial Output
在操作tx,rx前,要先执行以下几步骤:
1.IICADD写入从设备地址
2.设置IICCON,设置时钟,使能中断
3.设置IICSTAT,使能传输
操作模式:
The S3C2440A IIC-bus interface has four operation modes:
— Master transmitter mode
— Master receive mode
— Slave transmitter mode
— Slave receive mode
①Master/Transmitter Mode
- 配置成master tx mode(也就是IICSTAT[7:6]配置成11)
- 把从设备地址写入IICDS,(第一次传输地址)
- IICSTAT写入0xF0(使能传输,发S信号,使能tx/rx)
- IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)
- 判断第9个clk从设备是否有ack
- 如果从设备有ack,恢复i2c传输
- IICDS = buf
- Clear pending bit
- 数据被发送出去,继续i2c传输
- 如果没有ack, stop,返回错误
- IICSTAT = 0xd0
- Clear pending bit(IICCON[4])
- Delay一会儿等待停止条件生效
②Master/Receiver Mode
- 配置成master rx mode(也就是IICSTAT[7:6]配置成10)
- 把从设备地址写入IICDS,(第一次传输地址)
- IICSTAT写入0xB0(使能传输)
- IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)
- 判断第9个clk从设备是否有ack
- 如果从设备有ack,恢复i2c传输
- Buf = IICDS
- Clear pending bit
- 数据被接受到,继续i2c传输
- 如果没有ack, stop,返回错误
- IICSTAT = 0x90
- Clear pending bit
- Delay一会儿
③Slave/Transmitter Mode
④Slave/Receiver Mode
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!