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

 
 
 
Reply to this topicStart new topic
> 430FR4 RTC Modulo регистр, перепробовал всё. Сил нет.
SasaVitebsk
сообщение Nov 14 2016, 21:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Мне надо по событию однократно изменить период RTC.
Примерно такой код:
Код
  RTCMOD = rt;                // скорректировать
  RTCCTL = RTCSS__XT1CLK | RTCPS__64 | RTCSR;    // запретить прерывания от RTC + загрузить значение теневого регистра
  // софтовая задержка
  RTCMOD = RTCSEC(120);        // Начать заново
  RTCIV;                    // сбросить прерывания от RTC
  RTCCTL |= RTCIE;            // разрешить прерывания от RTC

Процессор ведёт себя так, как будто я RTCMOD первый раз не загружаю.
В документации указано, что по RTCSR я его загружаю принудительно. А второй раз он должен загрузиться только при переполнении.
Тем не менее таймер сбрасывается отсчитывается 2 минуты и прерывание.
То есть ведёт себя так, как будто первой загрузки не было.
Кто сталкивался и как бороться?

из документации
Цитата
The value in RTCMOD is loaded to the shadow register under two conditions:
1. When the counter reaches the value in the shadow register, which also triggers an overflow signal and
clears the counter value.
2. When a software reset is triggered by software writing logic 1 to the RTCSR bit in the RTCCTL
register.
Because the shadow register always updates its value from RTCMOD, software must set RTCMOD
before the hardware overflow occurs. Using the software reset lets software immediately set the target
modulo value into shadow register without waiting for the next overflow. If the value in RTCMOD is not
updated when the hardware overflow occurs, the shadow register fetches the previous modulo value
stored in RTCMOD. If RTCMOD is changed multiple times before the overflow, only the last value is
loaded to the shadow register.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 22 2016, 15:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Короче хомут нашёл.
Я ставил задержку, там где написано "софтовая задержка"
Но написал её типа while(RTCCNT<2);
Но не учёл что сброс таймера может не пройти. Судя по всему он и не проходит.
То есть задержку лучше поставить типа for(int i=0;i<5;i++) RTCNT;
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2017 - 19:21
Рейтинг@Mail.ru


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