Add generic function to detzermine reset cuase to rcc manager
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include <stm-periph/rcc-manager.h>
|
||||
#include <helper-macros/helper-macros.h>
|
||||
#include <stdlib.h>
|
||||
#include <stm32/stm32f4xx.h>
|
||||
|
||||
struct rcc_enable_count {
|
||||
volatile uint32_t *rcc_reg_addr;
|
||||
@@ -153,3 +154,30 @@ int rcc_manager_disable_clock(volatile uint32_t *rcc_enable_register, uint8_t bi
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
enum rcc_reset_source rcc_manager_get_reset_cause(bool clear_flags)
|
||||
{
|
||||
enum rcc_reset_source ret = 0;
|
||||
uint32_t rcc_csr;
|
||||
|
||||
rcc_csr = RCC->CSR;
|
||||
if (rcc_csr & RCC_CSR_LPWRRSTF)
|
||||
ret |= RCC_RESET_SOURCE_LOW_POWER;
|
||||
if (rcc_csr & RCC_CSR_WWDGRSTF)
|
||||
ret |= RCC_RESET_SOURCE_WWD;
|
||||
if (rcc_csr & RCC_CSR_WDGRSTF)
|
||||
ret |= RCC_RESET_SOURCE_IWDG;
|
||||
if (rcc_csr & RCC_CSR_SFTRSTF)
|
||||
ret |= RCC_RESET_SOURCE_SOFTWARE;
|
||||
if (rcc_csr & RCC_CSR_PORRSTF)
|
||||
ret |= RCC_RESET_SOURCE_POWER_ON;
|
||||
if (rcc_csr & RCC_CSR_PADRSTF)
|
||||
ret |= RCC_RESET_SOURCE_PIN;
|
||||
if (rcc_csr & RCC_CSR_BORRSTF)
|
||||
ret |= RCC_RESET_BOR_POR;
|
||||
|
||||
if (clear_flags)
|
||||
RCC->CSR |= RCC_CSR_RMVF;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user