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]); } }
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])); } }