Mercurial > public > ostc4
comparison Small_CPU/Src/baseCPU2.c @ 1024:9fabad6436a2 GasConsumption
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 |
| parents | 67e3dbc4d212 |
| children |
comparison
equal
deleted
inserted
replaced
| 1023:d268fc2b6052 | 1024:9fabad6436a2 |
|---|---|
| 283 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000); | 283 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000); |
| 284 HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK); | 284 HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK); |
| 285 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); | 285 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); |
| 286 | 286 |
| 287 MX_RTC_init(); | 287 MX_RTC_init(); |
| 288 GPIO_LEDs_VIBRATION_Init(); | |
| 289 GPIO_GNSS_Init(); | |
| 290 GPIO_new_DEBUG_Init(); // added 170322 hw | 288 GPIO_new_DEBUG_Init(); // added 170322 hw |
| 291 initGlobals(); | 289 initGlobals(); |
| 292 | 290 |
| 293 /* printf("CPU2-RTE running...\n"); */ | 291 /* printf("CPU2-RTE running...\n"); */ |
| 294 | 292 |
| 526 extInterfaceActive = externalInterface_isEnabledPower33(); | 524 extInterfaceActive = externalInterface_isEnabledPower33(); |
| 527 externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF); | 525 externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF); |
| 528 externalInterface_SwitchPower33(false); | 526 externalInterface_SwitchPower33(false); |
| 529 if (hasExternalClock()) | 527 if (hasExternalClock()) |
| 530 SystemClock_Config_HSI(); | 528 SystemClock_Config_HSI(); |
| 531 GPIO_LEDs_VIBRATION_Init(); | |
| 532 sleep_prepare(); | 529 sleep_prepare(); |
| 533 | 530 |
| 534 while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */ | 531 while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */ |
| 535 { | 532 { |
| 536 HAL_Delay(10); | 533 HAL_Delay(10); |
| 537 } | 534 } |
| 538 shutdownTick = 0; | 535 shutdownTick = 0; |
| 539 scheduleSleepMode(); | 536 scheduleSleepMode(); |
| 537 | |
| 538 /* wakeup starts here */ | |
| 540 if (hasExternalClock()) | 539 if (hasExternalClock()) |
| 541 SystemClock_Config_HSE(); | 540 SystemClock_Config_HSE(); |
| 542 EXTI_Wakeup_Button_DeInit(); | 541 EXTI_Wakeup_Button_DeInit(); |
| 543 ADCx_Init(); | 542 ADCx_Init(); |
| 544 GPIO_Power_MainCPU_Init(); | 543 GPIO_Power_MainCPU_Init(); |
| 553 if(extInterfaceActive) | 552 if(extInterfaceActive) |
| 554 { | 553 { |
| 555 externalInterface_SwitchPower33(true); | 554 externalInterface_SwitchPower33(true); |
| 556 } | 555 } |
| 557 externalInterface_InitDatastruct(); | 556 externalInterface_InitDatastruct(); |
| 558 MX_USART6_UART_Init(); | 557 GPIO_Init_V2(); |
| 559 GNSS_Init(&GNSS_Handle, &huart6); | |
| 560 // EXTILine0_Button_DeInit(); not now, later after testing | 558 // EXTILine0_Button_DeInit(); not now, later after testing |
| 561 break; | 559 break; |
| 562 } | 560 } |
| 563 | 561 |
| 564 #ifdef DEBUG_RUNTIME | 562 #ifdef DEBUG_RUNTIME |
| 883 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *I2cHandle) { | 881 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *I2cHandle) { |
| 884 | 882 |
| 885 } | 883 } |
| 886 | 884 |
| 887 void sleep_prepare(void) { | 885 void sleep_prepare(void) { |
| 886 | |
| 887 GPIO_InitTypeDef GPIO_InitStruct; | |
| 888 | |
| 888 EXTI_Wakeup_Button_Init(); | 889 EXTI_Wakeup_Button_Init(); |
| 889 | 890 |
| 890 compass_sleep(); | 891 compass_sleep(); |
| 891 HAL_Delay(100); | 892 HAL_Delay(100); |
| 892 accelerator_sleep(); | 893 accelerator_sleep(); |
| 894 | 895 |
| 895 I2C_DeInit(); | 896 I2C_DeInit(); |
| 896 MX_SPI_DeInit(); | 897 MX_SPI_DeInit(); |
| 897 MX_SPI3_DeInit(); | 898 MX_SPI3_DeInit(); |
| 898 ADCx_DeInit(); | 899 ADCx_DeInit(); |
| 899 | |
| 900 GPIO_InitTypeDef GPIO_InitStruct; | |
| 901 | |
| 902 __HAL_RCC_GPIOA_CLK_ENABLE(); | |
| 903 __HAL_RCC_GPIOB_CLK_ENABLE(); | |
| 904 __HAL_RCC_GPIOC_CLK_ENABLE(); | |
| 905 __HAL_RCC_GPIOH_CLK_ENABLE(); | |
| 906 | |
| 907 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; | |
| 908 GPIO_InitStruct.Speed = GPIO_SPEED_LOW; | |
| 909 GPIO_InitStruct.Pull = GPIO_NOPULL; | |
| 910 GPIO_InitStruct.Pin = GPIO_PIN_All; | |
| 911 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); | |
| 912 #ifdef ENABLE_SLEEP_DEBUG | |
| 913 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */ | |
| 914 #endif | |
| 915 | |
| 916 /* | |
| 917 GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN); | |
| 918 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); | |
| 919 */ | |
| 920 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | EXT33V_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */ | |
| 921 | |
| 922 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct); | |
| 923 | |
| 924 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | VIBRATION_CONTROL_PIN | LED_CONTROL_PIN_RED | LED_CONTROL_PIN_GREEN); | |
| 925 #ifdef ENABLE_SLEEP_DEBUG | |
| 926 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */ | |
| 927 #endif | |
| 928 HAL_GPIO_Init( GPIOA, &GPIO_InitStruct); | |
| 929 | |
| 930 GPIO_InitStruct.Pin = GPIO_PIN_All; | |
| 931 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); | |
| 932 | |
| 933 GPIO_Power_MainCPU_OFF(); | |
| 934 | 900 |
| 935 if(GPIO_GetVersion() > 0) | 901 if(GPIO_GetVersion() > 0) |
| 936 { | 902 { |
| 937 GPIO_LED_GREEN_OFF(); | 903 GPIO_LED_GREEN_OFF(); |
| 938 GPIO_LED_RED_OFF(); | 904 GPIO_LED_RED_OFF(); |
| 939 GPIO_VIBRATION_OFF(); | 905 GPIO_VIBRATION_OFF(); |
| 940 } | 906 } |
| 907 | |
| 908 __HAL_RCC_GPIOA_CLK_ENABLE(); | |
| 909 __HAL_RCC_GPIOB_CLK_ENABLE(); | |
| 910 __HAL_RCC_GPIOC_CLK_ENABLE(); | |
| 911 __HAL_RCC_GPIOH_CLK_ENABLE(); | |
| 912 | |
| 913 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; | |
| 914 GPIO_InitStruct.Speed = GPIO_SPEED_LOW; | |
| 915 GPIO_InitStruct.Pull = GPIO_NOPULL; | |
| 916 GPIO_InitStruct.Pin = GPIO_PIN_All; | |
| 917 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct); | |
| 918 | |
| 919 #ifdef ENABLE_SLEEP_DEBUG | |
| 920 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */ | |
| 921 #endif | |
| 922 | |
| 923 #ifdef ENABLE_GNSS_INTERN | |
| 924 GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN); | |
| 925 #else | |
| 926 GPIO_InitStruct.Pin = GPIO_PIN_All; | |
| 927 #endif | |
| 928 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); | |
| 929 | |
| 930 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | EXT33V_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */ | |
| 931 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct); | |
| 932 | |
| 933 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 */ | |
| 934 #ifdef ENABLE_SLEEP_DEBUG | |
| 935 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */ | |
| 936 #endif | |
| 937 HAL_GPIO_Init( GPIOA, &GPIO_InitStruct); | |
| 938 | |
| 939 GPIO_Power_MainCPU_OFF(); | |
| 940 | |
| 941 #ifdef ENABLE_GNSS_INTERN | 941 #ifdef ENABLE_GNSS_INTERN |
| 942 if(GPIO_GetVersion() > 0) | 942 if(GPIO_GetVersion() > 0) |
| 943 { | 943 { |
| 944 GPIO_GPS_BCKP_ON(); // mH : costs 100µA in sleep - beware | 944 GPIO_GPS_BCKP_ON(); // mH : costs 100µA in sleep - beware |
| 945 /* GPIO_GPS_OFF(); will be done in transition sleep => deep sleep */ | 945 /* GPIO_GPS_OFF(); will be done in transition sleep => deep sleep */ |
| 946 MX_USART6_UART_DeInit(); | 946 MX_USART6_UART_DeInit(); |
| 947 } | 947 } |
| 948 #endif | 948 #endif |
| 949 #ifndef ENABLE_SLEEP_DEBUG | 949 #ifndef ENABLE_SLEEP_DEBUG |
| 950 /* | 950 #ifndef ENABLE_GNSS_INTERN |
| 951 __HAL_RCC_GPIOB_CLK_DISABLE(); | 951 __HAL_RCC_GPIOB_CLK_DISABLE(); |
| 952 */ | 952 #endif |
| 953 #endif | 953 #endif |
| 954 __HAL_RCC_GPIOH_CLK_DISABLE(); | 954 __HAL_RCC_GPIOH_CLK_DISABLE(); |
| 955 } | 955 } |
| 956 | 956 |
| 957 /* | 957 /* |
