Alloy
Advanced Member level 4
Hey
This is reading array from 24 EEPROMs (I2C protocol).
This code is working for me, but I'm asking how to improve it, well, could it be faster, or have some error checking?
This is reading array from 24 EEPROMs (I2C protocol).
This code is working for me, but I'm asking how to improve it, well, could it be faster, or have some error checking?
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 char str[16]; void I2C_Read_Array(int devAdr, unsigned char *o, int s, unsigned char adr0) { int i; for(i = 0; i < s; i++) { I2C1_Start(); // issue I2C start signal I2C1_Wr(devAdr); // send byte via I2C (device address + W) I2C1_Wr(adr0+i); I2C1_Wr(0x00); // second address part? I2C1_Repeated_Start(); // issue I2C signal repeated start I2C1_Wr(devAdr+1); // send byte (device address + R) o[i] = I2C1_Rd(0u); // Read the data (NO acknowledge) I2C1_Stop(); // issue I2C stop signal Delay_10ms(); } } void I2C_Write_Array(int devAdr, unsigned char *o, int s, unsigned char adr0) { int i; for(i = 0; i < s; i++) { I2C1_Start(); // issue I2C start signal I2C1_Wr(devAdr); // send byte via I2C (device address + W) I2C1_Wr(adr0+i); /// adr lo I2C1_Wr(0x00); // second address part? I2C1_Wr(o[i]); // send data (data to be written) I2C1_Stop(); // issue I2C stop signal Delay_10ms(); } } void I2C_Test_Array() { unsigned char ar[4]; int i; I2C_Read_Array(0xA2,ar,sizeof(ar),0); ar[0] += 1; ar[1] += 2; ar[2] += 3; ar[3] += 4; I2C_Write_Array(0xA2,ar,sizeof(ar),0); for(i = 0; i < sizeof(ar); i++) { IntToStr(ar[i],str); UART_Write_Text(str); } UART_Write_Text("..."); }