[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [6125] add timeout and reset to hmc5843 to work around i2c stall,
Allen Ibara <=