Mercurial > public > ostc4
changeset 1024:9fabad6436a2 GasConsumption tip
GPIO sleep cleanup:
During bringup of OSTC5 HW usage of new GPIO pins was introduced. To avoid not needed active GPIO pins during sleep some cleanup has been done (pins are only active if needed by new hardware, clocks deactivated during sleep etc.)
author | Ideenmodellierer |
---|---|
date | Tue, 29 Jul 2025 17:15:35 +0200 (3 weeks ago) |
parents | d268fc2b6052 |
children | |
files | Small_CPU/Inc/gpio.h Small_CPU/Src/baseCPU2.c Small_CPU/Src/gpio.c Small_CPU/Src/scheduler.c |
diffstat | 4 files changed, 36 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/Small_CPU/Inc/gpio.h Sun Jul 13 17:20:45 2025 +0200 +++ b/Small_CPU/Inc/gpio.h Tue Jul 29 17:15:35 2025 +0200 @@ -52,6 +52,7 @@ uint8_t GPIO_GetVersion(void); void GPIO_Activate_V2(void); +void GPIO_Init_V2(void); void GPIO_HandleBuzzer(); #endif #ifdef __cplusplus
--- a/Small_CPU/Src/baseCPU2.c Sun Jul 13 17:20:45 2025 +0200 +++ b/Small_CPU/Src/baseCPU2.c Tue Jul 29 17:15:35 2025 +0200 @@ -285,8 +285,6 @@ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); MX_RTC_init(); - GPIO_LEDs_VIBRATION_Init(); - GPIO_GNSS_Init(); GPIO_new_DEBUG_Init(); // added 170322 hw initGlobals(); @@ -528,7 +526,6 @@ externalInterface_SwitchPower33(false); if (hasExternalClock()) SystemClock_Config_HSI(); - GPIO_LEDs_VIBRATION_Init(); sleep_prepare(); while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */ @@ -537,6 +534,8 @@ } shutdownTick = 0; scheduleSleepMode(); + + /* wakeup starts here */ if (hasExternalClock()) SystemClock_Config_HSE(); EXTI_Wakeup_Button_DeInit(); @@ -555,8 +554,7 @@ externalInterface_SwitchPower33(true); } externalInterface_InitDatastruct(); - MX_USART6_UART_Init(); - GNSS_Init(&GNSS_Handle, &huart6); + GPIO_Init_V2(); // EXTILine0_Button_DeInit(); not now, later after testing break; } @@ -885,6 +883,9 @@ } void sleep_prepare(void) { + + GPIO_InitTypeDef GPIO_InitStruct; + EXTI_Wakeup_Button_Init(); compass_sleep(); @@ -897,7 +898,12 @@ MX_SPI3_DeInit(); ADCx_DeInit(); - GPIO_InitTypeDef GPIO_InitStruct; + if(GPIO_GetVersion() > 0) + { + GPIO_LED_GREEN_OFF(); + GPIO_LED_RED_OFF(); + GPIO_VIBRATION_OFF(); + } __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); @@ -909,35 +915,29 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); + #ifdef ENABLE_SLEEP_DEBUG GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */ #endif -/* +#ifdef ENABLE_GNSS_INTERN GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN); +#else + GPIO_InitStruct.Pin = GPIO_PIN_All; +#endif HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); -*/ + 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 | VIBRATION_CONTROL_PIN | LED_CONTROL_PIN_RED | LED_CONTROL_PIN_GREEN); + GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 ); /* could be added for debug purpose: | 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); - GPIO_InitStruct.Pin = GPIO_PIN_All; - HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); - GPIO_Power_MainCPU_OFF(); - if(GPIO_GetVersion() > 0) - { - GPIO_LED_GREEN_OFF(); - GPIO_LED_RED_OFF(); - GPIO_VIBRATION_OFF(); - } #ifdef ENABLE_GNSS_INTERN if(GPIO_GetVersion() > 0) { @@ -947,9 +947,9 @@ } #endif #ifndef ENABLE_SLEEP_DEBUG -/* +#ifndef ENABLE_GNSS_INTERN __HAL_RCC_GPIOB_CLK_DISABLE(); -*/ +#endif #endif __HAL_RCC_GPIOH_CLK_DISABLE(); }
--- a/Small_CPU/Src/gpio.c Sun Jul 13 17:20:45 2025 +0200 +++ b/Small_CPU/Src/gpio.c Tue Jul 29 17:15:35 2025 +0200 @@ -183,15 +183,21 @@ { if(GPIO_Version == 0) { - GPIO_Version = 1; - GPIO_LEDs_VIBRATION_Init(); + GPIO_Version = 1; + } +} +void GPIO_Init_V2(void) +{ + if(GPIO_Version == 1) + { + GPIO_LEDs_VIBRATION_Init(); #ifdef ENABLE_GNSS_INTERN - GNSS_IO_init(); - GPIO_GPS_ON(); - GPIO_GPS_BCKP_ON(); - MX_USART6_UART_Init(); - GNSS_Init(&GNSS_Handle, &huart6); + GNSS_IO_init(); + GPIO_GPS_ON(); + GPIO_GPS_BCKP_ON(); + MX_USART6_UART_Init(); + GNSS_Init(&GNSS_Handle, &huart6); #endif } }