foxBMS  1.4.1
The foxBMS Battery Management System API Documentation
main.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2022, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * We kindly request you to use one or more of the following phrases to refer to
34  * foxBMS in your hardware, software, documentation or advertising materials:
35  *
36  * - ″This product uses parts of foxBMS®″
37  * - ″This product includes parts of foxBMS®″
38  * - ″This product is derived from foxBMS®″
39  *
40  */
41 
42 /**
43  * @file main.c
44  * @author foxBMS Team
45  * @date 2019-08-27 (date of creation)
46  * @updated 2022-10-27 (date of last update)
47  * @version v1.4.1
48  * @ingroup GENERAL
49  * @prefix TODO
50  *
51  * @brief Main function
52  *
53  * @details TODO
54  */
55 
56 /*========== Includes =======================================================*/
57 #include "main.h"
58 
59 #include "HL_can.h"
60 #include "HL_crc.h"
61 #include "HL_etpwm.h"
62 #include "HL_gio.h"
63 #include "HL_het.h"
64 #include "HL_pinmux.h"
65 #include "HL_spi.h"
66 #include "HL_sys_core.h"
67 
68 #include "adc.h"
69 #include "checksum.h"
70 #include "diag.h"
71 #include "dma.h"
72 #include "foxmath.h"
73 #include "i2c.h"
74 #include "led.h"
75 #include "masterinfo.h"
76 #include "os.h"
77 #include "pwm.h"
78 
79 /*========== Macros and Definitions =========================================*/
80 
81 /*========== Static Constant and Variable Definitions =======================*/
82 
83 /*========== Extern Constant and Variable Definitions =======================*/
84 
85 /*========== Static Function Prototypes =====================================*/
86 
87 /*========== Static Function Implementations ================================*/
88 
89 /*========== Extern Function Implementations ================================*/
90 int main(void) {
91  MINFO_SetResetSource(getResetSource()); /* Get reset source and clear respective flags */
92  _enable_IRQ_interrupt_();
93  muxInit();
94  gioInit();
95  canInit();
96  spiInit();
97  adcInit();
98  hetInit();
99  etpwmInit();
100  crcInit();
101  LED_SetDebugLed();
102  I2C_Initialize();
103  DMA_Initialize();
104  PWM_Initialize();
107  const STD_RETURN_TYPE_e checkTimeHasPassedSelfTestReturnValue = OS_CheckTimeHasPassedSelfTest();
108  FAS_ASSERT(checkTimeHasPassedSelfTestReturnValue == STD_OK);
109 
111  if (OS_INIT_PRE_OS != os_boot) {
112  /* Could not create Queues, Mutexes, Events and Tasks do not boot further from this point on */
114  }
115 
116  if (STD_OK != CHK_ValidateChecksum()) {
118  /* Could not validate checksum do not boot further from this point on */
120  }
121  }
122 
124 
126  /* we must never get here; there is no way to determine the exit state of this program,
127  * but for the sake of correctness we exit with an error code */
128  return 1;
129 }
130 
131 /*========== Externalized Static Function Implementations (Unit Test) =======*/
Headers for the driver for the ADC module.
STD_RETURN_TYPE_e CHK_ValidateChecksum(void)
Definition: checksum.c:70
checksum module header
DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diagId, DIAG_EVENT_e event, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_Handler provides generic error handling, based on diagnosis group.
Definition: diag.c:243
STD_RETURN_TYPE_e DIAG_Initialize(DIAG_DEV_s *diag_dev_pointer)
DIAG_Init initializes all needed structures/buffers.
Definition: diag.c:113
Diagnosis driver header.
@ DIAG_HANDLER_RETURN_OK
Definition: diag.h:65
DIAG_DEV_s diag_device
Definition: diag_cfg.c:227
@ DIAG_EVENT_NOT_OK
Definition: diag_cfg.h:258
@ DIAG_SYSTEM
Definition: diag_cfg.h:270
@ DIAG_ID_FLASHCHECKSUM
Definition: diag_cfg.h:175
void DMA_Initialize(void)
Enables the DMA module.
Definition: dma.c:74
Headers for the driver for the DMA module.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:252
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
Definition: fassert.h:126
void MATH_StartupSelfTest(void)
: self test for math functions that can be called at startup
Definition: foxmath.c:81
math library for often used math functions
STD_RETURN_TYPE_e
Definition: fstd_types.h:81
@ STD_OK
Definition: fstd_types.h:82
void I2C_Initialize(void)
Definition: i2c.c:75
Header for the driver for the I2C module.
void LED_SetDebugLed(void)
Turn debug LED on.
Definition: led.c:84
Header file of the debug LED driver.
int main(void)
main function of foxBMS
Definition: main.c:90
Main function header.
void MINFO_SetResetSource(resetSource_t resetSource)
Set reason for last reset.
Definition: masterinfo.c:79
General foxBMS-master system information.
uint32_t os_schedulerStartTime
Scheduler "zero" time for task phase control.
Definition: os.c:71
STD_RETURN_TYPE_e OS_CheckTimeHasPassedSelfTest(void)
Does a self check if the OS_CheckTimeHasPassedWithTimestamp works as expected.
Definition: os.c:148
void OS_InitializeOperatingSystem(void)
Initialization the RTOS interface.
Definition: os.c:79
volatile OS_BOOT_STATE_e os_boot
Definition: os.c:69
Declaration of the OS wrapper interface.
@ OS_INIT_PRE_OS
Definition: os.h:105
void OS_StartScheduler(void)
Starts the operating system scheduler.
Definition: os_freertos.c:79
uint32_t OS_GetTickCount(void)
Returns OS based system tick value.
Definition: os_freertos.c:139
void PWM_Initialize(void)
Initializes the ETPWM and the ECAP module.
Definition: pwm.c:124
PWM driver for the TMS570LC43xx.