This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28335 IIC该如何配置?

Other Parts Discussed in Thread: PCF8574

现在在f28335上用PCF8574扩展IO口,上拉电阻也弄了,ID也反复检查了,但还是调试不通,很着急,希望大家能指导一下,谢谢了,下面是我的代码,大家看一下,是不是哪里配置不正确(另:这段代码运行一次后,在运行第二次、第三次......那个总是提示总线繁忙I2caRegs.I2CSTR.bit.BB 这个位总是1):
#define I2C_SLAVE_ADDR        0x40

void I2CA_Init(void)
{
   I2caRegs.I2CSAR = 0x0040;                // Slave address - EEPROM control code
   #if (CPU_FRQ_150MHZ)             // Default - For 150MHz SYSCLKOUT
        I2caRegs.I2CPSC.all = 14;   // Prescaler - need 7-12 Mhz on module clk (150/15 = 10MHz)
   #endif
   #if (CPU_FRQ_100MHZ)             // For 100 MHz SYSCLKOUT
     I2caRegs.I2CPSC.all = 9;            // Prescaler - need 7-12 Mhz on module clk (100/10 = 10MHz)
   #endif

   I2caRegs.I2CCLKL = 10;                        // NOTE: must be non zero   时钟总线SCL低电平持续时间
   I2caRegs.I2CCLKH = 5;                        // NOTE: must be non zero   时钟总线SCL高电平持续时间
   I2caRegs.I2CIER.all = 0x24;                // Enable SCD & ARDY interrupts

   I2caRegs.I2CMDR.all = 0x0020;        // Take I2C out of reset
                                           // Stop I2C when suspended
   I2caRegs.I2CFFTX.all = 0x6000;        // Enable FIFO mode and TXFIFO
   I2caRegs.I2CFFRX.all = 0x2040;        // Enable RXFIFO, clear RXFFINT,

   return;
}

Uint16 I2cWriteRegister(Uint16 i2cAddr,Uint16 data1,Uint16 data2)
{
          if (I2caRegs.I2CMDR.bit.STP == 1)    //停止条件控制位
           {
              return I2C_STP_NOT_READY_ERROR;
           }
          I2caRegs.I2CSAR = i2cAddr;

          if (I2caRegs.I2CSTR.bit.BB == 1)   //BB =1 总线繁忙,BB = 0 总线空闲
          {
               return I2C_BUS_BUSY_ERROR;
          }
           I2caRegs.I2CCNT = 2;

           // Setup data to send

           I2caRegs.I2CDXR = data1;
           I2caRegs.I2CDXR = data2;
           // Send start as master transmitter
           I2caRegs.I2CMDR.all = 0x6E20;
           DSP28x_usDelay(100000);
           return I2C_SUCCESS;
}
void Write_PCF8574(Uint16 data1,Uint16 data2)
{
        I2cWriteRegister(0x40,data1,data2);
}

void I2C_Pcf()
{

        InitI2CGpio();
        I2CA_Init();

        while(1)
        {
                Write_PCF8574(0x00,0x00);
                DSP28x_usDelay(2000000);
        }

}