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.

config MCU as I2C slave and it cannot send data

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!