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

 
 
> Микроконтроллеры Silabs C8051Fxx, Как Вы делаете программный рестарт?
Волощенко
сообщение Sep 29 2006, 08:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Добрый день!
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).
Ответьте, кто уже испробовал. Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
AndreyS
сообщение Sep 29 2006, 08:35
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Добрый день. Не знаю как во всех СиЛабсах, но в Ф33х и Ф12х в регистре RSTSRC есть бит SWRSF. Если в него поставить 1, то произойдет немедленный сброс системы. И после запуска эту единицу в этом регистре можно будет обнаружить. Т.е. задетектить программный сброс.
Я выполняю программный сброс именно так.
В других контроллерах (без такой возможности), не используя внешних схем, произвожу программный сброс переходом в специальную процедуру (которая все порты и память приводит в состояние = аппаратному сбросу) и выхожу из нее на вектор 0x0000. Чтобы определить такой сброс, можно переходить не на 0 вектор. Пример:

Код
org 0
LJMP Start


Org 100h
Start:
SETB Start_HW_Reset ; Указываем, что произошел аппаратный сброс
SJMP HW_Reset
SW_Reset:
CLR Start_HW_Reset   ; Указываем, что произошел программный сброс
HW_Reset:


[...]


SoftWare_Reset:

[.. запрещаем все прерывания,приводим порты, и внтуреннюю память (очищаем стек) в состояние по аппаратному сбросу или просто порты в FF, память в 0 ..]

MOV DPTR,#SW_Reset
PUSH DPL
PUSH DPH
RET


Сообщение отредактировал AndreyS - Sep 29 2006, 08:50


--------------------
Удачи.
Go to the top of the page
 
+Quote Post
Kazap
сообщение Sep 29 2006, 14:58
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 8-05-06
Пользователь №: 16 880



Цитата(Волощенко @ Sep 29 2006, 13:00) *
Добрый день!
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).
Ответьте, кто уже испробовал. Спасибо.


Можно так- получив соответствующую команду по порту, просто запретить сброс wdt(конечно, если вы его используете) Правда, это чревато некоторой задержкой- в зависимости от режима wdt
Go to the top of the page
 
+Quote Post
asdf
сообщение Sep 29 2006, 20:56
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 775
Регистрация: 11-05-05
Пользователь №: 4 913



Цитата(Волощенко @ Sep 29 2006, 12:00) *
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).


Смотрите в pdf на конкретную МС раздел RESET SURCES.
А в общем случае установить бит SWRSEF (четвертый) в регистре RSTSRC.
Регистр не имеет битового доступа, так что лучше командой или (orl).
Go to the top of the page
 
+Quote Post
alcosar
сообщение Sep 30 2006, 03:55
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-03-06
Пользователь №: 15 598



Я в прерывании делаю так:

#pragma asm
clr ea
clr a
mov psw, a
push acc
push acc
reti
#pragma endasm

Сообщение отредактировал alcosar - Sep 30 2006, 03:57
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Oct 4 2006, 07:33
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Сделал в С8051F127 программный рестарт через регистр RSTSRC (четвертый бит SWRSEF), следующей командой:
RSTSRC |=(1<<4);

Спасибо за советы! smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 05:41
Рейтинг@Mail.ru


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