Subversion Repositories NaviCtrl

Rev

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
}