1.使用寄存器配置来应用IIC通信,流程上和之前的寄存器配置过程类似。
大部分是通过配置主机寄存控制器I2CMSCR 来进行的,I2CMSCR的低四位按照特定要求置为0和1可以实现IIC的启动,停止,发送,接收以及应答。注意这里直接通过赋值来进行,不要通过 |=操作来进行,与或操作多次之后,寄存器低四位都有可能被置为1,这样就不是预期的配置结果了。
2. Wait()函数,和之前一样,I2CMSST的第七位是标志位,可以通过标志位确保IIC的操作执行完成。
3.模拟IIC和硬件IIC的读数据写数据的模块是一样的,启动,停止,发送,接收以及应答函数写完了,就可以按照之前的顺序拼接成,读数据写数据函数。
4.最大的一个区别就是,硬件IIC的接收应答函数RecvACK(),没有返回值。
我最开始按照模拟IIC的形式写,带有返回值(这个命令本身是有返回值的,返回在I2CMSST的最低位引脚上,可以读取的),结果读数据函数读出来的芯片标识是01,不是E7。按例程修改之后就正常了,不知道为什么。
5.初始化函数里面,也要配置寄存器
void IIC_Init(void)
{
P_SW2 |= 0xB0; // EAXFR=1使能访问XFR I2C_S=11把I2C引脚映射到P3.2 P3.3引脚
I2CCFG = 0XFF; //使能I2C功能,单片机工作在主机模式,设置时钟为63
I2CMSST = 0x