diff --git a/STM32F04_FW/src/main.c b/STM32F04_FW/src/main.c index d7efcc14d60328749fb762457930acbfa88156f2..83b90328c67d99ef2524d0476188ab15e433af92 100644 --- a/STM32F04_FW/src/main.c +++ b/STM32F04_FW/src/main.c @@ -46,7 +46,7 @@ SOFTWARE. /* Private variables */ /* Private function prototypes */ /* Private functions */ -#define WAIT_FOR_FIX 1 +#define WAIT_FOR_FIX 0 /** **=========================================================================== ** @@ -177,7 +177,11 @@ static char *safeitoa(const int x, char *buffer, const int bufferSize, const int } //#include <stm32f4xx_spi.h> +#if WAIT_FOR_FIX == 1 volatile uint64_t ticks = 0; +#else +volatile uint64_t ticks = 1505658926; +#endif //must be called via GPIO-Interrupt void EXTI1_IRQHandler(void) { /* Make sure that interrupt flag is set */ @@ -276,6 +280,10 @@ void SPI2_IRQHandler(void) tm[i+1] = '0'; safeitoa ( get_time(), &tm[1], 20, 16 ); + //MAGIC do not touch - you are not meant to understand the following line :D +// for(volatile uint16_t i=0; i < 12; ++i) asm volatile("nop"); //This line has it's puprose, due to racing conditions which caused damaged data, we artifically increased the delay of safeitoa. + // if safeitoa is too fast, the string of the RX-Board is not transmitted completely, thus not all characters are safed in the fifo causing that not all characters are transferred. + for(uint8_t i=0; i < 10; ++i){ if(tm[i] == 0) { tm[i] = ';'; @@ -284,8 +292,9 @@ void SPI2_IRQHandler(void) } } uint16_t ln = strlen(tm); + __disable_irq(); fifo_put(&spi2_rx_fifo, tm, ln); - + __enable_irq(); // for(uint8_t i = 0; i < ln; ++i){ // cmp1[cmp1_index] = tm[i]; // cmp1_index++; @@ -295,8 +304,9 @@ void SPI2_IRQHandler(void) } else { + __disable_irq(); fifo_put(&spi2_rx_fifo, &tmp, 1); - + __enable_irq(); // cmp1[cmp1_index] = tmp; // cmp1_index++; // if(cmp1_index >= 200) @@ -377,7 +387,8 @@ void spi_send(void){ __enable_irq(); if(filled){ memset(tmp, 0, sizeof(tmp)); - if(filled >= 126) filled = 126; + if(filled >= 126) + filled = 126; __disable_irq(); fifo_get(&spi2_rx_fifo, tmp, filled); fifo_put(&spi1_tx_fifo, tmp, filled); @@ -487,7 +498,9 @@ void SPI1_IRQHandler(void) if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_TXE) == SET){ if(fifo_filled(&spi1_tx_fifo)){ char tmp; + __disable_irq(); fifo_get(&spi1_tx_fifo, &tmp, 1); + __enable_irq(); // cmp3[cmp3_index] = tmp; // cmp3_index++; // if(cmp3_index >= 200) @@ -667,7 +680,8 @@ NVIC_Init(&NVIC_InitStruct); minmea_parse_rmc(&rmc,strstr(buffer, "$GPRMC")); uint32_t time = get_unix_tmstmp(rmc.date.year, rmc.date.month, rmc.date.day, rmc.time.hours, rmc.time.minutes, rmc.time.seconds); - ticks = time; + if(time >= 0xFFFFFFFF) ticks = 0; + else ticks = time; asm("nop"); }