Subversion Repositories NaviCtrl

Rev

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