|
LPC2134/01 (revD) странности с RTC |
|
|
|
Aug 20 2008, 05:55
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Запустил RTC от внешнего кварца 32768. Вроде идут. Но... В регистре CTC должен храниться счётчик долей секунды. Обещано было что он 15 бит, соответственно пробегает от 0 до 32767. Я в старых своих проектах тупо его умножал на 1000 и сдвигал вправо на 15 бит чтобы получать значение миллисекунд. Но вчера обнаружил что он добегает от 0 до 65535. Во дела!  То есть когда он меньше 32768 - идёт первая половина секунды, больше - вторая. Другая странность - во время работы процессора от VCC замыкаю часовой кварц и время не останавливается, а начинает бежать намного быстрее чем раньше. Раз в пять быстрее. Третья странность - не могу запустить работу часов от PCLK, а не внешнего кварца. Устанавливаю CCR = 0x01 и часы просто останавливаются. Хотя хранят старые значения часов, минут и т.д. В PREINT и PREFRAC я естественно прописал нужные делители.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 20 2008, 09:16
|

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

|
Цитата(GetSmart @ Aug 20 2008, 07:55)  Но вчера обнаружил что он добегает от 0 до 65535. Во дела!  То есть когда он меньше 32768 - идёт первая половина секунды, больше - вторая. Уверены? Ну неоткуда большей частоте взяться, посему полагаю 15 бит это таки секунда, а 16 просто 2. Цитата начинает бежать намного быстрее чем раньше. Раз в пять быстрее. Ничего не скажу Цитата Третья странность - не могу запустить работу часов от PCLK Точно работает, просто инициализация источника при сброшеном CLKEN должна быть.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 20 2008, 09:38
|
.
     
Группа: Участник
Сообщений: 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. Гы  Код /* RTC clock tick counter register */ typedef struct{ __REG32 : 1; __REG32 COUNTER :15; __REG32 :16; } __ctc_bits; Это из iolpc2138.h Почему же во всех мануалах пишут по-другому?!? Вот и верь им после этого
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 20 2008, 15:07
|
.
     
Группа: Участник
Сообщений: 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 тоже можно на ходу.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 20 2008, 15:52
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo) Хотите получить какие-нибудь эффекты при неудачном стечении обстоятельств? От эффекта Мёссбауэра я бы не отказался  Но думаю не прокатит. Или от эффекта низколетящего утюга  Да, замыкая кварц часы начинают быстро бежать вперёд. А замыкая ёмкости кварца - останавливаются, как и положено. А где указано, что нельзя менять CLKSRC "на ходу"? В мануале не нашёл такого.
Сообщение отредактировал GetSmart - Aug 20 2008, 15:52
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 21 2008, 15: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
|
|
|
|
|
Aug 21 2008, 15:36
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Aug 21 2008, 21:11)  Код if( (MIN >= 60)||(HOUR >= 24)||(YEAR<2007)||(YEAR>2027) ) Маловато же у Вас девайсы жить должны. Я обычно лет на 50 закладываюсь. А вдруг
Сообщение отредактировал GetSmart - Aug 21 2008, 15:36
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|