реклама на сайте
подробности

 
 
> проблема с RTC на AT91SAM9XE512
Valentinus
сообщение Jan 19 2011, 14:01
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 20-04-10
Пользователь №: 56 759



использую отладочные платы с AT91SAM9XE512 (SK-AT91SAM9XE512-S3E и SK-AT91SAM9XE512-SIM300)

возникла проблема с использованием RTC под Linux (пробовал ядра 2.6.28 и 2.6.35.1) - не устанавливается значение в hwclock, и все тут!

пробовал и так, и сяк - не работают.

начал копать - оказалась проблема в том что не записывается значение в Battery Backup Registers, то бишь туда, где времечко хардварное должно храниться (4 General-Purpose Backup Registers).

даже пробовал "вручную" туда писать: что бы ни писал - читается "0".

помогите плз, мудрым советом. а то уже не знаю, что придумать!!! crying.gif crying.gif crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DmitryM
сообщение Jan 19 2011, 16:31
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже.

Сообщение отредактировал IgorKossak - Jan 19 2011, 17:07
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Valentinus
сообщение Jan 19 2011, 17:12
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 20-04-10
Пользователь №: 56 759



Цитата(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 и писал/читал. но все рано не записывается ничего.

Сообщение отредактировал Valentinus - Jan 19 2011, 17:13
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016