1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-18 03:52:11 +01:00

More updates to cross-target compatibility.

Added PIOS_I2C into AHRS code.
Added PIOS_HMC5843 Module.




git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@617 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
gussy 2010-05-12 08:18:49 +00:00 committed by gussy
parent fe9aa9e38f
commit ff73ab5a80
11 changed files with 197 additions and 23 deletions

View File

@ -94,11 +94,12 @@ SRC += $(PIOSSTM32F10X)/pios_delay.c
SRC += $(PIOSSTM32F10X)/pios_usart.c
SRC += $(PIOSSTM32F10X)/pios_irq.c
SRC += $(PIOSSTM32F10X)/pios_adc.c
#SRC += $(PIOSSTM32F10X)/pios_i2c.c
SRC += $(PIOSSTM32F10X)/pios_i2c.c
#SRC += $(PIOSSTM32F10X)/pios_spi.c
## PIOS Hardware (Common)
SRC += $(PIOSCOMMON)/pios_com.c
SRC += $(PIOSCOMMON)/pios_hmc5843.c
SRC += $(PIOSCOMMON)/printf-stdarg.c
## CMSIS for STM32

View File

@ -50,13 +50,29 @@ int main()
/* ADC system */
PIOS_ADC_Init();
/* Magnetic sensor system */
//PIOS_I2C_Init();
//PIOS_HMC5843_Init();
/* Toggle LED's forever */
PIOS_LED_On(LED1);
uint8_t buffer[3] = {0};
int32_t result;
for(;;) {
PIOS_LED_Toggle(LED1);
// Test ADC
PIOS_COM_SendFormattedString(COM_USART1, "%d,%d,%d,%d,%d,%d,%d,%d\r", PIOS_ADC_PinGet(0), PIOS_ADC_PinGet(1), PIOS_ADC_PinGet(2), PIOS_ADC_PinGet(3), PIOS_ADC_PinGet(4), PIOS_ADC_PinGet(5), PIOS_ADC_PinGet(6), PIOS_ADC_PinGet(7));
PIOS_DELAY_WaitmS(25);
/*
result = PIOS_HMC5843_Read(0x0A, buffer, 3);
PIOS_COM_SendFormattedString(COM_USART1, "Result: %d\r", result);
PIOS_COM_SendFormattedString(COM_USART1, "Ident: %s\r", buffer);
*/
PIOS_DELAY_WaitmS(10);
}

View File

@ -97,6 +97,24 @@ TIM8 | | | |
#define PIOS_IRQ_PRIO_HIGH 5 // for SPI, ADC, I2C etc...
#define PIOS_IRQ_PRIO_HIGHEST 4 // for USART etc...
//------------------------
// PIOS_I2C
//------------------------
#define PIOS_I2C_PORT I2C1
#define PIOS_I2C_CLK RCC_APB1Periph_I2C1
#define PIOS_I2C_GPIO_PORT GPIOB
#define PIOS_I2C_SCL_PIN GPIO_Pin_6
#define PIOS_I2C_SDA_PIN GPIO_Pin_7
#define PIOS_I2C_DUTY_CYCLE I2C_DutyCycle_2
#define PIOS_I2C_BUS_FREQ 400000
#define PIOS_I2C_TIMEOUT_VALUE 5000
#define PIOS_I2C_IRQ_EV_HANDLER void I2C1_EV_IRQHandler(void)
#define PIOS_I2C_IRQ_ER_HANDLER void I2C1_ER_IRQHandler(void)
#define PIOS_I2C_IRQ_EV_CHANNEL I2C1_EV_IRQn
#define PIOS_I2C_IRQ_ER_CHANNEL I2C1_EV_IRQn
#define PIOS_I2C_IRQ_EV_PRIORITY 2
#define PIOS_I2C_IRQ_ER_PRIORITY 2
//-------------------------
// PIOS_USART1
//-------------------------

View File

@ -31,23 +31,13 @@
/* Enable/Disable PiOS Modules */
#define PIOS_INCLUDE_ADC
#define PIOS_INCLUDE_DELAY
//#define PIOS_INCLUDE_I2C
#define PIOS_INCLUDE_I2C
#define PIOS_INCLUDE_IRQ
#define PIOS_INCLUDE_LED
//#define PIOS_INCLUDE_PWM
//#define PIOS_INCLUDE_SERVO
//#define PIOS_INCLUDE_SPI
#define PIOS_INCLUDE_SYS
#define PIOS_INCLUDE_USART
//#define PIOS_INCLUDE_USB_COM
//#define PIOS_INCLUDE_USB_HID
//#define PIOS_INCLUDE_USB
//#define PIOS_INCLUDE_BMP085
#define PIOS_INCLUDE_COM
//#define PIOS_INCLUDE_SDCARD
//#define PIOS_INCLUDE_SETTINGS
#define portBASE_TYPE int32_t
#define PIOS_INCLUDE_HMC5843
#endif /* PIOS_CONFIG_H */

View File

@ -79,12 +79,18 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8
//------------------------
// PIOS_I2C
//------------------------
#define PIOS_I2C_PORT I2C2
#define PIOS_I2C_CLK RCC_APB1Periph_I2C2
#define PIOS_I2C_GPIO_PORT GPIOB
#define PIOS_I2C_SDA_PIN GPIO_Pin_11
#define PIOS_I2C_SCL_PIN GPIO_Pin_10
#define PIOS_I2C_DUTY_CYCLE I2C_DutyCycle_2
#define PIOS_I2C_BUS_FREQ 400000
#define PIOS_I2C_TIMEOUT_VALUE 5000
#define PIOS_I2C_IRQ_EV_HANDLER void I2C2_EV_IRQHandler(void)
#define PIOS_I2C_IRQ_ER_HANDLER void I2C2_ER_IRQHandler(void)
#define PIOS_I2C_IRQ_EV_CHANNEL I2C2_EV_IRQn
#define PIOS_I2C_IRQ_ER_CHANNEL I2C2_EV_IRQn
#define PIOS_I2C_IRQ_EV_PRIORITY 2
#define PIOS_I2C_IRQ_ER_PRIORITY 2

View File

@ -3,7 +3,7 @@
*
* @file pios_bmp085.c
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief IRQ Enable/Disable routines
* @brief BMP085 Pressure Sensor Routines
* @see The GNU Public License (GPL) Version 3
* @defgroup PIOS_BMP085 BMP085 Functions
* @{

View File

@ -0,0 +1,95 @@
/**
******************************************************************************
*
* @file pios_hmc5843.c
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief HMC5843 Magnetic Sensor Functions
* @see The GNU Public License (GPL) Version 3
* @defgroup PIOS_HMC5843 HMC5843 Functions
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Project Includes */
#include "pios.h"
#if defined(PIOS_INCLUDE_HMC5843)
/* Glocal Variables */
/* Local Variables */
/**
* Initialise the HMC5843 sensor
*/
void PIOS_HMC5843_Init(void)
{
// Set in continuous mode
PIOS_HMC5843_Write(0x02, 0x00);
}
/**
* Reads one or more bytes into a buffer
* \param[in] address HMC5843 register address (depends on size)
* \param[out] buffer destination buffer
* \param[in] len number of bytes which should be read
* \return 0 if operation was successful
* \return -1 if error during I2C transfer
* \return -4 if invalid length
*/
int32_t PIOS_HMC5843_Read(uint8_t address, uint8_t *buffer, uint8_t len)
{
/* Send I2C address and register address */
/* To avoid issues copy address into temporary buffer */
uint8_t addr_buffer[1] = {(uint8_t)address};
int32_t error = PIOS_I2C_Transfer(I2C_Write_WithoutStop, HMC5843_I2C_ADDR, addr_buffer, 1);
/* Now receive byte(s) */
if(!error) {
error = PIOS_I2C_Transfer(I2C_Read, HMC5843_I2C_ADDR, buffer, len);
}
/* Return error status */
return error < 0 ? -1 : 0;
}
/**
* Writes one or more bytes to the HMC5843
* \param[in] address Register address
* \param[in] buffer source buffer
* \return 0 if operation was successful
* \return -1 if error during I2C transfer
*/
int32_t PIOS_HMC5843_Write(uint8_t address, uint8_t buffer)
{
/* Send I2C address and data */
uint8_t WriteBuffer[2];
WriteBuffer[0] = address;
WriteBuffer[1] = buffer;
int32_t error = PIOS_I2C_Transfer(I2C_Write, HMC5843_I2C_ADDR, WriteBuffer, 2);
/* Return error status */
return error < 0 ? -1 : 0;
}
#endif

View File

@ -139,15 +139,15 @@ int32_t PIOS_I2C_Init(void)
TransferEnd(&I2CRec);
/* Configure and enable I2C2 interrupts */
/* Configure and enable I2C interrupts */
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = I2C2_EV_IRQn;
NVIC_InitStructure.NVIC_IRQChannel = PIOS_I2C_IRQ_EV_CHANNEL;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PIOS_I2C_IRQ_EV_PRIORITY;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = I2C2_ER_IRQn;
NVIC_InitStructure.NVIC_IRQChannel = PIOS_I2C_IRQ_ER_CHANNEL;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PIOS_I2C_IRQ_ER_PRIORITY;
NVIC_Init(&NVIC_InitStructure);
@ -174,10 +174,10 @@ static void PIOS_I2C_InitPeripheral(void)
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
/* Define base address */
i2cx->base = I2C2;
i2cx->base = PIOS_I2C_PORT;
/* enable peripheral clock of I2C */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
RCC_APB1PeriphClockCmd(PIOS_I2C_CLK, ENABLE);
/* Set I2C clock bus clock params */
/* Note that the STM32 driver handles value <= 100kHz differently! (duty cycle always 1:1) */
@ -650,12 +650,12 @@ static void ER_IRQHandler(I2CRecTypeDef *i2cx)
/* Interrupt vectors */
void I2C2_EV_IRQHandler(void)
PIOS_I2C_IRQ_EV_HANDLER
{
EV_IRQHandler((I2CRecTypeDef *)&I2CRec);
}
void I2C2_ER_IRQHandler(void)
PIOS_I2C_IRQ_ER_HANDLER
{
ER_IRQHandler((I2CRecTypeDef *)&I2CRec);
}

View File

@ -0,0 +1,44 @@
/**
******************************************************************************
*
* @file pios_hmc5843.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief HMC5843 functions header.
* @see The GNU Public License (GPL) Version 3
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PIOS_HMC5843_H
#define PIOS_HMC5843_H
/* BMP085 Addresses */
#define HMC5843_I2C_ADDR 0x3C
/* Local Types */
/* Global Variables */
/* Public Functions */
extern void PIOS_HMC5843_Init(void);
extern int32_t PIOS_HMC5843_Read(uint8_t address, uint8_t *buffer, uint8_t len);
extern int32_t PIOS_HMC5843_Write(uint8_t address, uint8_t buffer);
#endif /* PIOS_HMC5843_H */

View File

@ -37,7 +37,7 @@
#define I2C_ERROR_SLAVE_NOT_CONNECTED -7
#define I2C_ERROR_UNEXPECTED_EVENT -8
#define I2C_ERROR_RX_BUFFER_OVERRUN -9
#define I2C_ERROR_BUSY -10
#define I2C_ERROR_BUSY -10
/* Global Types */

View File

@ -89,6 +89,10 @@
#if defined(PIOS_INCLUDE_BMP085)
#include <pios_bmp085.h>
#endif
#if defined(PIOS_INCLUDE_HMC5843)
#include <pios_hmc5843.h>
#endif
#if defined(PIOS_INCLUDE_USB)
/* USB Libs */