Rev 482 | Rev 489 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 482 | Rev 483 | ||
---|---|---|---|
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 64... | Line -... | ||
64 | - | ||
65 | 64 | ||
66 | - | ||
67 | // The EEPROM M24C64 (64k) ist connected via I2C1 interface to the controller. |
- | |
68 | #define EEPROM_I2C I2C1 |
65 | |
Line 69... | Line 66... | ||
69 | 66 | // The EEPROM M24C64 (64k) ist connected via I2C1 interface to the controller. |
|
70 | // The E0, E2, E3 pins are set to low. Therefore the slave adressbits b3, b2, b1 are 0. |
67 | // The E0, E2, E3 pins are set to low. Therefore the slave adressbits b3, b2, b1 are 0. |
71 | 68 | ||
Line 93... | Line 90... | ||
93 | } |
90 | } |
Line 94... | Line 91... | ||
94 | 91 | ||
95 | // ---------------------------------------------------------------------------------------- |
92 | // ---------------------------------------------------------------------------------------- |
96 | EEPROM_Result_t EEPROM_Transfer(u8 Direction, u16 Address, u8 *pData, u16 DataLen) |
93 | EEPROM_Result_t EEPROM_Transfer(u8 Direction, u16 Address, u8 *pData, u16 DataLen) |
97 | { |
94 | { |
98 | u16 i; |
95 | u16 i, TxBytes = 0; |
99 | u8 retry = 0; |
96 | u8 retry = 0; |
Line 100... | Line 97... | ||
100 | EEPROM_Result_t retval = EEPROM_ERROR_UNKNOWN; |
97 | EEPROM_Result_t retval = EEPROM_ERROR_UNKNOWN; |
101 | 98 | ||
102 | if(((u32)Address + (u32)DataLen) >= (EEPROM_SIZE - 1)) |
99 | if(((u32)Address + (u32)DataLen) >= (EEPROM_SIZE - 1)) |
103 | { |
100 | { |
104 | retval = EEPROM_ERROR_OUT_OF_ADDRESS_RANGE; |
101 | retval = EEPROM_ERROR_OUT_OF_ADDRESS_RANGE; |
105 | return(retval); |
102 | return(retval); |
106 | } |
103 | } |
107 | if((DataLen+2) > I2C_BUFFER_LEN) |
104 | if((DataLen+2) > I2C1_BUFFER_LEN) |
108 | { |
105 | { |
109 | retval = EEPROM_I2C_BUFFER_OVERRUN; |
106 | retval = EEPROM_I2C_BUFFER_OVERRUN; |
110 | return(retval); |
107 | return(retval); |
111 | } |
108 | } |
112 | do |
109 | do |
113 | { |
110 | { |
114 | if(!I2CBus_LockBuffer(EEPROM_I2C, I2C_IDLE_TIMEOUT)) return EEPROM_ERROR_I2C_IDLE_TIMEOUT; |
111 | if(!I2C1_LockBuffer(I2C_IDLE_TIMEOUT)) return EEPROM_ERROR_I2C_IDLE_TIMEOUT; |
115 | // buffer is now locked |
- | |
116 | u8 TxBytes = 0; |
112 | // buffer is now locked |
117 | u8 TxData[255]; |
113 | TxBytes = 0; |
118 | // transmitt address |
114 | // transmitt address |
119 | TxData[TxBytes++] = (u8)(0x00FF & (Address>>8)); |
115 | I2C1_Buffer[TxBytes++] = (u8)(0x00FF & (Address>>8)); |
120 | TxData[TxBytes++] = (u8)(0x00FF & Address); |
116 | I2C1_Buffer[TxBytes++] = (u8)(0x00FF & Address); |
121 | if(Direction == EEPROM_WRITE) |
117 | if(Direction == EEPROM_WRITE) |
122 | { // copy data to i2c transfer buffer |
118 | { // copy data to i2c transfer buffer |
123 | for(i = 0; i<DataLen;i++) |
119 | for(i = 0; i<DataLen;i++) |
124 | { |
120 | { |
125 | TxData[TxBytes++] = pData[i]; |
121 | I2C1_Buffer[TxBytes++] = pData[i]; |
126 | } |
122 | } |
127 | // prepare pointer to rx data |
123 | // prepare pointer to rx data |
128 | EEPROM_pData = 0; |
124 | EEPROM_pData = 0; |
129 | EEPROM_DataLen = 0; |
125 | EEPROM_DataLen = 0; |
130 | // start transmission |
126 | // start transmission |
131 | if(!I2CBus_Transmission(EEPROM_I2C, EEPROM_I2C_ADDRESS, TxData, TxBytes, 0, 0)) |
127 | if(!I2C1_Transmission(EEPROM_I2C_ADDRESS, TxBytes, 0, 0)) |
132 | { |
128 | { |
133 | return(retval); |
129 | return(retval); |
134 | } |
130 | } |
135 | } |
131 | } |
136 | else // Direction == EEPROM_READ |
132 | else // Direction == EEPROM_READ |
137 | { |
133 | { |
138 | // prepare pointer to rx data |
134 | // prepare pointer to rx data |
139 | EEPROM_pData = pData; |
135 | EEPROM_pData = pData; |
140 | EEPROM_DataLen = DataLen; |
136 | EEPROM_DataLen = DataLen; |
141 | // start transmission |
137 | // start transmission |
142 | if(!I2CBus_Transmission(EEPROM_I2C, EEPROM_I2C_ADDRESS, TxData, TxBytes, &EEPROM_RxDataHandler, DataLen)) |
138 | if(!I2C1_Transmission(EEPROM_I2C_ADDRESS, TxBytes, &EEPROM_RxDataHandler, DataLen)) |
143 | { |
139 | { |
144 | return(retval); |
140 | return(retval); |
145 | } |
141 | } |
146 | } |
142 | } |
147 | //wait for end of this transfer |
143 | //wait for end of this transfer |
148 | if(I2CBus_WaitForEndOfTransmission(EEPROM_I2C, I2C_TRANSFER_TIMEOUT)) |
144 | if(I2C1_WaitForEndOfTransmission(I2C_TRANSFER_TIMEOUT)) |
149 | { |
145 | { |
150 | if(I2CBus(EEPROM_I2C)->Error == I2C_ERROR_NONE) return(EEPROM_SUCCESS); |
146 | if(I2C1_Error == I2C_ERROR_NONE) return(EEPROM_SUCCESS); |
151 | else retval = EEPROM_DATA_TRANSFER_INCOMPLETE; |
147 | else retval = EEPROM_DATA_TRANSFER_INCOMPLETE; |
152 | } |
148 | } |
153 | else// i2c transfer timed out |
149 | else// i2c transfer timed out |
Line 192... | Line 188... | ||
192 | u16 AdrOffset = 0; |
188 | u16 AdrOffset = 0; |
193 | u16 RxLen; |
189 | u16 RxLen; |
Line 194... | Line 190... | ||
194 | 190 | ||
195 | while(DataLen > 0) |
191 | while(DataLen > 0) |
196 | { |
192 | { |
197 | if(DataLen > I2C_BUFFER_LEN) RxLen = I2C_BUFFER_LEN; |
193 | if(DataLen > I2C1_BUFFER_LEN) RxLen = I2C1_BUFFER_LEN; |
Line 198... | Line 194... | ||
198 | else RxLen = DataLen; |
194 | else RxLen = DataLen; |
199 | 195 | ||
200 | retval = EEPROM_Transfer(EEPROM_READ, Address+AdrOffset, &(pData[AdrOffset]), RxLen); |
196 | retval = EEPROM_Transfer(EEPROM_READ, Address+AdrOffset, &(pData[AdrOffset]), RxLen); |