Что-то у меня ни какими средствами не удается установить дату и время. Причем, если CMOS сброшен, то первичная инициализация проходит и назначается время и дата, но не те, что надо, а так, дефолтные. Потом приходит нужная дата и время, а назначить не удается.
Процессор SMM32F207. Компилятор GCC в среде CodeBlocks
ОС в прошивке FreeRTOS
Дата и время приходят по сети Ethernet, но обрабатываются потом в очереди.
Код
ts.RTC_Hours = (uint8_t) tm->hour;
ts.RTC_Minutes = (uint8_t) tm->min;
ts.RTC_Seconds = (uint8_t) tm->sec;
ds.RTC_Year = (uint8_t) (tm->year % 100);
ds.RTC_Month = (uint8_t) tm->month;
ds.RTC_Date = (uint8_t) tm->day;
ds.RTC_WeekDay = (uint8_t) tm->wday;
portENTER_CRITICAL();
PWR_BackupAccessCmd( ENABLE );
// сохраняем дату и время
//RTC_WriteProtectionCmd(DISABLE);
//RCC_RTCCLKCmd(ENABLE);
//RTC_WaitForSynchro();
RTC_SetTime( RTC_Format_BIN, &ts );
RTC_SetDate( RTC_Format_BIN, &ds );
//RTC_WriteProtectionCmd(ENABLE);
PWR_BackupAccessCmd( DISABLE );
portEXIT_CRITICAL();
Сначала были только функции назначения даты и времени, потом попытки шаманства, в том числе запрета прерываний. Ничего не помогает.
Отладчик показывает, что доходим до функции RTC_EnterInitMode, там взбодряют RTC->ISR и ждут
Код
RTC->ISR = (uint32_t)RTC_INIT_MASK;
do
{
initstatus = RTC->ISR & RTC_ISR_INITF;
initcounter++;
} while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00));
Но флага INITF так и не дожидаемся.
Функции чтения даты и времени работают нормально, на экран часто выводится и дата и время. Но вот назначить новое не получается.
Что не так?