#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); }