Rev 251 | Rev 253 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 251 | Rev 252 | ||
---|---|---|---|
Line 161... | Line 161... | ||
161 | } |
161 | } |
Line 162... | Line 162... | ||
162 | 162 | ||
Line 163... | Line 163... | ||
163 | 163 | ||
164 | // ---------------------------------------------------------------------------------------- |
164 | // ---------------------------------------------------------------------------------------- |
- | 165 | ||
- | 166 | u8 HMC5843_GetIdentification(void) |
|
165 | 167 | { |
|
166 | void HMC5843_GetIdentification(void) |
168 | u8 retval = 0; |
167 | { |
169 | // try to catch the i2c buffer within 100 ms timeout |
168 | if(I2C_LockBuffer(100)) |
170 | if(I2C_LockBuffer(100)) |
169 | { |
171 | { |
170 | u16 TxBytes = 0; |
172 | u16 TxBytes = 0; |
171 | HMC5843_Identification.A = 0xFF; |
173 | HMC5843_Identification.A = 0xFF; |
172 | HMC5843_Identification.B = 0xFF; |
174 | HMC5843_Identification.B = 0xFF; |
173 | HMC5843_Identification.C = 0xFF; |
175 | HMC5843_Identification.C = 0xFF; |
174 | I2C_Buffer[TxBytes++] = REGISTER_IDA; |
176 | I2C_Buffer[TxBytes++] = REGISTER_IDA; |
175 | // initiate transmission |
177 | // initiate transmission |
- | 178 | if(I2C_Transmission(HMC5843_SLAVE_ADDRESS, TxBytes, &HMC5843_UpdateIdentification, sizeof(HMC5843_Identification))) |
|
- | 179 | { |
|
- | 180 | if(I2C_WaitForEndOfTransmission(100)) |
|
176 | if(I2C_Transmission(HMC5843_SLAVE_ADDRESS, TxBytes, &HMC5843_UpdateIdentification, sizeof(HMC5843_Identification))) |
181 | { |
177 | { |
182 | if(I2C_Error == I2C_ERROR_NONE) retval = 1; |
- | 183 | } |
|
178 | I2C_WaitForEndOfTransmission(100); |
184 | } |
Line 179... | Line 185... | ||
179 | } |
185 | } |
180 | } |
186 | return(retval); |
181 | } |
187 | } |
182 | 188 | ||
- | 189 | // ---------------------------------------------------------------------------------------- |
|
183 | // ---------------------------------------------------------------------------------------- |
190 | u8 HMC5843_SetConfiguration(u8 cra, u8 crb, u8 mode) |
184 | u8 HMC5843_SetConfiguration(u8 cra, u8 crb, u8 mode) |
191 | { |
185 | { |
192 | u8 retval = 0; |
186 | u8 retval = 0; |
193 | // tra to catch the I2c buffer within 100 ms timeout |
187 | if(I2C_LockBuffer(100)) |
194 | if(I2C_LockBuffer(100)) |
188 | { |
195 | { |
189 | u16 TxBytes = 0; |
196 | u16 TxBytes = 0; |
190 | I2C_Buffer[TxBytes++] = REGISTER_CRA; |
197 | I2C_Buffer[TxBytes++] = REGISTER_CRA; |
191 | I2C_Buffer[TxBytes++] = cra; |
198 | I2C_Buffer[TxBytes++] = cra; |
192 | I2C_Buffer[TxBytes++] = crb; |
199 | I2C_Buffer[TxBytes++] = crb; |
193 | I2C_Buffer[TxBytes++] = mode; |
200 | I2C_Buffer[TxBytes++] = mode; |
- | 201 | // initiate transmission |
|
- | 202 | if(I2C_Transmission(HMC5843_SLAVE_ADDRESS, TxBytes, NULL, 0)) |
|
- | 203 | { |
|
194 | // initiate transmission |
204 | if(I2C_WaitForEndOfTransmission(50)) |
195 | if(I2C_Transmission(HMC5843_SLAVE_ADDRESS, TxBytes, NULL, 0)) |
205 | { |
196 | { |
206 | if(I2C_Error == I2C_ERROR_NONE) retval = 1; |
197 | retval = I2C_WaitForEndOfTransmission(50); |
207 | } |
Line 198... | Line 208... | ||
198 | } |
208 | } |
199 | } |
209 | } |
200 | return(retval); |
210 | return(retval); |
- | 211 | } |
|
201 | } |
212 | |
202 | 213 | //---------------------------------------------------------------- |
|
203 | //---------------------------------------------------------------- |
214 | void HMC5843_GetMagVector(void) |
204 | void HMC5843_GetMagVector(void) |
215 | { |
205 | { |
216 | // try to catch the I2C buffer within 0 ms |
206 | if(I2C_LockBuffer(100)) |
217 | if(I2C_LockBuffer(0)) |
Line 293... | Line 304... | ||
293 | 304 | ||
294 | //---------------------------------------------------------------- |
305 | //---------------------------------------------------------------- |
295 | u8 HMC5843_Init(void) |
306 | u8 HMC5843_Init(void) |
296 | { |
307 | { |
- | 308 | u8 msg[64]; |
|
297 | u8 msg[64]; |
309 | u8 retval = 0; |
Line 298... | Line 310... | ||
298 | u8 repeat; |
310 | u8 repeat; |
Line 299... | Line -... | ||
299 | - | ||
300 | HMC5843_Present = 0; |
- | |
301 | - | ||
302 | HMC5843_Identification.A = 0xFF; |
- | |
303 | HMC5843_Identification.B = 0xFF; |
311 | |
304 | HMC5843_Identification.C = 0xFF; |
312 | HMC5843_Present = 0; |
305 | 313 | ||
306 | // polling of identification |
314 | // polling of identification |
307 | repeat = 0; |
315 | repeat = 0; |
308 | do |
316 | do |
309 | { |
317 | { |
310 | HMC5843_GetIdentification(); |
318 | retval = HMC5843_GetIdentification(); |
311 | if (HMC5843_Identification.A != 0xFF) break; // break loop on success |
319 | if(retval) break; // break loop on success |
312 | UART1_PutString("."); |
320 | UART1_PutString("."); |
313 | repeat++; |
321 | repeat++; |
314 | }while ((HMC5843_Identification.A == 0xFF) && (repeat < 12)); |
322 | }while(repeat < 12); |
315 | // if we got it |
323 | // if we got it |
316 | if(HMC5843_Identification.A != 0xFF) |
324 | if(retval) |
Line 317... | Line 325... | ||
317 | { |
325 | { |
Line 334... | Line 342... | ||
334 | { |
342 | { |
335 | UART1_PutString("\n\r HMC5843 not compatible!"); |
343 | UART1_PutString("\n\r HMC5843 not compatible!"); |
336 | LED_RED_ON; |
344 | LED_RED_ON; |
337 | } |
345 | } |
338 | } |
346 | } |
- | 347 | // else no answer |
|
339 | return(HMC5843_Present); |
348 | return(HMC5843_Present); |
340 | } |
349 | } |