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一直为高,请问该怎么修改??