freedomhit

I2C从机程序

0
阅读(4083)

 

#include

void IRQ_Handler() __irq;

int i = 0, dat[9];


int main()
{
	// I2C on P1.0 and P1.1
 	GP1CON = 0x22;

	IRQEN = 0x200;					// I2C0 Slave Interupt
	
	I2C0CFG = 0x01;		  			// Slave Enable
	I2C0ID0 = 0xA0;					// Slave ID
	I2C0STX = 0x77;
	
	
	while (1)
	{
	}; 

 	return 0;
}




void IRQ_Handler() __irq
{
	// Slave Recieve
	if ((I2C0SSTA & 0x08)==0x08)   // Slave Recieve IRQ
	{
	 	   dat[i] = I2C0SRX;
		   i++;
	}

	
	// Slave Transmit
	if ((I2C0SSTA & 0x04)==0x04)   // Slave Transmit IRQ
	{
		 if(i > 4) 			 // Resetting value of i if it has been incremented by RX
		 {
		 	i = 0;
		 }
		 
		 i++;
		 switch (i)
		 {
			case 1:
				I2C0STX = 0x55;
			break;

			case 2:						
				I2C0STX = 0x33;
			break;

			case 3:						
				I2C0STX = 0xAA;
			break;

			case 4:						
				I2C0STX = 0x11;
			break;
		};
	}
}