Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Детектирование резета в 89S52
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
paskal
В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?
koyodza
Цитата(paskal @ Oct 14 2008, 19:57) *
В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?

Никто, кроме пользовательской программы, ОЗУ не модифицирует. Но пользовательская программа, кроме всего прочего, ещё и из стартапа состоит, так что внимательно его просмотрите. Ну и учтите, что в 51 регистры находятся в озу - может, вы сигнатуру неудачно расположили, и она с регистрами пересекается.
Вообще маловато исходных данных: программа на С? Стартап стандартный? Где сигнатура портится, а где нет?
А то больше на конкурс телепатов похоже.
paskal
Цитата(koyodza @ Oct 14 2008, 22:26) *
Никто, кроме пользовательской программы, ОЗУ не модифицирует. Но пользовательская программа, кроме всего прочего, ещё и из стартапа состоит, так что внимательно его просмотрите. Ну и учтите, что в 51 регистры находятся в озу - может, вы сигнатуру неудачно расположили, и она с регистрами пересекается.
Вообще маловато исходных данных: программа на С? Стартап стандартный? Где сигнатура портится, а где нет?
А то больше на конкурс телепатов похоже.

Я проверял все что мог, в том числе и то что вы указали.
Программа на асме. Тест идет практически сразу, уже после всякие инициализации, т.е. стартап помешать не может. Все переменные после 20-го адреса, регистры тоже отпадают. Сигнатура в 1-й половине ОЗУ. Сбоит если передвинуть адрес хоть на несколько байт. Кроме того моя программа сама попортить сигнатуру не может. Я отвел под неё нужный кусок памяти, и другие переменные залезть в неё не должны, а иначе и программа не работала бы.
Так что я сам сильно удивлён, ведь я такой приём с проверкой резета проводил несколько раз и раньше, но никаких глюков не наблюдал.
Могу ещё грешить на некий уникальный глюк процессора, т.к. для проверки имею в наличии один экземпляр платы.
Flasher
а с какого перепугу вы взяли что после сброса должно оставаться то что было до сброса? Вам никто не может гарантировать состояние памяти после запуска процессора
rezident
Цитата(Flasher @ Oct 15 2008, 02:26) *
а с какого перепугу вы взяли что после сброса должно оставаться то что было до сброса? Вам никто не может гарантировать состояние памяти после запуска процессора
Топикстартер имеет в виду "горячий" старт (питание в норме, рестарт по сигналу RESET) и "холодный" старт (начальный старт после подачи питания). После "горячего" старта содержимое ОЗУ самопроизвольно не меняется.
mrcashe
Цитата(paskal @ Oct 15 2008, 03:57) *
В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?

Ненадёжная какая-то констрикция, я бы не расчитывал на такое поведение. В AT89S8253 для этой цели предусмотрен специальный бит POR (Power-On Reset). Его можно читать и потом сбросить. Но в S52 такого нет. Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним. При включении питания устанавливать триггер с помощью RC-цепочки, потом программно опрашивать и сбрасывать. Нужны 2 дополнительных ноги. Или заменить чип на AT89S8253.
Flasher
я как раз и имел в виду оба вида старта smile.gif
paskal
Цитата(koyodza @ Oct 14 2008, 22:26) *
Никто, кроме пользовательской программы, ОЗУ не модифицирует.

Сегодня поэксперементировал, сливал содержимое памяти через последовательный канал. Действительно, ОЗУ по резету никак не меняется, признаю был неправ. Заодно нашел причину неправильной работы. У меня резет подает ПЛИС, которая сама выдает его по сигналу с процессора. Из-за дурацкой ошибки в программе, не выдавалась нужная команда, и резет в нужный момент просто не приходил.
Цитата
Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним.

Модернизация невозможна, но теоретически триггер как то можно сделать с помощью ПЛИС. Я подумаю.
Спасибо всем кто ответил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.