Цитата(DmitryM @ Jan 19 2011, 19:31)

А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже.
я проследил работу hwclock до вызова функции at91_rtc_readtime из rtc-at91sam9.c
из нее идет возврат по ошибке вот тут:
Код
/* read current time offset */
offset = gpbr_readl(rtc);
if (offset == 0)
return -EILSEQ;
gpbr_readl , как я понимаю, должна возвращать "0" только если RTC еще не инициализирован, при загрузке оси. Из-за этого ось при загузке сообщает "
rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!" и "
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock" - мол, "
хардварное время не установлено, установи его!".
Инициализацию можно либо сделать в функции at91_rtc_probe или отдельной программкой - ссылки на эти оба способа я давал в первом сообщении.
После этого gpbr_readl будет возвращать не "0", а значение хардварного времени и все будет ок.
но проблема в том, что у меня gpbr_writel не может записать в регистры никакого значения - оттуда все равно читается "0".
gpbr_readl и gpbr_writel это просто макросы:
Код
#define gpbr_readl(rtc) \
at91_sys_read(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR)
#define gpbr_writel(rtc, val) \
at91_sys_write(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR, (val))
аналогично я и пробовал "вручную" - отобразил адрес этих регистров через mmap и писал/читал. но все рано не записывается ничего.