<ol><li>Variables Initialize</li></ol>
backupRegisterValue
isAtDocking
isResetOnUndocking
undockedFlagValue
resetCause
properShutDownWord
isTimingInfoValid<br>
isResetByWDTOccurred<br>
<font color="#f15a23">2. __ASM("MOV R0, #0"); __ASM("MSR CONTROL, R0"")</font>
Don't know why need this??<br>
4. Clock Initialize<br>
OSC HFRCO<br>
CMU_OscillatorEnable(cmuOsc_HFRCO, true, true)
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO);<br>
<font color="#f15a23">CMU_HFRCOBandSet(cmuFHRCOBand_21MHz);</font>
CMU_ClockEnable(cmuClock_HFPER, true);<br>
CMU_ClockEnable(cmuClock_CORE, true);<br>
CMU_ClockEnable(cmuClock_CORELE, true);
OSC LFXO<br>
CMU_OscillatorEnable(cmuOsc_LFXO, true, true);
CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO);
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO);
CMU_ClockEnable(cmuClock_LFA, true);
CMU_ClockEnable(cmuClock_LFB, true);
CMU_ClockEnable(cmuClock_GPIO, true);
5. GPIO & WDT & ButtonInit & LCDInit<br>
GPIOInit();
CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO;
CMU_ClockEnable(cmuClock_GPIO, true);
GPIOInit();
CenterLineInti();<br>
GPIO_PinModeSet(BLE_RESET_PORT, BLE_RESET_PIN, gpioModeDisabled , 0u); // set BLE reset pin in HiZ
HardwareWDTReset();
Set WATCHDOG_KICK_PORT high & Low<br>
ButtonInit();
buttonStructure Init<br>
Configure Button GPIO<br>
ConfigInterrupt
ClearIRQ and Enable<br>
<ul><li><u><i><b>ButtonIRQHandle</b></i></u></li></ul>
GPIOConfigInterrupt(CHARGING_PG_PORT, CHARGING_PG_PIN, TRUE, TRUE, TRUE);
LCDShutdown();
6. Dock Status Check & handling<br>
DockStatusOnStartup
StatusCheckDockedMode( TRUE, &isAtDocking );
Dock Status Handling<br>
If docking, set flags<br>
isDocked = TRUE;<br>
isChargingMode = TRUE;
isInstrumentInChargingMode = TRUE;
isAtPeeking = FALSE;
If not docking<br>
isDocked = FALSE;<br>
if BURAM)UNDOCK_POWERON_FLAG == UNDOCK_POWERON_PATTERN && BURAM_FACTORY_SLEEP_MODE == FACTORY_SLEEP_PATTERN, <br>
BURAM_UNDOCK_POWERON_FLAG = 0<br>
isResetOnUndocking = TRUE;<br>
isAtPeeking = FALSE;<br>
7. Alarm, SPI, Button, GUI, BackupPower Setting<br>
AlarmOutInit();
SPIInit(SPI_PORT_1);
ButtonInit();
GuiLib_Init();
GuiLib_Clear();
BackUpPowerModeSetting();
8. Reset Cause check<br>
RMU_ResetCauseGet()<br>
?? Don't know where the cause was assigned<br>
ret = RMU-> RSTCAUSE<br>
ret & RMU_RSTCAUSE_EM4RST<br>
ret &= ~(RMU_RSTCAUSE_BODREGRST|<br> RMU_RSTCAUSE_BODUNREGRST|<br> RMU_RSTCAUSE_LOCKUPRST|<br> RMU_RSTCAUSE_SYSREQRST);
<font color="#0076b3">divide one flag into different flags.<br></font>
ret & RMU_RSTCAUSE_PORST
ret = RMU_RSTCAUSE_PORST;
<font color="#0076b3">This flag has the most priority, and will overwrite the other flags.</font><br>
if ((ret & 0x83) == RMU_RSTCAUSE_BODUNREGRST)
ret = RMU_RSTCAUSE_BODUNREGRST;
<strike>This flag has the second priority.<br></strike>
else if ((ret & 0x1f) == RMU_RSTCAUSE_BODREGRST)
ret = RMU_RSTCAUSE_BODREGRST;
Third priority flag<br>
else if ((ret & 0x1b) & (RMU_RSTCAUSE_EXTRST | RMU_RSTCAUSE_WDOGRST))
ret &= RMU_RSTCAUSE_EXTRST | RMU_RSTCAUSE_WDOGRST;
else if ((ret & 0x7ff) & (RMU_RSTCAUSE_LOCKUPRST | RMU_RSTCAUSE_SYSREQRST))
ret &= RMU_RSTCAUSE_LOCKUPRST | RMU_RSTCAUSE_SYSREQRST;
#if defined( RMU_RSTCAUSE_BODAVDD0 )
else if (ret & RMU_RSTCAUSE_BODAVDD0)
ret = RMU_RSTCAUSE_BODAVDD0;
else if (ret & RMU_RSTCAUSE_BODAVDD1)
ret = RMU_RSTCAUSE_BODAVDD1;
else if (ret & (RMU_RSTCAUSE_EM4WURST|RMU_RSTCAUSE_EM4RST))
ret &= (RMU_RSTCAUSE_EM4WURST|<br>#if defined( RMU_RSTCAUSE_BUMODERST )<br> RMU_RSTCAUSE_BUMODERST|<br>#endif<br> RMU_RSTCAUSE_EM4RST);
else if (ret & (RMU_RSTCAUSE_EM4RST|RMU_RSTCAUSE_EXTRST))
ret &= (RMU_RSTCAUSE_EM4RST|RMU_RSTCAUSE_EXTRST);
properShutDownWord = BURAM_GET_REGISTER(BURAM_SHUTDOWN_WORD_FLAG);
DatalogSessionCheckBackUpPowerExpiry(FALSE);
Different Reset status handling<br>
RMU_RSTCAUSE_EXTRST
isResetByWDTOccurred = true;<br>
isAtPeeking = FALSE;<br>
BURTCInit();
TimeTrackerSetCounterUponReset();
isTimingInfoValid = TRUE;
(void)TimeTrackerIsTimingValid();
isErrorLogDueForWDTReset = TRUE;
((RMU_RSTCAUSE_BUMODERST & RMU->RSTCAUSE) && ((properShutDownWord != SHUTDOWN_VALUE ) && (isAbnormalPowerOff == FALSE)))
isResetAfterBackUpPowerMode = TRUE;<br>
9. Sensor Bias check (including GFE &DAS)<br>
<font color="#f15a23">10. hardware Power on<br></font>
11. RTOS Management<br>
K_OS_Init()
K_Task_Create(1u, &taskPeekingSlot, TaskPeeking, TASK_PEEKING_STACK_SIZE);<br>
K_Task_Create(2u, &taskModbusSlot, TaskModbus, TASK_MODBUS_STACK_SIZE);<br>
K_Task_Create(3u,&taskInitializationSlot, TaskInitialization, TASK_INIT_STACK_SIZE);<br>
K_Task_Create(4u, &taskIdleSlot,TaskIdle, TASK_IDLE_STACK_SIZE);<br>
K_Task_Create(3u, &taskSelfTestSlot, TaskSelfTest, TASK_SELTTEST_STACK_SIZE);<br>
K_Task_Create(3u, &taskSensorSlot, TaskSensor, TASK_SENSOR_STACK_SIZE);<br>
K_Task_Create(3u, &taskBatterySlot, TaskBattery, TASK_BATTERY_STACK_SIZE);<br>
K_Task_Create(3u, &taskPumpSlot,TaskPump, TASK_PUMP_STACK_SIZE);<br>
K_Task_Create(3u, &taskWirelessSlot,TaskWireless,TASK_WIRELESS_STACK_SIZE);<br>
K_Task_Create(3u, &taskADCReadingsSlot, TaskADCReadings, TASK_ADC_STACK_SIZE);<br>
K_Task_Create
12. Repower on check<br>