写部分,
/*------------------- R E A D A T 2 4 C 2 5 6 -------------------- 【功能】:**** 【参数】:**** 【返回】:**** 【说明】:**** --------------作者:**** 2009年5月15日12:51:22-------------------------*/ void ReadAT24C256(u32 addr, u8 *ptr, u32 len) { // int i; #ifndef I2C_REMMAP I2cInit(); #endif I2C_AcknowledgePolling(); I2C_GenerateSTART(I2C1,ENABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)!=SUCCESS); I2C_Send7bitAddress(I2C1,AT24_DEVICE_ADDR,I2C_Direction_Transmitter); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)!=SUCCESS); I2C_SendData(I2C1,(addr>>8)); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)!=SUCCESS); I2C_SendData(I2C1,(addr&0xff)); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)!=SUCCESS); I2C_GenerateSTART(I2C1,ENABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)!=SUCCESS); I2C_Send7bitAddress(I2C1,AT24_DEVICE_ADDR,I2C_Direction_Receiver); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)!=SUCCESS); for ( ; len!=1; len--) { I2C_AcknowledgeConfig(I2C1,ENABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)!=SUCCESS); *(ptr++) = I2C_ReceiveData(I2C1); } I2C_AcknowledgeConfig(I2C1,DISABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)!=SUCCESS); *(ptr++)=I2C_ReceiveData(I2C1); I2C_GenerateSTOP(I2C1,ENABLE); #if 0 if(len>=1){ for(i=0;i<len-1;i++){ I2C_AcknowledgeConfig(I2C1,ENABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)!=SUCCESS); *ptr=I2C_ReceiveData(I2C1); ptr++; } } I2C_AcknowledgeConfig(I2C1,DISABLE); while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)!=SUCCESS); *ptr=I2C_ReceiveData(I2C1); I2C_GenerateSTOP(I2C1,ENABLE); #endif
#ifndef I2C_REMMAP I2C_Cmd(I2C1,DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,DISABLE); FSMC_SRAM_Init(); #endif }
|
|