и при переполнении нижнего 16 битного регистра может вернутся неверное значение (что происходит примерно раз в 18 часов)
Код
uint32_t RTC_GetCounter(void)
{
uint16_t tmp = 0;
tmp = RTC->CNTL;
return (((uint32_t)RTC->CNTH << 16 ) | tmp);
}
{
uint16_t tmp = 0;
tmp = RTC->CNTL;
return (((uint32_t)RTC->CNTH << 16 ) | tmp);
}
предлогаю следующий вариант, что скажете? если
Код
uint32_t RTC_GetCounter(void)
{
uint32_t counter;
uint16_t tmp;
do
{
tmp = RTC->CNTL;
counter = (((uint32_t)RTC->CNTH << 16 ) | tmp);
} while(tmp != RTC->CNTL);
return counter;
}
{
uint32_t counter;
uint16_t tmp;
do
{
tmp = RTC->CNTL;
counter = (((uint32_t)RTC->CNTH << 16 ) | tmp);
} while(tmp != RTC->CNTL);
return counter;
}