概述
在本阶段的工作中,需要实现一个由GPIO模拟的I2C从机工程设计,以前只使用GPIO模拟I2C设计过主机,对于从机的设计,还是首次。下面就对本次工作中从机设计思想做详细记录。
开发平台
THK88
从机通信设计框图
图 1
程序设计与分析
硬件平台的寄存器配置
#define WAIT_IIC_SCL_HIGH while ( !GET_SCL_DAT )
#define WAIT_IIC_SCL_LOW while ( GET_SCL_DAT )
#define WAIT_IIC_SDA_HIGH while ( !GET_SDA_DAT )
#define WAIT_IIC_SDA_LOW while ( GET_SDA_DAT )
#define IIC_WAIT_START WAIT_IIC_SCL_HIGH; WAIT_IIC_SDA_LOW
#define IIC_WAIT_STOP WAIT_IIC_SCL_LOW; SDA_IN; WAIT_IIC_SCL_HIGH; WAIT_IIC_SDA_HIGH
#define IIC_SLAVE_SEND_LOW WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_LOW; WAIT_IIC_SCL_HIGH
#define IIC_SLAVE_SEND_HIGH WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_HIGH; WAIT_IIC_SCL_HIGH
#define IIC_SLAVE_SEND_ACK IIC_SLAVE_SEND_LOW
#define IIC_SLAVE_SEND_NAK IIC_SLAVE_SEND_HIGH
初始化
void iic_init(void) // 完成GPIO作为I2C的初始化
完成GPIO时钟寄存机配置等功能。
接收地址以及读写命令模块
for(bitcount = 0; bitcount < 7; bitcount ++)
{
WAIT_IIC_SCL_LOW;
WAIT_IIC_SCL_HIGH;
iic_slv