Mercurial > public > ostc4
diff Small_CPU/Src/baseCPU2.c @ 981:c6c781a2e85b default
Merge into default
| author | heinrichsweikamp |
|---|---|
| date | Tue, 11 Feb 2025 18:12:00 +0100 |
| parents | 81049905d829 |
| children | d9290c76b840 |
line wrap: on
line diff
--- a/Small_CPU/Src/baseCPU2.c Tue Aug 13 13:24:54 2024 +0200 +++ b/Small_CPU/Src/baseCPU2.c Tue Feb 11 18:12:00 2025 +0100 @@ -135,6 +135,7 @@ #include "spi.h" #include "rtc.h" #include "adc.h" +#include "gpio.h" #include "compass.h" #include "pressure.h" #include "batteryGasGauge.h" @@ -143,6 +144,11 @@ #include "tm_stm32f4_otp.h" #include "externalInterface.h" #include "uart.h" +#include "uart_Internal.h" +#include "uartProtocol_GNSS.h" +#include "GNSS.h" +#include "configuration.h" + // From Common/Inc: #include "calc_crush.h" @@ -150,9 +156,9 @@ #include "FirmwareData.h" // From Common/Drivers/ -#include "stm32f4xx_hal.h" #include <stdio.h> + uint8_t coldstart __attribute__((section (".noinit"))); uint8_t hasExternalClock(void) { @@ -166,16 +172,16 @@ // See CPU2-RTE.ld const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= { .versionFirst = 3, - .versionSecond = 2, + .versionSecond = 4, .versionThird = 0, .versionBeta = 0, /* 4 bytes with trailing 0 */ .signature = "mh", - .release_year = 23, - .release_month = 9, - .release_day = 14, + .release_year = 25, + .release_month = 1, + .release_day = 18, .release_sub = 0, /* max 48 with trailing 0 */ @@ -212,28 +218,6 @@ #define BUTTON_OSTC_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() #define BUTTON_OSTC_IRQn EXTI0_IRQn -#define BUTTON_TEST_GPIO_PIN GPIO_PIN_3 -#define BUTTON_TEST_GPIO_PORT GPIOA -#define BUTTON_TEST_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_TEST_IRQn EXTI3_IRQn - -#define WIRELSS_RISING_GPIO_PIN GPIO_PIN_1 -#define WIRELSS_RISING_GPIO_PORT GPIOA -#define WIRELSS_RISING_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WIRELSS_RISING_IRQn EXTI1_IRQn - -#define WIRELSS_FALLING_GPIO_PIN GPIO_PIN_2 -#define WIRELSS_FALLING_GPIO_PORT GPIOA -#define WIRELSS_FALLING_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WIRELSS_FALLING_IRQn EXTI2_IRQn - -#define WIRELSS_POWER_GPIO_PIN GPIO_PIN_12 -#define WIRELSS_POWER_GPIO_PORT GPIOB -#define WIRELSS_POWER_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - - -#define LED_CONTROL_PIN GPIO_PIN_3 /* PortC */ -#define MAINCPU_CONTROL_PIN GPIO_PIN_0 /* PortC */ /* Private macro -------------------------------------------------------------*/ @@ -245,14 +229,6 @@ static void EXTI_Wakeup_Button_Init(void); static void EXTI_Wakeup_Button_DeInit(void); -static void EXTI_Test_Button_Init(void); -static void EXTI_Test_Button_DeInit(void); - -static void GPIO_LED_Init(void); -static void GPIO_Power_MainCPU_Init(void); -static void GPIO_Power_MainCPU_ON(void); -static void GPIO_Power_MainCPU_OFF(void); - #ifdef DEBUG_I2C_LINES void GPIO_test_I2C_lines(void); #endif @@ -298,6 +274,9 @@ uint8_t lastsecond = 0xFF; #endif + uint8_t extInterfaceActive = 0; + uint32_t shutdownTick = 0; + HAL_Init(); SystemClock_Config(); @@ -306,7 +285,8 @@ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); MX_RTC_init(); - GPIO_LED_Init(); + GPIO_LEDs_VIBRATION_Init(); + GPIO_GNSS_Init(); GPIO_new_DEBUG_Init(); // added 170322 hw initGlobals(); @@ -403,6 +383,12 @@ GPIO_Power_MainCPU_Init(); global.mode = MODE_TEST; #endif + + GNSS_Handle.alive = 0; /* only init at startup (outside init function) */ + GNSS_Handle.last_fLat = 0.0; + GNSS_Handle.last_fLon = 0.0; + GNSS_Handle.last_hour = 0; + while (1) { /* printf("Global mode = %d\n", global.mode); */ @@ -416,15 +402,47 @@ if (global.mode == MODE_BOOT) { GPIO_Power_MainCPU_OFF(); +#ifdef ENABLE_GPIO_V2 + GPIO_LED_GREEN_ON(); +#endif HAL_Delay(100); // for GPIO_Power_MainCPU_ON(); GPIO_Power_MainCPU_ON(); +#ifdef ENABLE_GPIO_V2 + GPIO_LED_GREEN_OFF(); + + GPIO_LED_RED_ON(); + GPIO_VIBRATION_ON(); +#endif + HAL_Delay(100); +#ifdef ENABLE_GPIO_V2 + GPIO_LED_RED_OFF(); + GPIO_VIBRATION_OFF(); +#endif } +#ifdef ENABLE_GPIO_V2 + GPIO_LED_RED_OFF(); + GPIO_LED_GREEN_OFF(); + GPIO_VIBRATION_OFF(); +#endif SPI_synchronize_with_Master(); MX_DMA_Init(); MX_SPI1_Init(); SPI_Start_single_TxRx_with_Master(); /* be prepared for the first data exchange */ Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_HARD); - EXTI_Test_Button_Init(); + +#ifdef ENABLE_GPIO_V2 + // GNSS tests + GNSS_IO_init(); + GPIO_GPS_ON(); + GPIO_GPS_BCKP_ON(); + MX_USART6_UART_Init(); + GNSS_Init(&GNSS_Handle, &huart6); +#else +#ifdef ENABLE_GNSS_SUPPORT + GNSS_Init(&GNSS_Handle, &huart1); +#endif +#endif + global.mode = MODE_SURFACE; break; @@ -448,6 +466,9 @@ global.no_fly_time_minutes = 0; global.lifeData.dive_time_seconds = 0; global.lifeData.dive_time_seconds_without_surface_time = 0; +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + uartGnss_ReqPowerDown(1); +#endif scheduleDiveMode(); // done now in scheduler prior to change mode: global.seconds_since_last_dive = 1; @@ -473,39 +494,56 @@ backup.no_fly_time_minutes = 0; backup.seconds_since_last_dive = 0; +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + uartGnss_ReqPowerDown(0); +#endif break; case MODE_SHUTDOWN: HAL_Delay(200); + + MX_SPI3_Init(); + +#if defined ENABLE_GNSS_SUPPORT || defined ENABLE_GPIO_V2 + if(shutdownTick == 0) + { + shutdownTick = HAL_GetTick(); + uartGnss_ReqPowerDown(1); + } +#ifdef ENABLE_GNSS_SUPPORT + externalInterface_HandleUART(); +#else + UART6_HandleUART(); +#endif + if((uartGnss_GetState() == UART_GNSS_INACTIVE) || (time_elapsed_ms(shutdownTick,HAL_GetTick()) > 3000)) + { + global.mode = MODE_SLEEP; + uartGnss_ReqPowerDown(0); /* release power down request */ + } +#else global.mode = MODE_SLEEP; - MX_SPI3_Init(); +#endif + + break; case MODE_SLEEP: - /* - sleep_prepare(); - scheduleSleepMode_test(); - */ - /* - GPIO_Power_MainCPU_OFF(); - EXTI_Test_Button_DeInit(); - EXTI_Wakeup_Button_Init(); - NOT_USED_AT_THE_MOMENT_scheduleSleepMode(); - */ - - EXTI_Test_Button_DeInit(); - externalInterface_SwitchUART(0); + extInterfaceActive = externalInterface_isEnabledPower33(); + externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF); externalInterface_SwitchPower33(false); if (hasExternalClock()) SystemClock_Config_HSI(); + GPIO_LEDs_VIBRATION_Init(); sleep_prepare(); - GPIO_LED_Init(); - + while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */ + { + HAL_Delay(10); + } + shutdownTick = 0; scheduleSleepMode(); if (hasExternalClock()) SystemClock_Config_HSE(); - GPIO_LED_Init(); EXTI_Wakeup_Button_DeInit(); ADCx_Init(); GPIO_Power_MainCPU_Init(); @@ -517,7 +555,7 @@ MX_SPI1_Init(); SPI_Start_single_TxRx_with_Master(); - if(externalInterface_isEnabledPower33()) + if(extInterfaceActive) { externalInterface_SwitchPower33(true); } @@ -561,16 +599,8 @@ } } else - if (GPIO_Pin == BUTTON_TEST_GPIO_PIN) { - if (!global.demo_mode && (global.mode == MODE_SURFACE)) { - global.demo_mode = 1; - global.mode = MODE_DIVE; - } else if (global.demo_mode && (global.mode == MODE_DIVE) - && (global.lifeData.dive_time_seconds > 10)) { - global.demo_mode = 0; - global.dataSendToMaster.mode = MODE_ENDDIVE; - global.deviceDataSendToMaster.mode = MODE_ENDDIVE; - } + { + } } @@ -613,7 +643,7 @@ __PWR_CLK_ENABLE(); // is identical to __HAL_RCC_PWR_CLK_ENABLE(); - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //|RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; @@ -656,7 +686,7 @@ /* The voltage scaling allows optimizing the power consumption when the device is clocked below the maximum system frequency, to update the voltage scaling value regarding system frequency refer to product datasheet. */ - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /* Enable HSI Oscillator and activate PLL with HSI as source */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; @@ -680,44 +710,7 @@ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); } -/* - RCC_OscInitTypeDef RCC_OscInitStruct; - RCC_ClkInitTypeDef RCC_ClkInitStruct; - - __HAL_RCC_PWR_CLK_ENABLE(); - //__PWR_CLK_ENABLE(); - - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); - - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = 16; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; - RCC_OscInitStruct.PLL.PLLM = 16; - RCC_OscInitStruct.PLL.PLLN = 320; - RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; - RCC_OscInitStruct.PLL.PLLQ = 4; - HAL_RCC_OscConfig(&RCC_OscInitStruct); - - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); - } - - static void RtcClock_Config(void) - { - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - } - */ /** * @brief Configures system clock after wake-up from STOP: enable HSI, PLL @@ -811,17 +804,6 @@ } */ -static void GPIO_LED_Init(void) { - GPIO_InitTypeDef GPIO_InitStructure; - - __GPIOC_CLK_ENABLE(); - GPIO_InitStructure.Pin = LED_CONTROL_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_PULLUP; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); -} - void GPIO_new_DEBUG_Init(void) { #ifdef DEBUG_PIN_ACTIVE GPIO_InitTypeDef GPIO_InitStructure; @@ -847,25 +829,6 @@ #endif } -static void GPIO_Power_MainCPU_Init(void) { - GPIO_InitTypeDef GPIO_InitStructure; - __GPIOC_CLK_ENABLE(); - GPIO_InitStructure.Pin = MAINCPU_CONTROL_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_PULLUP; - GPIO_InitStructure.Speed = GPIO_SPEED_LOW; - HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); - HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_RESET); -} - -static void GPIO_Power_MainCPU_ON(void) { - HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_RESET); -} - -static void GPIO_Power_MainCPU_OFF(void) { - HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_SET); -} - /** * @brief Configures EXTI Line0 (connected to PA0 + PA1 pin) in interrupt mode * @param None @@ -898,40 +861,6 @@ HAL_NVIC_DisableIRQ( BUTTON_OSTC_IRQn); } -static void EXTI_Test_Button_Init(void) { - GPIO_InitTypeDef GPIO_InitStructure; - - BUTTON_TEST_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Pin = BUTTON_TEST_GPIO_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; - GPIO_InitStructure.Pull = GPIO_PULLUP; - HAL_GPIO_Init( BUTTON_TEST_GPIO_PORT, &GPIO_InitStructure); - HAL_NVIC_SetPriority( BUTTON_TEST_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ( BUTTON_TEST_IRQn); -} - -static void EXTI_Test_Button_DeInit(void) { - GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; - GPIO_InitStructure.Speed = GPIO_SPEED_LOW; - GPIO_InitStructure.Pull = GPIO_NOPULL; - - GPIO_InitStructure.Pin = BUTTON_TEST_GPIO_PIN; - HAL_GPIO_Init( BUTTON_TEST_GPIO_PORT, &GPIO_InitStructure); - HAL_NVIC_DisableIRQ( BUTTON_TEST_IRQn); -} - -/* NUCLEO C 13 - KEY_BUTTON_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Pin = KEY_BUTTON_PIN; - HAL_GPIO_Init(KEY_BUTTON_GPIO_PORT, &GPIO_InitStructure); - HAL_NVIC_SetPriority(KEY_BUTTON_EXTI_IRQn, 2, 0); - HAL_NVIC_EnableIRQ(KEY_BUTTON_EXTI_IRQn); - */ - /** * @brief Wake Up Timer callback * @param hrtc: RTC handle @@ -979,23 +908,24 @@ __HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; + GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); -#ifdef DEBUGMODE +#ifdef ENABLE_SLEEP_DEBUG GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */ #endif + +/* + GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN); HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = - GPIO_PIN_All - ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | CHARGE_IN_PIN | EXT33V_CONTROL_PIN | LED_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */ +*/ + GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | EXT33V_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */ HAL_GPIO_Init( GPIOC, &GPIO_InitStruct); - GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0); -#ifdef DEBUGMODE + GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | VIBRATION_CONTROL_PIN | LED_CONTROL_PIN_RED | LED_CONTROL_PIN_GREEN); +#ifdef ENABLE_SLEEP_DEBUG GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */ #endif HAL_GPIO_Init( GPIOA, &GPIO_InitStruct); @@ -1004,13 +934,21 @@ HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); GPIO_Power_MainCPU_OFF(); +#ifdef ENABLE_GPIO_V2 + GPIO_LED_GREEN_OFF(); + GPIO_LED_RED_OFF(); + GPIO_VIBRATION_OFF(); + GPIO_GPS_BCKP_ON(); // mH : costs 100µA in sleep - beware +/* GPIO_GPS_OFF(); will be done in transition sleep => deep sleep */ -#ifndef DEBUGMODE + MX_USART6_UART_DeInit(); +#endif +#ifndef ENABLE_SLEEP_DEBUG +/* __HAL_RCC_GPIOB_CLK_DISABLE(); +*/ #endif __HAL_RCC_GPIOH_CLK_DISABLE(); - - HAL_Delay(1000); } /*
