Subversion Repositories NaviCtrl

Rev

Rev 360 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 360 Rev 470
Line 54... Line 54...
54
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
54
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
55
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
55
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56
#include <string.h>
56
#include <string.h>
57
#include <stdio.h>
57
#include <stdio.h>
58
#include "91x_lib.h"
58
#include "91x_lib.h"
59
#include "i2c.h"
59
#include "i2c1.h"
60
#include "uart1.h"
60
#include "uart1.h"
61
#include "timer1.h"
61
#include "timer1.h"
62
#include "eeprom.h"
62
#include "eeprom.h"
63
#include "led.h"
63
#include "led.h"
Line 99... Line 99...
99
        if(((u32)Address + (u32)DataLen) >= (EEPROM_SIZE - 1))
99
        if(((u32)Address + (u32)DataLen) >= (EEPROM_SIZE - 1))
100
        {
100
        {
101
                retval = EEPROM_ERROR_OUT_OF_ADDRESS_RANGE;
101
                retval = EEPROM_ERROR_OUT_OF_ADDRESS_RANGE;
102
                return(retval);
102
                return(retval);
103
        }
103
        }
104
        if((DataLen+2) > I2C_BUFFER_LEN)
104
        if((DataLen+2) > I2C1_BUFFER_LEN)
105
        {
105
        {
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_IDLE_TIMEOUT;
111
                if(!I2C1_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
                I2C1_Buffer[TxBytes++] = (u8)(0x00FF & (Address>>8));
116
                I2C_Buffer[TxBytes++] = (u8)(0x00FF & Address);
116
                I2C1_Buffer[TxBytes++] = (u8)(0x00FF & Address);
117
                if(Direction == EEPROM_WRITE)
117
                if(Direction == EEPROM_WRITE)
118
                {       // copy data to i2c transfer buffer
118
                {       // copy data to i2c transfer buffer
119
                        for(i = 0; i<DataLen;i++)
119
                        for(i = 0; i<DataLen;i++)
120
                        {
120
                        {
121
                                I2C_Buffer[TxBytes++] = pData[i];
121
                                I2C1_Buffer[TxBytes++] = pData[i];
122
                        }
122
                        }
123
                        // prepare pointer to rx data
123
                        // prepare pointer to rx data
124
                        EEPROM_pData = 0;
124
                        EEPROM_pData = 0;
125
                        EEPROM_DataLen = 0;
125
                        EEPROM_DataLen = 0;
126
                        // start transmission
126
                        // start transmission
127
                        if(!I2C_Transmission(EEPROM_I2C_ADDRESS, TxBytes, 0, 0))
127
                        if(!I2C1_Transmission(EEPROM_I2C_ADDRESS, TxBytes, 0, 0))
128
                        {
128
                        {
129
                                return(retval);
129
                                return(retval);
130
                        }
130
                        }
131
                }
131
                }
132
                else // Direction == EEPROM_READ
132
                else // Direction == EEPROM_READ
133
                {
133
                {
134
                        // prepare pointer to rx data
134
                        // prepare pointer to rx data
135
                        EEPROM_pData = pData;
135
                        EEPROM_pData = pData;
136
                        EEPROM_DataLen = DataLen;
136
                        EEPROM_DataLen = DataLen;
137
                        // start transmission
137
                        // start transmission
138
                        if(!I2C_Transmission(EEPROM_I2C_ADDRESS, TxBytes, &EEPROM_RxDataHandler, DataLen))
138
                        if(!I2C1_Transmission(EEPROM_I2C_ADDRESS, TxBytes, &EEPROM_RxDataHandler, DataLen))
139
                        {
139
                        {
140
                                return(retval);
140
                                return(retval);
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(I2C1_WaitForEndOfTransmission(I2C_TRANSFER_TIMEOUT))
145
                {
145
                {
146
                        if(I2C_Error == I2C_ERROR_NONE) return(EEPROM_SUCCESS);
146
                        if(I2C1_Error == I2C_ERROR_NONE) return(EEPROM_SUCCESS);
147
                        else retval = EEPROM_DATA_TRANSFER_INCOMPLETE;
147
                        else retval = EEPROM_DATA_TRANSFER_INCOMPLETE;
148
                }
148
                }
149
                else// i2c transfer timed out
149
                else// i2c transfer timed out
150
                {
150
                {
151
                        return(EEPROM_ERROR_I2C_TRANSFER_TIMEOUT);     
151
                        return(EEPROM_ERROR_I2C_TRANSFER_TIMEOUT);     
Line 188... Line 188...
188
        u16 AdrOffset = 0;
188
        u16 AdrOffset = 0;
189
        u16 RxLen;
189
        u16 RxLen;
Line 190... Line 190...
190
 
190
 
191
        while(DataLen > 0)
191
        while(DataLen > 0)
192
        {
192
        {
193
                if(DataLen > I2C_BUFFER_LEN) RxLen = I2C_BUFFER_LEN;
193
                if(DataLen > I2C1_BUFFER_LEN) RxLen = I2C1_BUFFER_LEN;
Line 194... Line 194...
194
                else RxLen = DataLen;
194
                else RxLen = DataLen;
195
           
195
           
196
                retval = EEPROM_Transfer(EEPROM_READ, Address+AdrOffset, &(pData[AdrOffset]), RxLen);
196
                retval = EEPROM_Transfer(EEPROM_READ, Address+AdrOffset, &(pData[AdrOffset]), RxLen);