Mercurial > public > ostc4
comparison Small_CPU/Src/baseCPU2.c @ 696:cc542448fb28
Merge
author | heinrichsweikamp |
---|---|
date | Fri, 19 Aug 2022 11:30:24 +0200 |
parents | 49b164022335 |
children | f1b40364b0af |
comparison
equal
deleted
inserted
replaced
661:87bee7cc77b3 | 696:cc542448fb28 |
---|---|
140 #include "batteryGasGauge.h" | 140 #include "batteryGasGauge.h" |
141 #include "batteryCharger.h" | 141 #include "batteryCharger.h" |
142 #include "scheduler.h" | 142 #include "scheduler.h" |
143 #include "tm_stm32f4_otp.h" | 143 #include "tm_stm32f4_otp.h" |
144 #include "externalInterface.h" | 144 #include "externalInterface.h" |
145 #include "uart.h" | |
145 | 146 |
146 // From Common/Inc: | 147 // From Common/Inc: |
147 #include "calc_crush.h" | 148 #include "calc_crush.h" |
148 #include "decom.h" | 149 #include "decom.h" |
149 #include "FirmwareData.h" | 150 #include "FirmwareData.h" |
163 | 164 |
164 // SHALL LOAD AT 0x08000000 + 0x00005000 = 0x08005000. | 165 // SHALL LOAD AT 0x08000000 + 0x00005000 = 0x08005000. |
165 // See CPU2-RTE.ld | 166 // See CPU2-RTE.ld |
166 const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= { | 167 const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= { |
167 .versionFirst = 2, | 168 .versionFirst = 2, |
168 .versionSecond = 7, | 169 .versionSecond = 9, |
169 .versionThird = 0, | 170 .versionThird = 0, |
170 .versionBeta = 0, | 171 .versionBeta = 0, |
171 | 172 |
172 /* 4 bytes with trailing 0 */ | 173 /* 4 bytes with trailing 0 */ |
173 .signature = "mh", | 174 .signature = "mh", |
174 | 175 |
175 .release_year = 21, | 176 .release_year = 22, |
176 .release_month = 4, | 177 .release_month = 8, |
177 .release_day = 26, | 178 .release_day = 19, |
178 .release_sub = 0, | 179 .release_sub = 0, |
179 | 180 |
180 /* max 48 with trailing 0 */ | 181 /* max 48 with trailing 0 */ |
181 //release_info ="12345678901234567890123456789012345678901" | 182 //release_info ="12345678901234567890123456789012345678901" |
182 .release_info = "stable Nov'19", | 183 .release_info = "stable Nov'19", |
227 #define WIRELSS_FALLING_IRQn EXTI2_IRQn | 228 #define WIRELSS_FALLING_IRQn EXTI2_IRQn |
228 | 229 |
229 #define WIRELSS_POWER_GPIO_PIN GPIO_PIN_12 | 230 #define WIRELSS_POWER_GPIO_PIN GPIO_PIN_12 |
230 #define WIRELSS_POWER_GPIO_PORT GPIOB | 231 #define WIRELSS_POWER_GPIO_PORT GPIOB |
231 #define WIRELSS_POWER_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() | 232 #define WIRELSS_POWER_HAL_RCC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
233 | |
234 | |
235 #define LED_CONTROL_PIN GPIO_PIN_3 /* PortC */ | |
236 #define MAINCPU_CONTROL_PIN GPIO_PIN_0 /* PortC */ | |
232 | 237 |
233 /* Private macro -------------------------------------------------------------*/ | 238 /* Private macro -------------------------------------------------------------*/ |
234 | 239 |
235 /* Private variables ---------------------------------------------------------*/ | 240 /* Private variables ---------------------------------------------------------*/ |
236 uint32_t global_test_time_counter = 0; | 241 uint32_t global_test_time_counter = 0; |
351 } | 356 } |
352 init_battery_gas_gauge(); | 357 init_battery_gas_gauge(); |
353 HAL_Delay(10); | 358 HAL_Delay(10); |
354 battery_gas_gauge_get_data(); | 359 battery_gas_gauge_get_data(); |
355 | 360 |
361 global.lifeData.battery_voltage = get_voltage(); | |
362 global.lifeData.battery_charge = get_charge(); | |
363 copyBatteryData(); | |
364 | |
356 MX_SPI3_Init(); | 365 MX_SPI3_Init(); |
357 | 366 |
358 if(coldstart != 0xA5) /* Not reading a 0xA5 means the memory cells has not been initialized before => cold start */ | 367 if(coldstart != 0xA5) /* Not reading a 0xA5 means the memory cells has not been initialized before => cold start */ |
359 { | 368 { |
360 coldstart = 0xA5; | 369 coldstart = 0xA5; |
361 battery_gas_gauge_set(0); | 370 |
371 set_charge_state(Charger_ColdStart); | |
372 | |
362 global.dataSendToMaster.power_on_reset = 1; | 373 global.dataSendToMaster.power_on_reset = 1; |
363 global.deviceDataSendToMaster.power_on_reset = 1; | 374 global.deviceDataSendToMaster.power_on_reset = 1; |
364 | 375 |
365 if (!scheduleSetButtonResponsiveness()) | 376 if (!scheduleSetButtonResponsiveness()) |
366 { | 377 { |
371 scheduleSetButtonResponsiveness(); // init | 382 scheduleSetButtonResponsiveness(); // init |
372 HAL_Delay(1); | 383 HAL_Delay(1); |
373 } | 384 } |
374 } | 385 } |
375 } | 386 } |
376 | 387 else |
377 global.lifeData.battery_voltage = get_voltage(); | 388 { |
378 global.lifeData.battery_charge = get_charge(); | 389 set_charge_state(Charger_NotConnected); |
379 copyBatteryData(); | 390 } |
380 | 391 |
381 ADCx_Init(); | 392 ADCx_Init(); |
382 GPIO_Power_MainCPU_Init(); | 393 GPIO_Power_MainCPU_Init(); |
394 | |
395 externalInterface_InitPower33(); | |
396 | |
383 global.mode = MODE_POWERUP; | 397 global.mode = MODE_POWERUP; |
384 #else | 398 #else |
385 init_pressure(); | 399 init_pressure(); |
386 init_surface_ring(0); | 400 init_surface_ring(0); |
387 | 401 |
406 GPIO_Power_MainCPU_ON(); | 420 GPIO_Power_MainCPU_ON(); |
407 } | 421 } |
408 SPI_synchronize_with_Master(); | 422 SPI_synchronize_with_Master(); |
409 MX_DMA_Init(); | 423 MX_DMA_Init(); |
410 MX_SPI1_Init(); | 424 MX_SPI1_Init(); |
425 MX_USART1_UART_Init(); | |
411 SPI_Start_single_TxRx_with_Master(); /* be prepared for the first data exchange */ | 426 SPI_Start_single_TxRx_with_Master(); /* be prepared for the first data exchange */ |
412 Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_HARD); | 427 Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_HARD); |
413 EXTI_Test_Button_Init(); | 428 EXTI_Test_Button_Init(); |
414 global.mode = MODE_SURFACE; | 429 global.mode = MODE_SURFACE; |
415 break; | 430 break; |
476 GPIO_Power_MainCPU_OFF(); | 491 GPIO_Power_MainCPU_OFF(); |
477 EXTI_Test_Button_DeInit(); | 492 EXTI_Test_Button_DeInit(); |
478 EXTI_Wakeup_Button_Init(); | 493 EXTI_Wakeup_Button_Init(); |
479 NOT_USED_AT_THE_MOMENT_scheduleSleepMode(); | 494 NOT_USED_AT_THE_MOMENT_scheduleSleepMode(); |
480 */ | 495 */ |
496 | |
481 EXTI_Test_Button_DeInit(); | 497 EXTI_Test_Button_DeInit(); |
498 externalInterface_SwitchPower33(false); | |
482 if (hasExternalClock()) | 499 if (hasExternalClock()) |
483 SystemClock_Config_HSI(); | 500 SystemClock_Config_HSI(); |
484 sleep_prepare(); | 501 sleep_prepare(); |
485 | 502 |
486 GPIO_LED_Init(); | 503 GPIO_LED_Init(); |
497 accelerator_init(); | 514 accelerator_init(); |
498 SPI_synchronize_with_Master(); | 515 SPI_synchronize_with_Master(); |
499 MX_DMA_Init(); | 516 MX_DMA_Init(); |
500 MX_SPI1_Init(); | 517 MX_SPI1_Init(); |
501 SPI_Start_single_TxRx_with_Master(); | 518 SPI_Start_single_TxRx_with_Master(); |
519 | |
520 if(externalInterface_isEnabledPower33()) | |
521 { | |
522 externalInterface_SwitchPower33(true); | |
523 } | |
502 | 524 |
503 // EXTILine0_Button_DeInit(); not now, later after testing | 525 // EXTILine0_Button_DeInit(); not now, later after testing |
504 break; | 526 break; |
505 } | 527 } |
506 | 528 |
791 | 813 |
792 static void GPIO_LED_Init(void) { | 814 static void GPIO_LED_Init(void) { |
793 GPIO_InitTypeDef GPIO_InitStructure; | 815 GPIO_InitTypeDef GPIO_InitStructure; |
794 | 816 |
795 __GPIOC_CLK_ENABLE(); | 817 __GPIOC_CLK_ENABLE(); |
796 GPIO_InitStructure.Pin = GPIO_PIN_3; | 818 GPIO_InitStructure.Pin = LED_CONTROL_PIN; |
797 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; | 819 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; |
798 GPIO_InitStructure.Pull = GPIO_PULLUP; | 820 GPIO_InitStructure.Pull = GPIO_PULLUP; |
799 GPIO_InitStructure.Speed = GPIO_SPEED_FAST; | 821 GPIO_InitStructure.Speed = GPIO_SPEED_FAST; |
800 HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); | 822 HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); |
801 } | 823 } |
803 void GPIO_new_DEBUG_Init(void) { | 825 void GPIO_new_DEBUG_Init(void) { |
804 #ifdef DEBUG_PIN_ACTIVE | 826 #ifdef DEBUG_PIN_ACTIVE |
805 GPIO_InitTypeDef GPIO_InitStructure; | 827 GPIO_InitTypeDef GPIO_InitStructure; |
806 | 828 |
807 __GPIOC_CLK_ENABLE(); | 829 __GPIOC_CLK_ENABLE(); |
808 GPIO_InitStructure.Pin = GPIO_PIN_3; | 830 GPIO_InitStructure.Pin = LED_CONTROL_PIN; |
809 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; | 831 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; |
810 GPIO_InitStructure.Pull = GPIO_PULLUP; | 832 GPIO_InitStructure.Pull = GPIO_PULLUP; |
811 GPIO_InitStructure.Speed = GPIO_SPEED_FAST; | 833 GPIO_InitStructure.Speed = GPIO_SPEED_FAST; |
812 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); | 834 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); |
813 #endif | 835 #endif |
814 } | 836 } |
815 | 837 |
816 void GPIO_new_DEBUG_LOW(void) { | 838 void GPIO_new_DEBUG_LOW(void) { |
817 #ifdef DEBUG_PIN_ACTIVE | 839 #ifdef DEBUG_PIN_ACTIVE |
818 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET); | 840 HAL_GPIO_WritePin(GPIOC,LED_CONTROL_PIN,GPIO_PIN_RESET); |
819 #endif | 841 #endif |
820 } | 842 } |
821 | 843 |
822 void GPIO_new_DEBUG_HIGH(void) { | 844 void GPIO_new_DEBUG_HIGH(void) { |
823 #ifdef DEBUG_PIN_ACTIVE | 845 #ifdef DEBUG_PIN_ACTIVE |
824 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET); | 846 HAL_GPIO_WritePin(GPIOC,LED_CONTROL_PIN,GPIO_PIN_SET); |
825 #endif | 847 #endif |
826 } | 848 } |
827 | 849 |
828 static void GPIO_Power_MainCPU_Init(void) { | 850 static void GPIO_Power_MainCPU_Init(void) { |
829 GPIO_InitTypeDef GPIO_InitStructure; | 851 GPIO_InitTypeDef GPIO_InitStructure; |
830 __GPIOC_CLK_ENABLE(); | 852 __GPIOC_CLK_ENABLE(); |
831 GPIO_InitStructure.Pin = GPIO_PIN_0; | 853 GPIO_InitStructure.Pin = MAINCPU_CONTROL_PIN; |
832 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; | 854 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; |
833 GPIO_InitStructure.Pull = GPIO_PULLUP; | 855 GPIO_InitStructure.Pull = GPIO_PULLUP; |
834 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | 856 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; |
835 HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); | 857 HAL_GPIO_Init( GPIOC, &GPIO_InitStructure); |
836 HAL_GPIO_WritePin( GPIOC, GPIO_PIN_0, GPIO_PIN_RESET); | 858 HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_RESET); |
837 } | 859 } |
838 | 860 |
839 static void GPIO_Power_MainCPU_ON(void) { | 861 static void GPIO_Power_MainCPU_ON(void) { |
840 HAL_GPIO_WritePin( GPIOC, GPIO_PIN_0, GPIO_PIN_RESET); | 862 HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_RESET); |
841 } | 863 } |
842 | 864 |
843 static void GPIO_Power_MainCPU_OFF(void) { | 865 static void GPIO_Power_MainCPU_OFF(void) { |
844 HAL_GPIO_WritePin( GPIOC, GPIO_PIN_0, GPIO_PIN_SET); | 866 HAL_GPIO_WritePin( GPIOC, MAINCPU_CONTROL_PIN, GPIO_PIN_SET); |
845 } | 867 } |
846 | 868 |
847 /** | 869 /** |
848 * @brief Configures EXTI Line0 (connected to PA0 + PA1 pin) in interrupt mode | 870 * @brief Configures EXTI Line0 (connected to PA0 + PA1 pin) in interrupt mode |
849 * @param None | 871 * @param None |
936 | 958 |
937 } | 959 } |
938 | 960 |
939 void sleep_prepare(void) { | 961 void sleep_prepare(void) { |
940 EXTI_Wakeup_Button_Init(); | 962 EXTI_Wakeup_Button_Init(); |
941 /* | 963 |
942 GPIO_InitStruct.Pull = GPIO_PULLUP; | |
943 GPIO_InitStruct.Pin = GPIO_PIN_0; | |
944 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | |
945 */ | |
946 compass_sleep(); | 964 compass_sleep(); |
947 HAL_Delay(100); | 965 HAL_Delay(100); |
948 accelerator_sleep(); | 966 accelerator_sleep(); |
949 HAL_Delay(100); | 967 HAL_Delay(100); |
950 | 968 |
970 #endif | 988 #endif |
971 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); | 989 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct); |
972 | 990 |
973 GPIO_InitStruct.Pin = | 991 GPIO_InitStruct.Pin = |
974 GPIO_PIN_All | 992 GPIO_PIN_All |
975 ^ ( GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_14 | 993 ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | CHARGE_IN_PIN | EXT33V_CONTROL_PIN | LED_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */ |
976 | GPIO_PIN_15); /* power off & charger in & charge out & OSC32*/ | 994 |
977 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct); | 995 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct); |
978 | 996 |
979 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0); | 997 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0); |
980 #ifdef DEBUGMODE | 998 #ifdef DEBUGMODE |
981 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */ | 999 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */ |