Помощь в написании студенческих работ
Антистрессовый сервис

Регистры аварийного сохранения и блока RTC

РефератПомощь в написанииУзнать стоимостьмоей работы

Секция Define содержит определения констант: STR_LENGTH — размер строки для вывода на графический дисплей, RTC_RESET-6ht сброса часов реального времени, RTC_EN — бит разрешения работы часов. WEC — флаг готовности регистров RTC к записи, LSE_RDY — флаг выхода низкочастотного тактового генератора LSE на стабильный режим работы. Кроме того, в этой секции определен новый тип данных RTC_Time… Читать ещё >

Регистры аварийного сохранения и блока RTC (реферат, курсовая, диплом, контрольная)

Батарейный домен имеет шестнадцать встроенных 32-разрядных регистров аварийного сохранения (ВКР). 16-й и 15-й регистры служат для хранения битов управления батарейным доменом, оставшиеся 14 регистров могут быть использованы разработчиком программы.

Для работы с часами реального времени используют пять регистров RTC_CNT. RTCLDIV. RTC_PRL, RTC_ALRM, RTC_CS. Особенностью этих регистров является сравнительно медленная запись. Обращение к этим регистрам рекомендуется проводить по технологии «чтение-модификация-запись». В рамках этой технологии предусмотрен флаг готовности к записи (WEC= RTC_CS [6]). Его необходимо проверять перед каждым актом записи («чтение-модификациязапись») в регистр блока RTC. Отметим, что при непосредственной записи в регистр флаг WEC может работать некорректно.

Описание регистров блока батарейного домена.

MDR BKP, базовый адрес 0×400D_8000 — контроллер батарейного домена и часов реального времени;

MDR_BKP->REG00, смещение 0×00 — ВКР-регистр 00 [31:0];

MDR_BKP->REG01, смещение 0×04 — ВКР-регистр 01 [31:0];

MDR_BKP->REG02, смещение 0×08 — ВКР-регистр 02 [31:0];

MDR_BKP->REG_0D. смещение 0×34 — ВКР-регистр 0D [31:0];

MDR_BKP->REG_0E. смещение 0×38 — ВКP-регистр 0Е и биты управления батарейным доменом;

[31:15]- не используются;

[14:12] (MODE[2.0]) — режим работы микроконтроллера, определенный при включении питания по выводам MODE[2:0] (PF[6:4]):

  • 000 — микроконтроллер, с отладкой через JTAG_B;
  • 001 — микроконтроллер, с отладкой через JTAG_A;
  • 010 — микропроцессор, с отладкой через JTAG_B;
  • 011 — микропроцессор без отладки;
  • 100 — зарезервировано;
  • 101 — UART загрузчик;
  • 110 — UART загрузчик;
  • 111 — зарезервировано (режим тестирования кристалла);

[11] (FPOR) — флаг срабатывания POR:

[10:8] (Trim[2:0]) — коэффициент настройки опорного напряжения встроенного регулятора напряжения DUcc. С помощью Trim осуществляется подстройка напряжения DUcc:

  • 000- DUcc+0.10В; 100- DUcc-0.01 В;
  • 001- DUcc+0.06 В; 101 — DUcc-0.04 В;
  • 010- DUcc+0.04 В; 110 — DUcc-0.06 В;
  • 011- DUcc+0.01 В; 111 — DUcc-0.10 В;

[7] (JTAG В) — разрешение работы порта JTAG В: (0 — запрещен,.

1 — разрешен);

[6] (JTAG А) — разрешение работы порта JTAG А: (0 — запрещен,.

1 — разрешен);

[5:3] (SelectRI[2:0]) — выбор дополнительной стабилизирующей нагрузки для встроенного регулятора напряжения DUcc. Детали выбора представлены в спецификации [4];

[2:0] (LOW[2:0]) — выбор режима работы встроенного регулятора напряжения DUcc. Значение LOW должно совпадать со значением SclcctRI и выставляться в зависимости от тактовой частоты микроконтроллера. Детали выбора представлены в спецификации [4];

MDR_BKP->REG0 F. смещение ОхЗС — ВКР-регистр 0 °F и биты управления блоками RTC, LSE, LSI и HSI:

[3I](RTC_RESET)-c6pocRTC (0−4acbiHec6pacbiBaK>Tca. 1 -сброс часов реального времени);

[30] (STANDBY) — режим отключения регулятора DUcc (0 — регулятор включен и выдает напряжение, 1 — регулятор выключен). Триггер сбрасывается флагом ALRF или по низкому уровню на выводе WAKEUP;

[29:24] (HSI_TRIM[5:0]) — коэффициент подстройки частоты генератора HSI. Детали выбора представлены в спецификации [4];

[23] (HSI_RDI) — флаг выхода генератора HSI в рабочий режим (0-генератор не запущен или не вышел в режим, 1 — генератор работает в рабочем режиме);

[22] (HSI_ON) — бит управления генератором HSI (0 — генератор выключен, 1 — генератор включен);

[21] (LSI_RDY) — флаг выхода генератора LSI в рабочий режим (0 — генератор не запущен или не вышел в режим, 1 — генератор находится в рабочем режиме);

[20:16] (LSI_TRIM[4:0]) — коэффициент подстройки частоты генератора LSI. Детали выбора представлены в спецификации [4];

[15] (LSI_ON) — бит управления генератором LSI (0 — генератор выключен, 1 — генератор включен);

[14] - не используется;

[13] (LSE_RDY) — флаг выхода генератора LSE в рабочий режим (0 — генератор не запущен или не вышел в режим, 1 — генератор работает в рабочем режиме);

[12:5] (CAL[7:0]) — коэффициент подстройки тактовой частоты часов реального времени (замедление хода). Детали выбора представлены в спецификации [4];

[4] (RTC_EN) — бит разрешения работы часов реального времени (0 — работа запрещена, 1 — работа разрешена);

[3:2] (RTC_SEL[1:0]) — биты выбора источника тактовой синхронизации часов реального времени:

  • 00 — LSI; 10 — HSIRTC (формируется в блоке CLKRST);
  • 01 — LSE; 11 — HSERTC (формируется в блоке CLKRST);

[1] (LSY_BYP) — бит управления генератором LSE (0 — режим осциллятора, 1 — режим работы на проход (внешний генератор));

[0] (LSE_ON) — бит управления генератором LSE (0 — генератор выключен, 1 — генератор включен).

MDR_BKP->RTC_CNT. смещение 0×40, [31:0] (RTC_CNT)-значение основного счетчика часов реального времени;

MDR_BKP->RTC_DIV, смещение 0×44,.

[31:20] - не используется;

[19:0] (RTC_DIV) — значение счетчика предварительного делителя часов реального времени;

MDR_BKP->RTC_PRL. смещение 0×48,.

[31:20] - не используется;

[19:0] (RTC_PRL)-значение основания для счета счетчика предварительного делителя часов реального времени;

MDR_BKP->RTC_ALRM, смещение 0×4С, [31:0] (RTC_ALRM) — значения для сравнения основного счетчика и выработки ALRF;

MDR_BKP->RTC_CS, смещение 0×50,.

[31:7] - не используется;

[6] (WEC) — запись завершена (0 — можно записывать в регистры RTC, 1 — запись запрещена, идет запись в регистры RTC);

[5] (ALRFJE) — флаг разрешения прерывания по совпадению основного счетчика и регистра RTC_ALRM (0 — нет совпадения, 1 — есть совпадение);

[4] (SECF_IE) — флаг разрешения прерывания по разрешению счета основного счетчика от счетчика предварительного деления (0 — нет разрешения счета, 1 — разрешение счета);

[3] (OWF_IE) — флаг разрешения прерывания по переполнению основного счсгчика RTC_CNT (0 — нет переполнения, 1 — было достигнуто переполнение);

[2] (ALRF) — флаг совпадения регистра RTC_ALRM и основного счетчика (0 — нет совпадения, 1 — есть совпадение);

[ 1 ] (SECF) — флаг разрешения счета основного счетчика от счетчика предварительного деления (0 — нет разрешения счета, 1 — есть разрешение счета);

[0] (OWF) — флаг переполнения основного счетчика RTC_CNT (0 — нет переполнения, I — было переполнение).

Программа 12. На рис. 3.27 приведена программа, демонстрирующая работу часов реального времени в батарейном домене микроконтроллера. Программа инициализирует систему, состоящую из часов реального времени (RTC), расположенных в батарейном домене микроконтроллера и графического дисплея. На экране дисплея программа отображает статическую информацию о тактовой частоте микроконтроллера. После запуска часов программа каждую секунду отображает на экране дисплея динамическую информацию о текущем времени в формате «часы, минуты, секунды». Благодаря тому, что часы расположены в батарейном домене, работоспособность часов сохраняется после выключения основного питания контроллера. При повторном включении контроллера не происходит повторной инициализации часов, вместо этого программа просто выводит на экран дисплея динамическую информацию о текущем времени.

Секция Include содержит ссылки на два стандартных файла описания оборудования (MDR32F*.h). файл описания функций доступа к графическому дисплею (lcd_mlt.h), файл с отображаемыми шрифтами для вывода на графический дисплей (font.h) и файл описания стандартной библиотеки ввода-вывода (sldio.h).

Секция Define содержит определения констант: STR_LENGTH — размер строки для вывода на графический дисплей, RTC_RESET-6ht сброса часов реального времени, RTC_EN — бит разрешения работы часов. WEC — флаг готовности регистров RTC к записи, LSE_RDY — флаг выхода низкочастотного тактового генератора LSE на стабильный режим работы. Кроме того, в этой секции определен новый тип данных RTC_Time, представляющий собой структуру для хранения информации о текущем времени в формате «часы, минуты, секунды».

В секции прототипов описаны следующие функции: frqjnit — настройка тактирования микроконтроллера на частоту 8 МГц; ascii — для входного символа в ASCII кодировке возвращает указатель на массив с графическим образом этого символа; print_mlt — перевод строки символов в ASCII кодировке в строку указателей на графические образы этих символов. Исходные тексты этих трех функций обсуждались ранее и приведены на рис. 3.6 (frqjnit), рис. 3.15 (ascii) и рис. 3.26 (print_mlt). Новые функции rtcjnit — инициализация часов и RtcToTime — преобразование содержимого счетчика часов в стандартный формат «часы, минуты, секунды». Исходные тексты новых функций приведены на рис. 3.28.

В секции main декларированы следующие переменные: ch_str — указатель на строку длиной STRJLENGTH для символов в ASCII кодировке; ch_frm — строка, задающая формат вывода на графический дисплей; frq_result — информация о тактовой частоте, две переменные для.

Программа для демонстрации работы часов реального времени в батарейном домене микроконтроллера.

Рис. 3.27. Программа для демонстрации работы часов реального времени в батарейном домене микроконтроллера.

Подпрограммы-функции для начальной инициализации и преобразования данных счетчика часов реального времени.

Рис. 3.28. Подпрограммы-функции для начальной инициализации и преобразования данных счетчика часов реального времени.

хранения информации о прошедшем и текущем времени в формате счетчика часов oldTime и newTime, а также time — структура для хранения информации о времени в стандартном формате «часы, минуты, секунды».

Далее идет инициализация оборудования: frqjnit — тактовый генератор, rtcjnit — часы реального времени, MltPinCfg — порты контроллера для подключения дисплея, Lcdlnit — микросхема дисплея. Затем идут очистка графического дисплея и получение системной переменной SystcmCoreClock, содержащей информацию о тактовой частоте.

Вывод информации на графический дисплей включает два этапа: (1) использование стандартной функции sprintf для форматного вывода в строку ASCII символов ch_str; (2) использование функции print_mlt для вывода этой строки на экран дисплея. Информация о тактовой частоте выводится до начала бесконечного цикла while. В теле цикла while осуществляется преобразование содержимого счетчика часов в информацию о времени в стандартном формате «часы, минуты, секунды» посредством функции RtcToTime и вывод результата на графический дисплей. Особенностью этого вывода является использование двух переменных oldTime и newTime, чтобы выводить информацию не чаще одного раза в секунду. Обсудим организацию двух новых подпрограмм-функций rtcjnit и RtcToTime (см. рис. 3.28).

Начальная инициализация часов реального времени включает в себя следующие основные этапы:

  • (1) проверка состояния бита RTC_EN. Если бит RTC_EN установлен, то инициализация не проводится. Это соответствует случаю, когда часы были запущены раньше, и после включения основного питания микроконтроллера требуется только вывод на графический дисплей информации о текущем времени. Если бит RTC_EN сброшен, то выполняются последующие этапы инициализации;
  • (2) включение тактирования регистров аварийного сохранения данных (ВКР) и порта PORTE, к выводам которого (РЕ6 и РЕ7) подключен часовой кварц генератора LSE;
  • (3) назначение аналогового режима работы выводов РЕ6 и РЕ7;
  • (4) сброс часов путем установки бита RTC_RESET;
  • (5) очистка всего регистра REG_0 °F от случайных данных;
  • (6) выбор генератора LSE в качестве источника тактирования;
  • (7) разрешение тактирования счетчика часов от 20-битного предварительного делителя частоты. Перед обращением к любому регистру блока RTC производится ожидание (while) готовности к записи путем проверки флага WEC;
  • (8) настройка предварительною делителя путем загрузки числа в регистр основания счета RTC_PRL. Значение основания счета выбрано следующим образом: /(LSE)[ru]- 1= 32 768-l = 32 767=0x7FFF. Это позволяет получить на выходе предварительного делителя тактовую частоту 1 Гц (период следования импульсов составляет 1 с);
  • (9) включение генератора LSE и ожидание его выхода на стабильный рабочий режим;
  • (10) включение часов реального времени (RTC) и ожидание установления флага RTC_EN.

Необходимо отметить, что очень важную роль при инициализации часов реального времени играет правильная последовательность инициализации регистров. Изменение последовательности (см. рис. 3.28) может привести, например, к срыву генерации LSE или сбою в работе предварительного делителя.

Функция RtcToTime преобразует содержимое счетчика часов (cnt — количество секунд с начала счета) в стандартный формат «часы, минуты, секунды» и выдает его в формате заданной структуры данных (тип данных RTC_Time) [10]. Алгоритм преобразования базируется на последовательном применении операции целочисленного деления (%) с основаниями 60, 60 и 24 (см. рис. 3.28).

Для начальной установки времени в счетчике часов использована отдельная программа (рис. 3.29). Необходимо отметить, что эта программа предназначена только для демонстрационных целей.

Секция Include содержит ссылки на два стандартных файла описания оборудования (MDR32F*.h).

Секция Define содержит определения следующих констант:

WEC — флаг готовности регистров RTC к записи; TIME. HOUR, TIME_MIN и TIMEJ5EC — для начальной установки времени в счетчике часов.

В секции main происходит ожидание готовности флага WEC, вычисление начального содержимого для счетчика часов реального времени и запись этого содержимого в регистр RTC_CNT.

Программа для начальной установки времени в счетчике часов реального времени.

Рис. 3.29. Программа для начальной установки времени в счетчике часов реального времени.

Показать весь текст
Заполнить форму текущей работой