void I2CStart(void) //开始信号
{
CLK_H;
DIO_H; //5us
DELAY_US(6);
DIO_L;
}
void I2Cask(void) //ACK信号
{
EALLOW;
GpioCtrlRegs.GPBDIR.bit.GPIO32=0;// input
//GpioCtrlRegs.GPBPUD.bit.GPIO32=1;// Pullup's enabled
EDIS;
Uint16 timeout = 1;
CLK_H;
DELAY_US(4);
CLK_L;
while(SDA &&(timeout<=100))
{
timeout++;
}
DELAY_US(4);
CLK_L;
}
//停止信号
void I2CStop(void) //停止信号
{
CLK_H;
DIO_L;
DELAY_US(4);
DIO_H;
}
//发送一个字节
void I2CWrByte(Uint16 oneByte) //写一个字节高位在前,低位在后
{
unsigned char i;
EALLOW;
GpioCtrlRegs.GPBDIR.bit.GPIO32=1;// output
GpioCtrlRegs.GPBPUD.bit.GPIO32=1;// Pullup's enabled
EDIS;
CLK_L;
DELAY_US(2);
for(i=0;i<8;i++)
{
if(oneByte & 0x0080)
{
SDA=1;
}
else
{
SDA=0;
}
oneByte = oneByte<<1;
CLK_L;
DELAY_US(4);
CLK_H;
DELAY_US(4);
CLK_L;
}
}
51程序
void I2CStart(void) //开始信号
{
CLK_H;
DIO_H; //5ms
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
DIO_L;
}
void I2Cask(void) //ACK信号
{
uchar timeout = 1;
CLK_H;
_nop_();
_nop_();
_nop_();
CLK_L;
while((DIO)&&(timeout<=100))
{
timeout++;
}
_nop_();
_nop_();
_nop_();
CLK_L;
}
void I2CStop(void) //停止信号
{
CLK_H;
DIO_L;
_nop_();
_nop_();
_nop_();
DIO_H;
}
void I2CWrByte(uchar oneByte) //写一个字节高位在前,低位在后
{
uchar i;
CLK_L;
_nop_();
for(i=0;i<8;i++)
{
oneByte = oneByte<<1;
DIO = CY;
CLK_L;
_nop_();
_nop_();
_nop_();
CLK_H;
_nop_();
_nop_();
_nop_();
CLK_L;
}
}
按照51单片机修改的DSP程序,可是为什么时序不对呢,响应信号中SDA一直为高,请问该怎么修改??
mangui zhang:
这个我觉得参考单片机的没什么意思
重要的是你配置好C2000的IIC接口