TI中文支持网
TI专业的中文技术问题搜集分享网站

MSPM0G3507: 硬件I2C 发送延迟

Part Number:MSPM0G3507

今天使用硬件I2C,打算写一下poll方式的硬件i2c发送,这边发送100个数据,中间有1.7ms的延迟,总耗时为0.2ms 

时钟频率为32mhz iic速度为100khz,如果使用官方例程的话同样也有1.7ms的延迟,希望有官方可以解答一下。

以及如何避免这个问题。

附代码

int8_t I2C_Send_Poll(I2C_Regs *i2c,uint32_t targetAddr,uint8_t set_reg,uint8_t *buffer,uint16_t count,int8_t use_reg_flag)  //如果返回为-1为异常0为正常
{//可以在这边在加一个计数时间的延迟,有时间在搞吧.int timeout=50000;  //时间延迟函数uint32_t gTxCount=7,toolong=0; //保存一下填充了多少数据到fifo里面//先判断一波长不长如果不长就不进入一直填fifo的程序了if (gTxCount < count) {toolong=1;} else {toolong=0;}if (use_reg_flag) { //如果不使用reg的话DL_I2C_transmitControllerData(i2c, set_reg); //先填充reg到fifo剩下的就无所谓啦!}gTxCount=DL_I2C_fillControllerTXFIFO(i2c, buffer, count); // 填充待发数据到FIFO 同时保存一下已经填充了多少数据进去while (!(DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_IDLE)); // 等待I2C总线空闲DL_I2C_startControllerTransfer(i2c, targetAddr,DL_I2C_CONTROLLER_DIRECTION_TX,count); // 发送数据if (toolong) {while (gTxCount<count) {  //在这里等待,如果没发送完数据就一直填数据进去// if (DL_I2C_getControllerStatus(i2c)&DL_I2C_CONTROLLER_STATUS_ERROR) {//DL_I2C_flushControllerTXFIFO(i2c);//return -1; //上一次地址没有应答// }// if (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_ARBITRATION_LOST) {//DL_I2C_flushControllerTXFIFO(i2c);//return -2;//总线仲裁失败// }if (DL_I2C_isControllerTXFIFOEmpty (i2c)) {gTxCount+=DL_I2C_fillControllerTXFIFO(i2c,&(buffer[gTxCount]), count-gTxCount);//z++;}}}what=gTxCount;while (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS); //等待总线空闲发送成功if (DL_I2C_getControllerStatus(i2c)&DL_I2C_CONTROLLER_STATUS_ERROR) {DL_I2C_flushControllerTXFIFO(i2c);return -1; //上一次地址没有应答}if (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_ARBITRATION_LOST) {DL_I2C_flushControllerTXFIFO(i2c);return -2;//总线仲裁失败}DL_I2C_flushControllerTXFIFO(i2c);return 0;
}

附图,黄色的点为ACK。

使用官方例程

使用我写的函数

叁只小羽:

有人吗

,

叁只小羽:

好吧。。。感觉ti的中文论坛没技术支持

赞(0)
未经允许不得转载:TI中文支持网 » MSPM0G3507: 硬件I2C 发送延迟
分享到: 更多 (0)