S5PV210使用I2C接口与AT24C08通信的裸机代码分析

S5PV210的I2C控制器有三个主要的寄存器,分别是I2CCON、I2CSTAT、I2CDS,以下为具体的控制位描述:

#define I2CCON0         (*(volatile INT32U *)0xE1800000)
#define ENACK           (1<<7)
#define CLKSEL(x)       ((x)<<6)        //0-I2CCLK = fPCLK/16    1-I2CCLK = fPCLK/512
#define ENINT           (1<<5)
#define INTPEND         (1<<4)          //write 0 to clear pending condition, write 1 means N/A
#define CLKVAL(x)       ((x)<<0)        //clock = I2CCLK/(x + 1)

#define I2CSTAT0        (*(volatile INT32U *)0xE1800004)
#define MODESEL(x)      ((x)<<6)        //00-slave receive    01-slave transmit    10-master receive    11-master transmit
#define BUSYIND         (1<<5)
#define SSSIG           (1<<5)          //1-START       0-STOP
#define DATAOUT         (1<<4)          //DATA OUT enable
#define LASTBIT         (1<<0)          //0-last received bit is 0,ACK    1-last received bit is 1,NoACK

#define I2CADD0         (*(volatile INT8U *)0xE1800008)     //s5pv210 used as slave, generally not use

#define I2CDS0          (*(volatile INT8U *)0xE180000C)

I2CDS是串行移位寄存器,它存放需要发送的8位数据,以及接收到的8位串行数据。


I2CCON[7] 设置为1时,当S5PV210接收到一个字节之后,将发送ACK信号,如果此位为0,则发送NoACK信号。

I2CCON[6]和I2CCON[3:0] 用来配置SCL线的时钟频率,最大不应超过100KHz

I2CCON[5] 使能I2C产生中断,I2CCON[4] 中断标志位,如果产生了中断,此位为1,将此位清0将清除中断,I2C控制器才能继续工作。

注意: 就算将I2CCON[5]置为1,使能中断,只要中断控制器里的VICxINTENABLE没有将I2C中断打开,就不会产生I2C中断,也就不需要写中断服务程序。

            另外,I2CCON[5]如果没有设置为1,I2CCON[4]中断标志位的状态就不是正确值。所以一般初始化时,都会将I2CCON[5]置为1。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值