- void iic_master_init()
- {
- //P3M0 |= 0x0c; P3M1 |= 0x0c; //开漏输出:P3_2和P3_3 (I2C引脚在空闲状态下电压为0.1v左右)
- P3M0 &= ~0x0c; P3M1 &= ~0x0c; //准双向IO:P3_2和P3_3 (I2C引脚在空闲状态下电压为3.3v左右)
- P3PU |= 0x0c; //使能P3_2和P3_3的上拉电阻
- P_SW2 &= (~0x30); //I2C: I2CSCL(P3.2), I2CSDA(P3.3)
- I2CCFG = 0xe0; //使能IIC主机模式
- I2CMSST = 0x00; //IIC主机状态寄存器清零
- EA = 1;
- }
复制代码
把I2C引脚改成“准双向IO”后,引脚在空闲状态下的电压是高电平了。这至少从空闲状态的角度是正确的了。
但是在发送START命令后,I2CMSST的中断位仍然始终为0. 此时测量I2C引脚电压,仍然是高电平。说明I2C控制器确实没有执行START命令。代码如下:
- void hardiic_wait()
- {
- while(!(I2CMSST &0x40));
- I2CMSST &= ~0x40;
- }
- void hardiic_start()
- {
- I2CMSCR = 0x01; //发送START命令
- uart1_putstr("Test5\r\n");
- hardiic_wait();
- uart1_putstr("Test3\r\n");
- }
复制代码
|