Rev 252 | Rev 256 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 252 | Rev 254 | ||
---|---|---|---|
Line 70... | Line 70... | ||
70 | #define EEPROM_SIZE 65536L // 64k bytes |
70 | #define EEPROM_SIZE 65536L // 64k bytes |
71 | #define EEPROM_WRITE 1 |
71 | #define EEPROM_WRITE 1 |
72 | #define EEPROM_READ 0 |
72 | #define EEPROM_READ 0 |
Line 73... | Line 73... | ||
73 | 73 | ||
74 | // timing |
74 | // timing |
75 | #define I2C_IDLE_TIMEOUT 50 // 50 ms |
75 | #define I2C_IDLE_TIMEOUT 150 // 150 ms |
76 | #define I2C_TRANSFER_TIMEOUT 50 // 50 ms |
76 | #define I2C_TRANSFER_TIMEOUT 150 // 150 ms |
Line 77... | Line 77... | ||
77 | #define I2C_ACCESS_RETRYS 20 // retry 20 times |
77 | #define I2C_ACCESS_RETRYS 20 // retry 20 times |
78 | 78 | ||
79 | // globals for rx handler |
79 | // globals for rx handler |
Line 80... | Line 80... | ||
80 | u8 *EEPROM_pData = 0; |
80 | volatile u8 *EEPROM_pData = 0; |
81 | u16 EEPROM_DataLen = 0; |
81 | volatile u16 EEPROM_DataLen = 0; |
82 | 82 | ||
83 | // rx data handler for eeprom data read access |
83 | // rx data handler for eeprom data read access |
84 | void EEPROM_RxDataHandler(u8* pRxBuffer, u8 RxBufferSize) |
84 | void EEPROM_RxDataHandler(u8* pRxBuffer, u8 RxBufferSize) |
85 | { // if number of byte are matching |
85 | { // if number of byte are matching |
86 | if(RxBufferSize == EEPROM_DataLen) |
86 | if((RxBufferSize == EEPROM_DataLen)) |
87 | { //copy data from primary buffer to target buffer |
87 | { //copy data from primary buffer to target buffer |
Line 88... | Line 88... | ||
88 | if(EEPROM_pData) memcpy(EEPROM_pData, pRxBuffer, EEPROM_DataLen); |
88 | if(EEPROM_pData) memcpy((u8*)EEPROM_pData, pRxBuffer, EEPROM_DataLen); |
89 | } |
89 | } |
Line 106... | Line 106... | ||
106 | retval = EEPROM_I2C_BUFFER_OVERRUN; |
106 | retval = EEPROM_I2C_BUFFER_OVERRUN; |
107 | return(retval); |
107 | return(retval); |
108 | } |
108 | } |
109 | do |
109 | do |
110 | { |
110 | { |
111 | if(!I2C_LockBuffer(I2C_IDLE_TIMEOUT)) return EEPROM_ERROR_I2C_TRANSFER_TIMEOUT; |
111 | if(!I2C_LockBuffer(I2C_IDLE_TIMEOUT)) return EEPROM_ERROR_I2C_IDLE_TIMEOUT; |
112 | // buffer is now locked |
112 | // buffer is now locked |
113 | TxBytes = 0; |
113 | TxBytes = 0; |
114 | // transmitt address |
114 | // transmitt address |
115 | I2C_Buffer[TxBytes++] = (u8)(0x00FF & (Address>>8)); |
115 | I2C_Buffer[TxBytes++] = (u8)(0x00FF & (Address>>8)); |
116 | I2C_Buffer[TxBytes++] = (u8)(0x00FF & Address); |
116 | I2C_Buffer[TxBytes++] = (u8)(0x00FF & Address); |
Line 141... | Line 141... | ||
141 | } |
141 | } |
142 | } |
142 | } |
143 | //wait for end of this transfer |
143 | //wait for end of this transfer |
144 | if(I2C_WaitForEndOfTransmission(I2C_TRANSFER_TIMEOUT)) |
144 | if(I2C_WaitForEndOfTransmission(I2C_TRANSFER_TIMEOUT)) |
145 | { |
145 | { |
- | 146 | DebugOut.Analog[26] = I2C_Error; |
|
146 | if(I2C_Error == I2C_ERROR_NONE) retval = EEPROM_SUCCESS; |
147 | if(I2C_Error == I2C_ERROR_NONE) retval = EEPROM_SUCCESS; |
147 | else retval = EEPROM_ERROR_I2C_TRANSFER_TIMEOUT; |
148 | else retval = EEPROM_ERROR_I2C_TRANSFER_TIMEOUT; |
148 | break; |
149 | break; |
149 | } |
150 | } |
150 | // or retry |
151 | // or retry |