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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> XMEGA, RTC и программный сброс
zombi
сообщение Feb 24 2013, 13:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Иногда нужно выполнить программный сброс в устройсте с иксмегой и внешним часовым кварцем.
Как сделать так что бы работа RTC не нарушалась (часы не отставали).
Ну или как минимизировать отставание?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 24 2013, 13:37
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Ну, так если это программный сброс - не трогайте RTC


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 24 2013, 13:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Feb 24 2013, 16:37) *
Ну, так если это программный сброс - не трогайте RTC

Я бы с радостью не трогал его, но он по сбросу выключается biggrin.gif

Под программным сбросом я имею ввиду не jmp 0 а :
Цитата
Функция программного сброса позволяет инициировать системный сброс из программы, путем записи в бит программного сброса регистра управления сбросом.
После выполнения записи этого бита, сброс будет выполнен через 1-2 цикла синхронизации ЦПУ.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 24 2013, 13:40
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Это если Вы выходите 0x0000 ? А если перенести "точку сброса"


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 24 2013, 13:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Feb 24 2013, 16:40) *
Это если Вы выходите 0x0000 ? А если перенести "точку сброса"

См. Сообщение #3
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 24 2013, 14:40
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



НУ так значит этот режим для Вашей задачи не подходит и jmp XXXX решает проблему


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 24 2013, 14:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Feb 24 2013, 15:40) *
Это если Вы выходите 0x0000 ? А если перенести "точку сброса"

Имеется в виду что-то такое:
Код
    unsigned char tmp=RST_SWRST_bm;
    CCP = CCP_IOREG_gc;
    RST.CTRL=tmp;


Нужной фичи можно ожидат в xmega с батарейным питанием, но вот есть ли она там и как сделана - вопрос.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 24 2013, 15:00
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Почему , только с батарейным? Например выход из программы MENU, после смены каких либо установок , благополучно обходит всё что касается часов. Перезапускается только то чего коснулись установки.
ИМХО RTC в XMEGA - бесполезная вещь, так , чисто маркетинг.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 24 2013, 15:53
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ILYAUL @ Feb 24 2013, 18:00) *
ИМХО RTC в XMEGA - бесполезная вещь, так , чисто маркетинг.

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

Недавно пожаловались что некоторые изделия не включаются при подаче питания (т.е. они включаются но неработают как надо).
Оказалось что для восстановления работоспособности надо полностью обесточить процессор (вынуть батарейку) и после этого всё опять чудно работает.
Получается что при работе был какойто сбой (отвёртка упала на включённую прлату, молния или опять же метеорит (болид biggrin.gif ) рядышком пролетел), процессор "улетел" и натворил чегото со своими регистрами.
И для того чтобы все их снова инициализировать нужно дать ему сброс.
Вот я и подумал инициировать системный сброс из программы всегда при подаче питания.
Но боюсь часы отставать будут ввиду их выключения на время выполнения сброса.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 24 2013, 16:33
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zombi @ Feb 24 2013, 17:53) *
Недавно пожаловались что некоторые изделия не включаются при подаче питания (т.е. они включаются но неработают как надо).
Оказалось что для восстановления работоспособности надо полностью обесточить процессор (вынуть батарейку) и после этого всё опять чудно работает.

А BOD разрешён?

Цитата(zombi @ Feb 24 2013, 17:53) *
Получается что при работе был какойто сбой (отвёртка упала на включённую прлату, молния или опять же метеорит (болид biggrin.gif ) рядышком пролетел), процессор "улетел" и натворил чегото со своими регистрами.
И для того чтобы все их снова инициализировать нужно дать ему сброс.

И watchdog не помогает?
Go to the top of the page
 
+Quote Post
maksimp
сообщение Feb 24 2013, 16:51
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Нужно переделать прорамму так чтобы сброс был не нужен.
Цитата(zombi @ Feb 24 2013, 18:53) *
процессор "улетел" и натворил чегото со своими регистрами.
И для того чтобы все их снова инициализировать нужно дать ему сброс.

Программа может сама инициализировать _все_ регистры процессора, в том числе значениями по умолчанию регистры неиспользуемой периферии.
И делать это надо регулярно, в основном цикле. А то вдруг космический протон пролетел и какой-нибудь регистр сбился.
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 24 2013, 18:49
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(_Артём_ @ Feb 24 2013, 20:33) *
А BOD разрешён?

Конечно, но что от него толку если процессор всегда запитан либо от внешнего блока питания либо от внутренней батарейки.
Цитата(_Артём_ @ Feb 24 2013, 20:33) *
И watchdog не помогает?

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


Цитата(maksimp @ Feb 24 2013, 20:51) *
Нужно переделать прорамму так чтобы сброс был не нужен.

Возможно.
Цитата(maksimp @ Feb 24 2013, 20:51) *
Программа может сама инициализировать _все_ регистры процессора, в том числе значениями по умолчанию регистры неиспользуемой периферии.
И делать это надо регулярно, в основном цикле. А то вдруг космический протон пролетел и какой-нибудь регистр сбился.

дайте пример кода biggrin.gif


Сделал сброс при каждом включении питания.
Раз сто уже вкл.-выкл. часы не отстают (или я не могу увидеть это отставание). Как такое может быть cranky.gif
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 25 2013, 12:16
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



удалил. Точно напутал.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 25 2013, 13:29
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(zombi @ Feb 24 2013, 22:49) *
дайте пример кода biggrin.gif
Писать не только единичи по маске в регистры, а и нули...
Сбрасывать нужные битики записью единичек... И т.д. и т.п.
Проще и надёжнее ресетнуть по-настоящемуsm.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 25 2013, 15:15
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(demiurg_spb @ Feb 25 2013, 17:29) *
Проще и надёжнее ресетнуть по-настоящемуsm.gif

Вот по псевдо настоящему и ресетаю.


Померял время теряемое RTC при формировании процессором программного сброса.
На всё про всё уходит примерно 65-75 мкс.
т.е. на пробуждение, обработку прерывания RTC, выполнение сброса и повторную инициализацию RTC.
Даже если предположить что при каждом включении изделия будет теряться аж 3 такта RTC и в день изделие вкючат аж 20 раз получаем потерю всего 60-ти тактов.
На фоне 30ppm самого кварца (+-84935 тактов в сутки) это просто мизер.
А если при повторной инициализауии RTC стартануть не с нуля а с троечки то вообще можно забыть что часы останавливались biggrin.gif

Если я где то ошибся поправьте плиз.
Go to the top of the page
 
+Quote Post

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

 


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


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