процессор stm32f401. проинициализировал RTC. Работают. Вычитываю дату. При первой вычитке всё вычиталось нормально. дата 07.02.2017. часы перешли через 23:59:59, сутки увеличились.
читаю дату, получаю 07.02.2017. читаю регистр RTC_DT в переменную, в переменной 0x00172207 (7-е число), останавливаюсь в дебаге после вычитки ДТ в переменную, в переменной 07, смотрю регистры часов - в ДТ 0x00172208, см рис, вотчвиндоу, из разных мест программы в массив вычитал регистр RTC_DT и сразуже остановился. тот же вотчвиндоу показывает что в регистре RTC_DT дата 08. вобщем часы идут... идут... сутки, двое трое.... при попытке вычитать дату - дата стоит мертвая, как при первом чтении.
вычитываю кодом
tmpreg[1] = *(uint32_t*)0x40002804;
или
tmpreg[1] = (uint32_t)(RTC->DR & ((uint32_t)0x00FFFF3F) );
результат одинаковый
такое чувство, что этот регистр кэшируется где-то, при первой вычитке прочитывается нормально, а потом из кеша старое значение берётся. Оптимизация отключена. компилятор IAR.... что может быть?