From c40e5800ab3ce2f1c57380d92fba56c070dc8bbc Mon Sep 17 00:00:00 2001 From: James Cotton Date: Fri, 2 Sep 2011 13:28:36 -0500 Subject: [PATCH] BMA180: Enable the EEPROM writing on startup so settings take the first time. --- flight/PiOS/STM32F2xx/pios_bma180.c | 20 +++++++++++++------- flight/PiOS/inc/pios_bma180.h | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/flight/PiOS/STM32F2xx/pios_bma180.c b/flight/PiOS/STM32F2xx/pios_bma180.c index 3bf98d668..357f9f93e 100644 --- a/flight/PiOS/STM32F2xx/pios_bma180.c +++ b/flight/PiOS/STM32F2xx/pios_bma180.c @@ -53,7 +53,7 @@ static enum bma180_range range; /** * @brief Initialize with good default settings */ -void PIOS_BMA180_Init(const struct pios_bma180_cfg * cfg) +int32_t PIOS_BMA180_Init(const struct pios_bma180_cfg * cfg) { dev_cfg = cfg; // store config before enabling interrupt @@ -69,11 +69,11 @@ void PIOS_BMA180_Init(const struct pios_bma180_cfg * cfg) /* Enable and set EOC EXTI Interrupt to the lowest priority */ NVIC_Init(&cfg->eoc_irq.init); - PIOS_BMA180_Config(); - PIOS_BMA180_SelectBW(BMA_BW_600HZ); - PIOS_BMA180_SetRange(BMA_RANGE_8G); + if(PIOS_BMA180_Config() < 0) + return -1; PIOS_DELAY_WaituS(50); PIOS_BMA180_EnableIrq(); + return 0; } /** @@ -172,18 +172,24 @@ static int32_t PIOS_BMA180_Config() 0x21 = 0x02 //new_data_int = 1 */ + PIOS_DELAY_WaituS(20); + + if(PIOS_BMA180_EnableEeprom() < 0) + return -1; if(PIOS_BMA180_SetReg(BMA_RESET, BMA_RESET_CODE) < 0) return -1; - - PIOS_DELAY_WaituS(100); - if(PIOS_BMA180_SetReg(BMA_OFFSET_LSB1, 0x81) < 0) return -1; if(PIOS_BMA180_SetReg(BMA_GAIN_Y, 0x81) < 0) return -1; if(PIOS_BMA180_SetReg(BMA_CTRREG3, 0xFF) < 0) return -1; + PIOS_BMA180_SelectBW(BMA_BW_600HZ); + PIOS_BMA180_SetRange(BMA_RANGE_8G); + if(PIOS_BMA180_DisableEeprom() < 0) + return -1; + return 0; } diff --git a/flight/PiOS/inc/pios_bma180.h b/flight/PiOS/inc/pios_bma180.h index 9bbfe2c95..f19e3d1c8 100644 --- a/flight/PiOS/inc/pios_bma180.h +++ b/flight/PiOS/inc/pios_bma180.h @@ -97,7 +97,7 @@ struct pios_bma180_cfg { }; /* Public Functions */ -extern void PIOS_BMA180_Init(const struct pios_bma180_cfg * cfg); +extern int32_t PIOS_BMA180_Init(const struct pios_bma180_cfg * cfg); extern void PIOS_BMA180_Attach(uint32_t spi_id); extern float PIOS_BMA180_GetScale(); extern int32_t PIOS_BMA180_ReadFifo(struct pios_bma180_data * buffer);