你好,TI的工程师!
我现在使用ARM单片机的裸机程序驱动TLV320AIC3x,硬件电路连接如下图:
硬件电路已测试供电、复位均正常(有硬件的RC复位,也用了ARM单片机的一个GPIO口复位,上电拉低1ms后拉高,这个复位信号过后测试过运行过程中是一直高正常的)。用示波器测试 SCL SDA有单片机发过来的时序信号,并且已经验证了我的单片机程序可以正常的驱动另外一个I2C接口的从设备芯片(我在我的目标板上飞线到另外的板子上的IIC接口芯片试过,当然从器件地址相应需要修改)。现在的问题是,我在程序里试着用IIC读320寄存器里面的数据,发现读出来的结果是FF,跟没有连接320一样的效果(上拉电阻的效果),改变所读的寄存器的地址,现象是一样的。PS:我是用GPIO口模拟IIC时序的。
下面是我的程序片段:
#define TLV320AIC32_IIC_WR_ADDR 0x30 //TLV320AIC320 IIC写地址
//读函数
void Tlv320aic3x_WriteByte(uint8 DevWrAddr,uint8 MemAddr,uint8 Dat,uint8 Channel)
{
IIC_Start(Channel);
IIC_WriteByte(DevWrAddr,Channel);
IIC_Ack(Channel);
IIC_WriteByte(MemAddr,Channel);
IIC_Ack(Channel);
IIC_WriteByte(Dat,Channel);
IIC_Ack(Channel);
IIC_Stop(Channel);
}
//写函数
uint8 Tlv320aic3x_ReadByte(uint8 DevWrAddr,uint8 MemAddr,uint8 Channel)
{
uint8 temp=0;
IIC_Start(Channel);
IIC_WriteByte(DevWrAddr,Channel);
IIC_Ack(Channel);
IIC_WriteByte(MemAddr,Channel);
IIC_Ack(Channel);
IIC_Start(Channel);
IIC_WriteByte(DevWrAddr|0x01,Channel);
IIC_Ack(Channel);
temp=IIC_ReadByte(Channel); //×?oóò????TDèACK
IIC_Stop(Channel);
return temp;
}
请问是可能的原因是什么呢?是硬件哪里没有设计对,还是软件有什么注意的?谢谢!!!