paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [6125] add timeout and reset to hmc5843 to work arou


From: Allen Ibara
Subject: [paparazzi-commits] [6125] add timeout and reset to hmc5843 to work around i2c stall
Date: Sat, 09 Oct 2010 03:43:41 +0000

Revision: 6125
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=6125
Author:   aibara
Date:     2010-10-09 03:43:40 +0000 (Sat, 09 Oct 2010)
Log Message:
-----------
add timeout and reset to hmc5843 to work around i2c stall

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/booz/arch/stm32/peripherals/hmc5843_arch.c
    paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.c
    paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.h

Modified: 
paparazzi3/trunk/sw/airborne/booz/arch/stm32/peripherals/hmc5843_arch.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/arch/stm32/peripherals/hmc5843_arch.c     
2010-10-09 03:36:37 UTC (rev 6124)
+++ paparazzi3/trunk/sw/airborne/booz/arch/stm32/peripherals/hmc5843_arch.c     
2010-10-09 03:43:40 UTC (rev 6125)
@@ -27,8 +27,10 @@
 #include <stm32/spi.h>
 #include <stm32/exti.h>
 #include <stm32/misc.h>
+#include "i2c.h"
 
 void exti9_5_irq_handler(void);
+void hmc5843_arch_reset(void);
 
 void hmc5843_arch_init( void ) {
   /* configure external interrupt exti5 on PB5( mag int ) */
@@ -55,6 +57,11 @@
   NVIC_Init(&NVIC_InitStructure); 
 }
 
+void hmc5843_arch_reset(void)
+{
+       i2c2_er_irq_handler();
+}
+
 void exti9_5_irq_handler(void) {
   
   /* clear EXTI */

Modified: paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.c        
2010-10-09 03:36:37 UTC (rev 6124)
+++ paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.c        
2010-10-09 03:43:40 UTC (rev 6125)
@@ -1,5 +1,7 @@
 #include "peripherals/booz_hmc5843.h"
 
+#define HMC5843_TIMEOUT 100
+
 #define bswap_16(x)   ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8))
 
 struct Hmc5843 hmc5843;
@@ -51,6 +53,7 @@
        }
 
        if (hmc5843.reading && hmc5843.i2c_trans.status == I2CTransSuccess) {
+               hmc5843.timeout = 0;
                hmc5843.data_available = TRUE;
                hmc5843.reading = FALSE;
                memcpy(hmc5843.data.buf, (const void *) hmc5843.i2c_trans.buf, 
6);
@@ -65,5 +68,8 @@
        if (!hmc5843.initialized) {
                send_config();
                hmc5843.initialized = TRUE;
+       } else if (hmc5843.timeout++ > HMC5843_TIMEOUT) {
+               hmc5843_arch_reset();
+               hmc5843.timeout = 0;
        }
 }

Modified: paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.h
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.h        
2010-10-09 03:36:37 UTC (rev 6124)
+++ paparazzi3/trunk/sw/airborne/booz/peripherals/booz_hmc5843.h        
2010-10-09 03:43:40 UTC (rev 6125)
@@ -37,8 +37,9 @@
   } data;
        uint8_t initialized;
        uint8_t reading;
-       uint8_t ready_for_read;
+       volatile uint8_t ready_for_read;
        uint8_t data_available;
+       uint32_t timeout;
 };
 
 extern struct Hmc5843 hmc5843;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]