/*register*/
#define REG_I2C_PRER_LO 0x0
#define REG_I2C_PRER_HI 0x1
#define REG_I2C_CTR 0x2
#define REG_I2C_TXR 0x3
#define REG_I2C_RXR 0x3
#define REG_I2C_CR 0X4
#define REG_I2C_SR 0X4
查看用户手册
i2c-0模块寄存器物理地址基址为:0xbfe58000,地址空间16KB
- 分频器锁存器低字节寄存器(PRERlo):位宽[7:0],偏移量:0x00,复位值:0xff
- 分频器锁存器低字节寄存器(PRERhi):位宽[7:0],偏移量:0x01,复位值:0xff
- 控制寄存器(CTR):位宽[7:0],偏移量:0x02,复位值:0x00
- 发送数据寄存器(TXR):位宽[7:0],偏移量:0x03,复位值:0x00
位域 | 位域名称 | 位宽 | 访问 | 描述 |
7:1 | DATA | 7 | W | 存放下一个将要发送的字节 |
0 | DRW | 1 | W | 当数据传送时,该位保存的是数据最低位 当地址传送时,该位指示读写状态 |
- 接收数据寄存器(RXR):位宽[7:0],偏移量:0x03,复位值:0x00
位域 | 位域名称 | 位宽 | 访问 | 描述 |
7:0 | RXR | 8 | R | 存放最后一个接收到的字节 |
- 命令控制寄存器(CR):位宽[7:0],偏移量:0x04,复位值:0x00
位域 | 位域名称 | 位宽 | 访问 | 描述 |
7 | STA | 1 | W | 产生START信号 |
6 | STO | 1 | W | 产生STOP信号 |
5 | RD | 1 | W | 产生读信号 |
4 | WR | 1 | W | 产生写信号 |
3 | ACK | 1 | W | 产生应答信号 |
2:1 | Reserved | 2 | W | 保留 |
0 | IACK | 1 | W | 产生中断应答信号 |
- 状态寄存器(SR):位宽[7:0],偏移量:0x04,复位值:0x00
位域 | 位域名称 | 位宽 | 访问 | 描述 |
7 | RxACK | 1 | R | 收到应答信号 0收到应答信号 1没收到应答信号 |
6 | Busy | 1 | R | i2c总线忙标志 0总线在闲 1总线在忙 |
5 | AL | 1 | R | i2c核失去i2c总线控制权时,该位置为1 |
4:2 | Reserved | 3 | R | 保留 |
1 | TIP | 1 | R | 指示传输过程 0表示数据传输完毕 1表示正在数据数据 |
0 | IF | 1 | R | 中断标志位,一个数据传输完,或另一个器件发起数据传输,该位置为1 |
对应上方的命令控制寄存器,对控制指令的编码
/*control*/
#define I2C_C_START 0x80
#define I2C_C_STOP 0x40
#define I2C_C_READ 0x20
#define I2C_C_WRITE 0x10
#define I2C_C_WACK 0x8
#define I2C_C_IACK 0x1
对应上方的状态寄存器,对状态指令的编码
/*status*/
#define I2C_S_RNOACK 0x80
#define I2C_S_BUSY 0x40
#define I2C_S_RUN 0x2
#define I2C_S_IF 0x1