diff --git a/flight/targets/boards/gpsplatinum/board_hw_defs.c b/flight/targets/boards/gpsplatinum/board_hw_defs.c index 3f9e5d1d5..74a6c6092 100644 --- a/flight/targets/boards/gpsplatinum/board_hw_defs.c +++ b/flight/targets/boards/gpsplatinum/board_hw_defs.c @@ -199,6 +199,55 @@ void PIOS_SPI_mag_flash_irq_handler(void) PIOS_SPI_IRQ_Handler(pios_spi_mag_flash_id); } + +#if defined(PIOS_INCLUDE_HMC5X83) +#include "pios_hmc5x83.h" +#ifdef PIOS_HMC5x83_HAS_GPIOS +static const struct pios_exti_cfg pios_exti_mag_cfg __exti_config = { + .vector = PIOS_HMC5x83_IRQHandler, + .line = EXTI_Line7, + .pin = { + .gpio = GPIOB, + .init = { + .GPIO_Pin = GPIO_Pin_7, + .GPIO_Speed = GPIO_Speed_100MHz, + .GPIO_Mode = GPIO_Mode_IN, + .GPIO_OType = GPIO_OType_OD, + .GPIO_PuPd = GPIO_PuPd_NOPULL, + }, + }, + .irq = { + .init = { + .NVIC_IRQChannel = EXTI9_5_IRQn, + .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW, + .NVIC_IRQChannelSubPriority = 0, + .NVIC_IRQChannelCmd = ENABLE, + }, + }, + .exti = { + .init = { + .EXTI_Line = EXTI_Line7, // matches above GPIO pin + .EXTI_Mode = EXTI_Mode_Interrupt, + .EXTI_Trigger = EXTI_Trigger_Rising, + .EXTI_LineCmd = ENABLE, + }, + }, +}; +#endif + +static const struct pios_hmc5x83_cfg pios_mag_cfg = { +#ifdef PIOS_HMC5x83_HAS_GPIOS + .exti_cfg = &pios_exti_mag_cfg, +#endif + .M_ODR = PIOS_HMC5x83_ODR_75, + .Meas_Conf = PIOS_HMC5x83_MEASCONF_NORMAL, + .Gain = PIOS_HMC5x83_GAIN_1_9, + .Mode = PIOS_HMC5x83_MODE_CONTINUOUS, + .Driver = &PIOS_HMC5x83_SPI_DRIVER, +}; +#endif /* PIOS_INCLUDE_HMC5883 */ + + #endif /* PIOS_INCLUDE_SPI */ #if defined(PIOS_INCLUDE_USART) diff --git a/flight/targets/boards/gpsplatinum/firmware/Makefile b/flight/targets/boards/gpsplatinum/firmware/Makefile index 338e16c6f..2594ebe4b 100644 --- a/flight/targets/boards/gpsplatinum/firmware/Makefile +++ b/flight/targets/boards/gpsplatinum/firmware/Makefile @@ -54,6 +54,7 @@ SRC += $(OPSYSTEM)/pios_board.c SRC += $(OPUAVOBJ)/uavobjectmanager.c SRC += $(OPUAVOBJ)/eventdispatcher.c +SRC += $(PIOSCOMMON)/pios_hmc5x83.c ## UAVObjects SRC += $(OPUAVSYNTHDIR)/firmwareiapobj.c diff --git a/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h b/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h index 27b4fe853..e706898cf 100644 --- a/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h +++ b/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h @@ -83,6 +83,7 @@ //#define PIOS_MPU6000_ACCEL /* #define PIOS_INCLUDE_HMC5843 */ /* #define PIOS_INCLUDE_HMC5883 */ +#define PIOS_INCLUDE_HMC5X83 /* #define PIOS_HMC5883_HAS_GPIOS */ /* #define PIOS_INCLUDE_BMP085 */ /* #define PIOS_INCLUDE_MS5611 */ diff --git a/flight/targets/boards/gpsplatinum/firmware/pios_board.c b/flight/targets/boards/gpsplatinum/firmware/pios_board.c index c7128ed2e..5c87ad5b0 100644 --- a/flight/targets/boards/gpsplatinum/firmware/pios_board.c +++ b/flight/targets/boards/gpsplatinum/firmware/pios_board.c @@ -74,6 +74,10 @@ void PIOS_Board_Init(void) PIOS_Assert(0); } +#ifdef PIOS_INCLUDE_HMC5X83 + PIOS_SPI_SetPrescalar(pios_spi_mag_flash_id, SPI_BaudRatePrescaler_16); + PIOS_HMC5x83_Init(&pios_mag_cfg, pios_spi_mag_flash_id, 0); +#endif #endif /* Initialize the task monitor */