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!