kopia lustrzana https://github.com/OpenRTX/OpenRTX
Extending MDx GPS driver also to MD-UV3x0 and MD-9600 targets.
rodzic
ebaee7b113
commit
2fbf5fcdeb
|
@ -217,6 +217,7 @@ mduv380_src = src + stm32f405_src + ['platform/drivers/display/HX8353_MDx.c',
|
|||
'platform/drivers/ADC/ADC1_MDx.c',
|
||||
'platform/drivers/tones/toneGenerator_MDx.c',
|
||||
'platform/drivers/baseband/radio_UV3x0.c',
|
||||
'platform/drivers/GPS/GPS_MDx.c',
|
||||
'platform/targets/MD-UV380/platform.c']
|
||||
|
||||
mduv380_inc = inc + stm32f405_inc + ['platform/targets/MD-UV380']
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <os.h>
|
||||
|
||||
static int8_t detectStatus = -1;
|
||||
int8_t detectStatus = -1;
|
||||
size_t bufPos = 0;
|
||||
size_t maxPos = 0;
|
||||
char *dataBuf;
|
||||
|
@ -34,11 +34,21 @@ bool receiving = false;
|
|||
OS_FLAG_GRP sentenceReady;
|
||||
OS_ERR err;
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
#define PORT USART3
|
||||
#else
|
||||
#define PORT USART1
|
||||
#endif
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
void __attribute__((used)) USART3_IRQHandler()
|
||||
#else
|
||||
void __attribute__((used)) USART1_IRQHandler()
|
||||
#endif
|
||||
{
|
||||
if(USART3->SR & USART_SR_RXNE)
|
||||
if(PORT->SR & USART_SR_RXNE)
|
||||
{
|
||||
char value = USART3->DR;
|
||||
char value = PORT->DR;
|
||||
|
||||
if((receiving == false) && (value == '$') && (bufPos == 0))
|
||||
{
|
||||
|
@ -70,7 +80,7 @@ void __attribute__((used)) USART3_IRQHandler()
|
|||
}
|
||||
}
|
||||
|
||||
USART3->SR = 0;
|
||||
PORT->SR = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -80,17 +90,27 @@ void gps_init(const uint16_t baud)
|
|||
gpio_setMode(GPS_DATA, ALTERNATE);
|
||||
gpio_setAlternateFunction(GPS_DATA, 7);
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
const unsigned int quot = 2*42000000/baud; /* APB1 clock is 42MHz */
|
||||
RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
|
||||
#else
|
||||
const unsigned int quot = 2*84000000/baud; /* APB2 clock is 84MHz */
|
||||
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
|
||||
#endif
|
||||
__DSB();
|
||||
|
||||
const unsigned int quot = 2*42000000/baud;
|
||||
USART3->BRR = quot/2 + (quot & 1);
|
||||
USART3->CR3 |= USART_CR3_ONEBIT;
|
||||
USART3->CR1 = USART_CR1_RE
|
||||
PORT->BRR = quot/2 + (quot & 1);
|
||||
PORT->CR3 |= USART_CR3_ONEBIT;
|
||||
PORT->CR1 = USART_CR1_RE
|
||||
| USART_CR1_RXNEIE;
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
NVIC_ClearPendingIRQ(USART3_IRQn);
|
||||
NVIC_SetPriority(USART3_IRQn, 14);
|
||||
#else
|
||||
NVIC_ClearPendingIRQ(USART1_IRQn);
|
||||
NVIC_SetPriority(USART1_IRQn, 14);
|
||||
#endif
|
||||
|
||||
OSFlagCreate(&sentenceReady, "", 0, &err);
|
||||
}
|
||||
|
@ -99,20 +119,30 @@ void gps_terminate()
|
|||
{
|
||||
OSFlagDel(&sentenceReady, OS_OPT_DEL_NO_PEND, &err);
|
||||
gps_disable();
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
RCC->APB1ENR &= ~RCC_APB1ENR_USART3EN;
|
||||
#else
|
||||
RCC->APB2ENR &= ~RCC_APB2ENR_USART1EN;
|
||||
#endif
|
||||
}
|
||||
|
||||
void gps_enable()
|
||||
{
|
||||
gpio_setPin(GPS_EN);
|
||||
USART3->CR1 |= USART_CR1_UE;
|
||||
PORT->CR1 |= USART_CR1_UE;
|
||||
}
|
||||
|
||||
void gps_disable()
|
||||
{
|
||||
gpio_clearPin(GPS_EN);
|
||||
USART3->CR1 &= ~USART_CR1_UE;
|
||||
PORT->CR1 &= ~USART_CR1_UE;
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
NVIC_DisableIRQ(USART3_IRQn);
|
||||
#else
|
||||
NVIC_DisableIRQ(USART1_IRQn);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool gps_detect(uint16_t timeout)
|
||||
|
@ -154,14 +184,22 @@ int gps_getNmeaSentence(char *buf, const size_t maxLength)
|
|||
maxPos = maxLength;
|
||||
dataBuf = buf;
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
NVIC_EnableIRQ(USART3_IRQn);
|
||||
#else
|
||||
NVIC_EnableIRQ(USART1_IRQn);
|
||||
#endif
|
||||
|
||||
OS_FLAGS status = OSFlagPend(&sentenceReady, 0x03, 0,
|
||||
OS_OPT_PEND_FLAG_SET_ANY |
|
||||
OS_OPT_PEND_FLAG_CONSUME |
|
||||
OS_OPT_PEND_BLOCKING, NULL, &err);
|
||||
|
||||
#ifdef PLATFORM_MD3x0
|
||||
NVIC_DisableIRQ(USART3_IRQn);
|
||||
#else
|
||||
NVIC_DisableIRQ(USART1_IRQn);
|
||||
#endif
|
||||
|
||||
if(status & 0x01)
|
||||
{
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
#define AMP_EN GPIOB,9
|
||||
#define SPK_MUTE GPIOB,8
|
||||
|
||||
/* GPS, for the devices who have it */
|
||||
#define GPS_EN GPIOA,9
|
||||
#define GPS_DATA GPIOA,10
|
||||
|
||||
/*
|
||||
* To enable pwm for display backlight dimming uncomment this directive.
|
||||
*
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include <stdio.h>
|
||||
#include <hwconfig.h>
|
||||
#include <minmea.h>
|
||||
#include <GPS.h>
|
||||
#include <interfaces/gps.h>
|
||||
|
||||
char line[MINMEA_MAX_LENGTH*10];
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue