帮忙看下这段程序:
/**********************************************************************************
* 名称 :I2C_init
* 功能 :I2C总线的初始化
* 入口参数 :无
* 出口参数 :无
***********************************************************************************/
void I2C_init()
{
*pTWI_CONTROL=_PRESCALE | TWI_ENA; //使能控制器与设置预分频值
*pTWI_CLKDIV=(_CLKHI<<8)|_CLKLOW; //
*pTWI_MASTER_ADDR=IO_EXPAND_ADDR; //需要传输的地址
*pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH; //清空FIFO内数据
asm("ssync;");
*pTWI_FIFO_CTL=0;
asm("ssync;");
//*pTWI_FIFO_CTL=0;
*pTWI_INT_MASK=RCVSERV|XMTSERV|MERR|MCOMP; //使能各中断
}
/**********************************************************************************
* 名称 :I2C_write
* 功能 :I2C总线写操作
* 入口参数 : *TWI_Data_Pointer 需发送的字符串
TWI_TX_Length 发送字符的长度
* 出口参数 :无
***********************************************************************************/
void I2C_write(unsigned char *TWI_Data_Pointer,unsigned short TWI_TX_Length,bool _RESTART)
{
int i;
*pTWI_XMT_DATA8=*(TWI_Data_Pointer++);
*pTWI_MASTER_CTL=TWICOUNT(TWI_TX_Length)|MEN;//|RSTART|TWICOUNT(TWI_TX_Length); //开始传输
//if(_RESTART) //需要在发送数据后接收数据
//{*pTWI_MASTER_CTL|=RSTART;}
//asm("ssync;");
for(i=0;i<(TWI_TX_Length-1);i++)
{
while(*pTWI_FIFO_STAT == XMTSTAT); //等待FIFO空闲!(*pTWI_INT_STAT & XMTSERV)
asm("ssync;");
*pTWI_XMT_DATA8=*(TWI_Data_Pointer++);
asm("ssync;");
*pTWI_INT_STAT=XMTSERV; //W1C清除空闲信息
}
I2C_stop();
}
写I2C时,看不到*pTWI_XMT_DATA8内的数据,是什么原因,而且示波器观察到的是将字数数组的第一个字节发送了两边,地址没有递增?