Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 430FR4 RTC Modulo регистр
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SasaVitebsk
Мне надо по событию однократно изменить период 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.
SasaVitebsk
Короче хомут нашёл.
Я ставил задержку, там где написано "софтовая задержка"
Но написал её типа while(RTCCNT<2);
Но не учёл что сброс таймера может не пройти. Судя по всему он и не проходит.
То есть задержку лучше поставить типа for(int i=0;i<5;i++) RTCNT;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.