阻塞式写入,- while(I2C1->STS2 & I2C_STS2_BUSY); //等待总线空闲
- I2C1->CTRL1 |= I2C_CTRL1_STARTGEN ; //产生起始信号
- while(!(I2C1->STS1 & I2C_STS1_STARTBF));//起始信号已发出
- I2C1->DAT = WD_ADDR; //要读写器件的地址
- while(!(I2C1->STS1 & I2C_STS1_ADDRF)); //地址发送结束
- temp = I2C1->STS2; //读取一次清除标志位
- I2C1->DAT = Addr>>8; //地址高字节
- while(!(I2C1->STS1 & I2C_STS1_TXDATE)); //字节发送完毕
- I2C1->DAT = Addr & 0x00FF;
- while(!(I2C1->STS1 & I2C_STS1_TXDATE));
- for(i=0; i<Num; i++)
- {
- I2C1->DAT = *(pBuffer+i);
- while(!(I2C1->STS1 & I2C_STS1_TXDATE));
- }
- I2C1->CTRL1 |= I2C_CTRL1_STOPGEN; //发送停止位
稳定卡死在几个while处,但只要增加一条NOP之类的无关指令就不会卡死了。
|