Example #1
0
void I2CSlave_RX_test(I2C_TypeDef *I2Cx)
{
	unsigned int rxdata[10] = {0x0};
	unsigned int tempClear = 0x0;
  //unsigned int rxdata = 0x0;
	unsigned int i;
	
	I2CSlave_init(I2Cx);
	for(i=0;i<10;i++)
	{
		I2Cx->IC_DATA_CMD |= 0x100;
	
			while(1)
				{
					 if((I2Cx->IC_RAW_INTR_STAT & 0x0004)==0x0004)
							 break;
				}
				rxdata[i] = I2Cx->IC_DATA_CMD; 
				

	}
	for(i=0;i<10;i++)
	{
		uart_printf("rxdata[%d] = 0x%x\r\n",i,rxdata[i]);
	}

}
Example #2
0
void I2CSlave_Tx_test(I2C_TypeDef *I2Cx)
{
	unsigned int tempClear = 0x0;
  unsigned int rxdata = 0x0;
	unsigned int i;
	
	I2CSlave_init(I2Cx);
	
	for(i=0;i<10;i++)
	{
		while(1)
		{
			if((I2Cx->IC_RAW_INTR_STAT & 0x0020)==0x0020)//slave RD_REQ
			break;
		}
		
		I2Cx->IC_DATA_CMD = 0x78+i;
		tempClear =  I2Cx->IC_CLR_RD_REQ ;
		
		while(1)
		{
				if((I2Cx->IC_RAW_INTR_STAT & 0x0010)==0x0010)//tx_empty=1
				break;
		}
			
	}
	
	while(1)
		{
			if((I2Cx->IC_STATUS & 0x20)==0x20)//MST-ACTIVITY=0 check idle 
            break;
		}
	  while(1)
    {
        if((I2Cx->IC_RAW_INTR_STAT & 0x0200)==0x0200)//stop flag detect
				tempClear = I2Cx->IC_CLR_STOP_DET;  //read this reg clear stop flag
        break;
    }	

	
}
//************************Main関数****************************
int main(void)
{
	//初期化
	timer_pwm_init();
	io_init();
	timer0_init();
	
	//I2CSlaveの初期化
	I2CSlave_init(SLAVE_ADDRESS,INTERRUPT_OFF);
	I2CSlave_setInitEvent(*initHandler);
	I2CSlave_setSendEvent(*sendHandler);
	I2CSlave_setReceiveEvent(*recieveHandler);
	I2CSlave_setStopEvent(*stopHandler);
	
	//割り込み許可
	sei();
	
	while(1){
		//I2C通信
		I2CSlave_com();
		setTergetSpeed(chengeSignalToSpeed(signals[0]),chengeSignalToSpeed(signals[1]));
	}
}