From 77f347fb4e37666e2d687cee99dfa4cb4e441b8a Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sun, 24 Jan 2021 09:45:29 +0000 Subject: check in humidity sensor + better sleep mode --- humidity_sensors/app/awu.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 humidity_sensors/app/awu.c (limited to 'humidity_sensors/app/awu.c') diff --git a/humidity_sensors/app/awu.c b/humidity_sensors/app/awu.c new file mode 100644 index 0000000..18cf1f8 --- /dev/null +++ b/humidity_sensors/app/awu.c @@ -0,0 +1,70 @@ +#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); +} + + -- cgit v1.2.3