#include "project.h" /** Contains the different values to write in the APR register (used by AWU_Init function) */ CONST uint8_t APR_Array[17] = { 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 61, 23, 23, 62 }; /** Contains the different values to write in the TBR register (used by AWU_Init function) */ CONST uint8_t TBR_Array[17] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 14, 15, 15 }; FlagStatus AWU_GetFlagStatus(void) { return((FlagStatus)(((uint8_t)(AWU->CSR & AWU_CSR_AWUF) == (uint8_t)0x00) ? RESET : SET)); } INTERRUPT_HANDLER (AWU_IRQHandler, 1) { AWU_GetFlagStatus(); } void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase) { /* Enable the AWU peripheral */ AWU->CSR |= AWU_CSR_AWUEN; /* Set the TimeBase */ AWU->TBR &= (uint8_t)(~AWU_TBR_AWUTB); AWU->TBR |= TBR_Array[(uint8_t)AWU_TimeBase]; /* Set the APR divider */ AWU->APR &= (uint8_t)(~AWU_APR_APR); AWU->APR |= APR_Array[(uint8_t)AWU_TimeBase]; } void AWU_LSICalibrationConfig(uint16_t lsifreqkhz) { uint16_t A = 0x0; /* Calculation of AWU calibration value */ A = (uint16_t)(lsifreqkhz >> 2U); /* Division by 4, keep integer part only */ if ((4U * A) >= ((lsifreqkhz - (4U * A)) * (1U + (2U * A)))) { AWU->APR = (uint8_t)(A - 2U); } else { AWU->APR = (uint8_t)(A - 1U); } } void awu_init(void) { AWU_LSICalibrationConfig(128); AWU_Init(AWU_TIMEBASE_1S); }