36static uint8_t GetClearResetFlagPosition(
void);
38static uint8_t GetClearMachineCheckMask(
void);
49 const uint8_t flagPos = GetClearResetFlagPosition();
50 const uint8_t machineCheckPos = (uint8_t)RSTCTRL_MCRF_bp;
51 const uint8_t errorControllerPos = (uint8_t)RSTCTRL_ECRF_bp;
52 const uint8_t watchdogPos = (uint8_t)RSTCTRL_WDRF_bp;
55 if (flagPos == machineCheckPos)
57 resetReason = GetClearMachineCheckReason();
59 else if (flagPos == errorControllerPos)
61 resetReason = GetErrorControllerReason();
63 else if (flagPos == watchdogPos)
65 resetReason = GetWatchdogReason();
69 const uint8_t msb = 7U;
74 const uint8_t reasonVal = flagOffset + flagPos;
85static uint8_t GetClearResetFlagPosition(
void)
87 const uint8_t allFlagsMask = 0xFFU;
90 uint8_t flagPosition = 0xFFU;
94 for (int8_t bitPos = msb; bitPos >= 0; bitPos--)
97 uint8_t flagMask = ((uint8_t)1 << (uint8_t)bitPos);
98 if ((resetFlags & flagMask) == flagMask)
101 flagPosition = (uint8_t)bitPos;
111 uint8_t machineCheckPosition = GetClearMachineCheckMask();
113 const uint8_t msb = 9U;
114 if (machineCheckPosition <= msb)
118 const uint8_t reasonVal = machineCheckOffset + machineCheckPosition;
127static uint8_t GetClearMachineCheckMask(
void)
129 const uint8_t allFlagsMask = 0xFFU;
134 uint8_t machineCheckPosition = 0xFFU;
137 const int8_t msb = 9;
138 for (int8_t bitPos = msb; bitPos >= 0; bitPos--)
141 const uint16_t flagMask = (uint16_t)1U << (uint8_t)bitPos;
142 if ((resetFlags & flagMask) == flagMask)
145 machineCheckPosition = (uint8_t)bitPos;
149 return machineCheckPosition;
156 const uint8_t maxCause = (uint8_t)ERRCTRL_CAUSE_EVSYS1_gc;
157 if (cause <= maxCause)
161 const uint8_t reasonVal = errorChannelOffset + cause;
172 const uint8_t causeMask = (uint8_t)WDT_CAUSE_bm;
173 const bool isTimeoutCause = ((status & causeMask) == causeMask);
uint8_t ERRCTRL_ReadResetCause(void)
Reads the CAUSE register value.
resetReason_t MW_GetClearResetReason(void)
Reads and clears the reset flag registers.
resetReason_t
Type defines for all possible reset sources.
void MW_ResetDevice(void)
Issues a software reset request to reset the device.
uint8_t RSTCTRL_ReadResetFlagRegister(void)
Reads the RSTFR register value.
uint8_t RSTCTRL_ReadMachineCheckFlagsA(void)
Reads the MCFLAGSA register value.
void RSTCTRL_WriteMachineCheckFlagsA(uint8_t value)
Overwrites the MCFLAGSA register value.
uint8_t RSTCTRL_ReadMachineCheckFlagsB(void)
Reads the MCFLAGSB register value.
void RSTCTRL_WriteMachineCheckFlagsB(uint8_t value)
Overwrites the MCFLAGSB register value.
void RSTCTRL_WriteResetFlagRegister(uint8_t value)
Overwrites the RSTFR register value.
void RSTCTRL_WriteSoftwareResetRegister(uint8_t value)
Overwrites the SWRR register value.
uint8_t WDT_ReadStatus(void)
Reads the STATUS register value.