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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC2134/01 (revD) странности с RTC
GetSmart
сообщение Aug 20 2008, 05:55
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Запустил RTC от внешнего кварца 32768. Вроде идут. Но...
В регистре CTC должен храниться счётчик долей секунды. Обещано было что он 15 бит, соответственно пробегает от 0 до 32767. Я в старых своих проектах тупо его умножал на 1000 и сдвигал вправо на 15 бит чтобы получать значение миллисекунд. Но вчера обнаружил что он добегает от 0 до 65535. Во дела! smile.gif То есть когда он меньше 32768 - идёт первая половина секунды, больше - вторая.

Другая странность - во время работы процессора от VCC замыкаю часовой кварц и время не останавливается, а начинает бежать намного быстрее чем раньше. Раз в пять быстрее.

Третья странность - не могу запустить работу часов от PCLK, а не внешнего кварца. Устанавливаю CCR = 0x01 и часы просто останавливаются. Хотя хранят старые значения часов, минут и т.д. В PREINT и PREFRAC я естественно прописал нужные делители.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 09:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2008, 07:55) *
Но вчера обнаружил что он добегает от 0 до 65535. Во дела! smile.gif То есть когда он меньше 32768 - идёт первая половина секунды, больше - вторая.

Уверены? Ну неоткуда большей частоте взяться, посему полагаю 15 бит это таки секунда, а 16 просто 2.
Цитата
начинает бежать намного быстрее чем раньше. Раз в пять быстрее.

Ничего не скажу
Цитата
Третья странность - не могу запустить работу часов от PCLK

Точно работает, просто инициализация источника при сброшеном CLKEN должна быть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2008, 09:38
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo)
Уверены? Ну неоткуда большей частоте взяться, посему полагаю 15 бит это таки секунда, а 16 просто 2.
Да, уверен. Раньше, на LPC2132 rev- наблюдал аналогичную аномалию вот в этом коде:
Код
rtc->mils = ((CTC * 1000) >> 15) & 1023

Странность заключалась в том, что проскакивали числа большие 1000, хотя их там не должно было быть. Теперь начинаю понимать в чём дело. Вероятно счётчик CTC на самом деле 15-битный, но нулевой бит в регистре не использается. Домой приду - проверю. А то, что CTC.15 содержит старшую/младшую половину секунды - 100%. Я от него моргаю точкой в электронных часах, и видно в какие моменты относительно него меняются показания остальных регистров RTC.

Гы smile.gif
Код
/* RTC clock tick counter register */
typedef struct{
__REG32          : 1;
__REG32 COUNTER  :15;
__REG32          :16;
} __ctc_bits;

Это из iolpc2138.h
Почему же во всех мануалах пишут по-другому?!? Вот и верь им после этого sad.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 13:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2008, 11:38) *
Вот и верь им после этого sad.gif

Бывает smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2008, 15:07
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Aug 20 2008, 15:16) *
Цитата(GetSmart)
Третья странность - не могу запустить работу часов от PCLK
Точно работает, просто инициализация источника при сброшеном CLKEN должна быть.
Оказалось всё дело в бите PCONP_bit.PCRTC. Я его при обращении к RTC устанавливал, а перед выходом из процедуры сбрасывал. Так в какой-то эррате рекомендовалось для уменьшения потребления от батарейки. С часовым кварцем этот алгоритм прекрасно работал. Видимо этот бит подаёт питание на схему RTC от VCC проца, а бит CCR.4 подаёт туда же питание от батарейки. Получается когда они оба выключены - RTC перестаёт тикать.

Ещё проверил - изменение CCR.CLKSRC можно менять не обнуляя CCR.CLKEN. И делители PREINT и PREFRAC тоже можно на ходу.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 15:22
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2008, 17:07) *
Ещё проверил - изменение CCR.CLKSRC можно менять не обнуляя CCR.CLKEN.

Тем не менее по документации конфигурация производится при остановленном RTC. Хотите получить какие-нибудь эффекты при неудачном стечении обстоятельств?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2008, 15:52
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo)
Хотите получить какие-нибудь эффекты при неудачном стечении обстоятельств?

От эффекта Мёссбауэра я бы не отказался smile.gif Но думаю не прокатит. Или от эффекта низколетящего утюга smile.gif

Да, замыкая кварц часы начинают быстро бежать вперёд. А замыкая ёмкости кварца - останавливаются, как и положено.

А где указано, что нельзя менять CLKSRC "на ходу"? В мануале не нашёл такого.

Сообщение отредактировал GetSmart - Aug 20 2008, 15:52


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2008, 16:03
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2008, 17:52) *
А где указано, что нельзя менять CLKSRC "на ходу"? В мануале не нашёл такого.

В описании бита CLKEN Clock Enable. When this bit is a one the time counters are enabled.
When it is a zero, they are disabled so that they may be initialized.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 20 2008, 16:08
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Aug 20 2008, 19:52) *
Да, замыкая кварц часы начинают быстро бежать вперёд. А замыкая ёмкости кварца - останавливаются, как и положено.

smile.gif А что еще остается делать часовому генератору, интересно?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 21 2008, 13:33
Сообщение #10


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Aug 20 2008, 22:03) *
В описании бита CLKEN Clock Enable. When this bit is a one the time counters are enabled.
When it is a zero, they are disabled so that they may be initialized.
Тут речь только о счётчиках времени/даты. А о служебных битах речи нет. Так что я бы не стал преувеличивать смысл. Если счётчики прописывать на ходу, то ессно может перескочить секунда и в них будет не то что надо. У служебных битов таких приколов нет.

А вот я сегодня встретил приколы покруче. Из 5-ти LPC2134 четыре запустились с первого раза на ура. А один проц ни в какую не хотел. Сначала у него часы, минуты и секунды (а может и всё остальное) увеличивались каждую секунду на 1 одновременно smile.gif Потом я замкнул батарейку и они вообще перестали тикать, даже если рукой касаться кварца. Пришлось во время инициализации часов, после сброса проца, принудительно прописывать все регистры будильника, DOW и DOY еденицами. Никогда раньше такое не делал. Только после этого часики начали нормально тикать. Как у них там башню сорвало - до сих пор не понимаю smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 21 2008, 15:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 21 2008, 15:33) *
Тут речь только о счётчиках времени/даты. А о служебных битах речи нет.

Скажем так, нет речи о делении на "служебные" и "не служебные". Я предпочитаю остановить и сделать все без раздумий и толкований.
Цитата
Пришлось во время инициализации часов, после сброса проца, принудительно прописывать все регистры будильника, DOW и DOY еденицами. Никогда раньше такое не делал.

Наступал и инициализирую, если из регистров прочиталась ерунда
Код
    if( (MIN >= 60)||(HOUR >= 24)||(YEAR<2007)||(YEAR>2027) )
    {
          CCR &= (~CCR_CLKEN);         // Disable RTC;
        vDummyDelay_ms( 10 );
        SEC     = 0;
        MIN        = 0;
        HOUR    = 0;

        YEAR    = 2007;
        MONTH    = 2;
        DOM        = 1;
        DOY        = 58;

        ALSEC     = 0;
           ALMIN     = 0;
        ALHOUR     = 0;
        ALDOM     = 0;
        ALDOW     = 0;
        ALDOY     = 0;
        ALMON     = 0;
        ALYEAR     = 0;
....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 21 2008, 15:36
Сообщение #12


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Aug 21 2008, 21:11) *
Код
    if( (MIN >= 60)||(HOUR >= 24)||(YEAR<2007)||(YEAR>2027) )

Маловато же у Вас девайсы жить должны.
Я обычно лет на 50 закладываюсь. А вдруг smile.gif

Сообщение отредактировал GetSmart - Aug 21 2008, 15:36


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 21 2008, 16:42
Сообщение #13


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Aug 21 2008, 21:11) *
Наступал и инициализирую, если из регистров прочиталась ерунда
Я почти уверен, что даже если в минутах, часах и году будут корректные значения, то часы могут глючить. ИМХО надо прописывать неиспользующиеся регистры всегда. Можно даже на ходу, особенно регистры будильника если он не используется. Кстати, все регистры RTC не инициализируются при сбросе (кроме PREINT и PREFRAC) и там может быть мусор, который надо вычищать. ХЗ как он влияет на логику часов. Приколы с увеличением всех регистров каждую секунду даже трудно объяснить.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 21 2008, 16:45
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 21 2008, 17:36) *
Я обычно лет на 50 закладываюсь. А вдруг smile.gif

Можете подправить smile.gif


Цитата(GetSmart @ Aug 21 2008, 18:42) *
ИМХО надо прописывать неиспользующиеся регистры всегда.

А я что делаю?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 21 2008, 16:53
Сообщение #15


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Aug 21 2008, 22:45) *
А я что делаю?
Судя по коду - только в случае неправильного содержимого MIN, HOUR или YEAR. А иначе - не прописываете.

У меня когда все регистры бежали каждую секунду, они при этом имели корректные значения. Значит какие-то другие имели некорректные.

Сообщение отредактировал GetSmart - Aug 21 2008, 16:57


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:31
Рейтинг@Mail.ru


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