Hi,
my I2C project :
(1) when master(MCU) is writting data to slave , and slave can receive correct .
(2) but master is reading data from slave,and slave can not send correct data.
void I2CA_Init(void) { EALLOW; // // �Լ��ĵ�ַ // I2caRegs.I2COAR = 0x0001; // // Slave address - EEPROM control code // ��EEPROM���ݱ�����ʾ����0xA0��Ҫ�Ѷ�дλȥ���������1λ // //I2caRegs.I2CSAR = 0x0050; // // I2CCLK = SYSCLK/(I2CPSC+1) // I2Cϵͳʱ�ӵ�����Ƶ�� = 40MHz / (3 + 1) // I2caRegs.I2CPSC.all = 3; // Prescaler - need 7-12 Mhz on module clk // // ����SCLʱ�Ӹߵ͵�ƽ��ռ�ձ� // I2caRegs.I2CCLKL = 495; // NOTE: must be non zero��ʱ�ӵĵ͵�ƽռ���� I2caRegs.I2CCLKH = 495; // NOTE: must be non zero��ʱ�ӵĸߵ�ƽռ���� // // �����жϷ�ʽ // //I2caRegs.I2CIER.all = 0x24; // Enable SCD & ARDY interrupts I2caRegs.I2CIER.bit.SCD = 1; I2caRegs.I2CIER.bit.XRDY = 1; I2caRegs.I2CIER.bit.RRDY = 1; I2caRegs.I2CIER.bit.ARDY = 1; I2caRegs.I2CIER.bit.AAS = 1; I2caRegs.I2CMDR.all = 0x0020; //I2caRegs.I2CEMDR.all = 0; // // GPIO���� // //GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // Asynch input GPIO32 (SDAA) //GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Asynch input GPIO33 (SCLA) GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // I2CSDA GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // I2CSCL PieVectTable.I2CINT1A = &I2CIsr; // Enable interrupts required for this example // Enable I2C interrupt 1 in the PIE: Group 8 interrupt 1 PieCtrlRegs.PIEIER8.bit.INTx1 = 1; // Enable CPU INT8 which is connected to PIE group 8 IER |= M_INT8; EDIS; } interrupt void I2CIsr(void) // I2C-A { Uint16 IntSource = 0; // // Read interrupt source // IntSource = I2caRegs.I2CISRC.all; if(IntSource == I2C_AAS_ISRC) { } else if(IntSource == I2C_TX_ISRC) { I2caRegs.I2CDXR = 10; } else if(IntSource == I2C_RX_ISRC) { CommSlave.Buffer[CommSlave.Unit.bit.RecvNum].bit.RecvBuf = I2caRegs.I2CDRR; if(CommSlave.Unit.bit.RecvNum < sizeof(CommSlave.Buffer)) { CommSlave.Unit.bit.RecvNum++; } CommSlave.Unit.bit.RecvFlag = 1; CommSlave.Unit.bit.RecvCompleteTime = 0; } PieCtrlRegs.PIEACK.all = PIEACK_GROUP8; }

thanks!