Система сброса семейства PIC24F может быть рассмотрена как расширенная система сброса PIC18:
- сброс по включению питания (POR - Power-On Reset);
- сброс по снижению напряжения питания (BOR - Brown-out Reset);
- внешний сброс по выводу /MCLR;
- программный сброс (инструкция RESET );
- сброс по переполнению сторожевого таймера (WDT - Watch-Dog Timer);
- неустранимая ошибка стека (переполнение или опустошение).
В архитектуре PIC24F поддерживаются такие же или эквивалентные
методы сброса. Кроме этого присутствуют дополнительные источники сброса и
расширенный отчет об источнике. Состояние регистров специального
назначение, а так же процедура старта микроконтроллера для архитектур
PIC18 и PIC24F различаются (Таблица 9).
Таблица 9. Основные различия источников сброса и процедуры старта семейств PIC18 и PIC24F
Параметр | PIC18 | PIC24F |
Источники сброса | POR, BOR, /MCLR, программный сброс, ошибка стека, сторожевой таймер |
Дополнительные источники сброса | Ошибка четности в слове конфигурации (PIC18FxxJ) | Неверный код инструкции, неинициализированные рабочие регистры, ошибка четности в слове конфигурации, конфликт исключений |
Конфигурация сброса по снижению напряжения питания (BOR) | Конфигурируется, программный доступ в большинстве устройств | Привязана к регулятору на кристалле |
Сброс по ошибке стека | Сброс | Немаскируемое исключение |
Состояние регистров специального назначения после сброса* | Зависит от источника сброса | Не зависит от источника сброса |
Таймер старта по включению питания | Конфигурируется | Привязано к регулятору на кристалле |
* за исключением RCON и OSCCON |
В микроконтроллерах PIC18 для отчета о причине сброса используется 7 битовых флагов, 5 из которых находятся в регистре RCON , и 2 - в регистре STKPTR (флаги ошибки стека). Микроконтроллеры PIC18 из семейства NanoWatt так же имеют контрольный бит SBOREN , состояние которого так же может косвенно говорить об источнике сброса. Все флаги в регистре RCON сбрасываются
при возникновении события. Если флаг установлен, сброс произошел по
другой причине. Проверка указанного набора флагов позволит судить
приложению о точной причине сброса.
В семействе PIC24F для отчета о причине сброса используется 12 флагов, 11 из которых расположены в регистре RCON , и один (STKERR ) - в регистре INTCON1 .
Каждый бит регистрирует одну из причин сброса. В дополнении к этому
введены раздельные флаги режимов SLEEP и IDLE. В отличие от PIC18 флаги
источников сброса устанавливаются при возникновении события.
Различия во флагах регистра RCON , индицирующих причину сброса для семейств PIC18 и PIC24F отмечены в Таблице 10. В Таблицах 11 и 12 указаны состояния флагов после событий сброса для семейств PIC24F и PIC18 соответственно.
Таблица 10. Основные различия флагов, индицирующих причину сброса для семейств PIC18 и PIC24F
Причина сброса | Флаги PIC18 | Флаги PIC24F |
Внешний сброс по выводу /MCLR | - | EXTR |
Программный сброс (инструкция RESET) | /RI | SWR |
Сброс по включению питания (POR) | /POR | POR |
Сброс по снижению напряжения питания (BOR) | /BOR | BOR |
Сброс по переполнению сторожевого таймера (WDT reset) | /TO | WDTO |
Сброс при конфликте исключений | - | TRAPR |
Неизвестный машинный код инструкции или не инициализированные рабочие регистры | - | IOPUWR |
Ошибка четности слова конфигурации | - | CM |
Режим SLEEP | /PD | SLEEP |
Режим IDLE | /PD | IDLE |
Переполнение стека | STKFUL | STKERR* |
Опустошение стека | STKUNF | STKERR* |
* Событие вызывает аппаратное немаскируемое исключение, а не сброс |
Таблица 11. Состояние отчетных флагов после сброса в семействе PIC24F
Событие | Счетчик программ PC | TRAPR | IOPUWR | EXTR | SWR | WDTO | SLEEP | IDLE | CM | BOR | POR | STKERR |
Сброс по включению питания (POR) | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Н | 0 | 1 | 0 |
Программный сброс (инструкция RESET ) | 0x00 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Н | 0 | 0 | 0 |
Сброс по снижению напряжения питания (BOR) | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Н | 1 | 0 | 0 |
Внешний сброс /MCLR: - в нормальном режиме - в IDLE режиме - в SLEEP режиме | 0x00
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | Н | 0 | 0 | 0 |
PC + 2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | Н | 0 | 0 | 0 |
PC + 2 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | Н | 0 | 0 | 0 |
Сброс по WDT: - в нормальном режиме - в IDLE режиме - в SLEEP режиме | 0x00
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | Н | 0 | 0 | 0 |
PC + 2 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Н | 0 | 0 | 0 |
PC + 2 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | Н | 0 |
| 0 |
Сброс по переполнению стека** | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Н | 0 | 0 | 1 |
Сброс по опустошению стека** | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Н | 0 | 0 | 1 |
Сброс при конфликте исключений | 0x00 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Н | 0 | 0 | 0 |
Неизвестный машинный код инструкции или не инициализированные рабочие регистры | 0x00 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | Н | 0 | 0 | 0 |
Ошибка четности слова конфигурации | 0x00 | Н | Н | Н | Н | Н | Н | Н | 1 | Н | Н | Н |
Переход на вектор прерывания: - из режима IDLE - из режима SLEEP | *** | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Н | 0 | 0 | 0 |
*** | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Н | 0 | 0 | 0 |
Режим IDLE (инструкция PWRSAV 1 ) | PC + 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Н | 0 | 0 | 0 |
Режим SLEEP (инструкция PWRSAV 0 ) | PC + 2 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Н | 0 | 0 | 0 |
Н = состояние не изменяется
** В микроконтроллерах семейства PIC24F ошибка стека вызывает немаскируемое исключение. *** Счетчик программ PC загружается значением PC
+ 2, если приоритет прерывания меньше, чем текущий приоритет ядра, или
значением вектора прерывания, если приоритет прерывания выше текущего
приоритета ядра |
Таблица 12. Состояние отчетных флагов после сброса в семействе PIC18
Событие | Счетчик программ PC | RCON | STKPTR |
SBOREN* | ~RI | ~TO | ~PD | ~POR | ~BOR | STKFUL | STKUNF |
Сброс по включению питания (POR) | 0x00 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Сброс по снижению напряжения питания (BOR) | 0x00 | Н** | 1 | 1 | 1 | Н | 0 | Н | Н |
Программный сброс (инструкция RESET ) | 0x00 | Н** | 0 | Н | Н | Н | Н | Н | Н |
Внешний сброс /MCLR: - в режиме Primary RUN - в режиме Secondary RUN или RC RUN - в IDLE или SLEEP режимах | 0x00
| Н** | Н | Н | Н | Н | Н | Н | Н |
0x00 | Н** | Н | 1 | Н | Н | Н | Н | Н |
0x00 | Н** | Н | 1 | 0 | Н | Н | Н | Н |
Сброс по WDT: - в нормальном режиме - в IDLE или SLEEP режиме | 0x00
| Н** | Н | 0 | Н | Н | Н | Н | Н |
PC + 2 | Н** | Н | 0 | 0 | Н | Н | Н | Н |
Сброс по переполнению стека (STVREN = 1 ) | 0x00 | Н** | Н | Н | Н | Н | Н | 1 | Н |
Сброс по опустошению стека (STVREN = 1 или 0 ) | 0x00 | Н** | Н | Н | Н | Н | Н | Н | 1 |
Выход по прерыванию из энергосберегающих режимов | PC + 2 *** | Н** | Н | Н | 0 | Н | Н | Н | Н |
Н = состояние не изменяется
* Бит SBOREN не реализован в устройствах PIC18FxxJ и первых кристаллах с технологией NanoWatt **
Равен 1 при сбросе по включению питания и не изменяется при других
источниках сброса, если программно разрешен сброс по снижению напряжения
питания (конфигурационные биты BOREN1:BOREN0 = 01 и SBOREN = 1 ). В противном случае равен 0 при сбросе *** При разрешении прерывания программный счетчик PC загружается адресом вектора прерывания |
В дополнении к источникам сброса, которые присутствуют и в
микроконтроллерах PIC18, PIC24F имеет три дополнительных источника
сброса:
IOPUWR : Сброс происходит при выборке команды с неизвестным машинным кодом (например, счетчик команд PC
указывает на часть Flash памяти, в которой хранятся пользовательские
константы). Так же этот вид сброса происходит при использовании
неинициализированных W регистров в качестве указателей.
CM : Сброс производится если данные в
конфигурационном слове не соответствуют его положению во Flash памяти
(например, слово CON1 записано по адресу CON2), либо при ошибке четности
конфигурационного слова.
TRAPR : Сброс производится при конфликте исключений, т.е. при возникновении второго исключения в то время, пока не обработано первое.
Эти источники сброса не имеют эквивалентов в архитектуре PIC18.
В микроконтроллерах PIC18 при возникновении переполнения или
опустошения стека происходит полный сброс, если установлен
конфигурационный бит STVREN . Даже если прерывание по ошибке стека запрещено, счетчик команд PC сбрасывается на ноль. В зависимости от вида ошибки (переполнение, опустошение) устанавливаются сигнальные флаги STKFUL или STKUNF .
В микроконтроллерах PIC24F ошибка стека вызывает программное исключение (soft trap), при этом в счетчик команд PC загружается адрес вектора обработчика этого исключения - 0x000A . Следует заметить, что ошибки переполнения и опустошения стека имеют один вектор прерывания и один сигнальный бит STKERR . Более подробно программные и аппаратные исключения архитектуры PIC24F будут рассмотрены в п. 1.6.2 "Немаскируемые исключения".
В микроконтроллерах PIC18 сброс BOR может быть разрешен или запрещен,
а порог напряжения питания, при котором производится сброс,
программируется в конфигурационном слове битами BORV1:BORV0 .
Новые микроконтроллеры PIC18 из семейства NanoWatt имеют возможность
программной конфигурации BOR-сброса в режиме выполнения кода.
В микроконтроллерах PIC24F логика сброса по снижению напряжения
питания объединена со стабилизатором напряжения ядра, расположенного на
кристалле. Сброс BOR всегда активирован, если включен стабилизатор, а
порог сброса лежит в пределах 2.35 - 2.60 В. Возможность семейства
PIC24F обеспечивать максимальную производительность во всем диапазоне
питающего напряжения делает конфигурацию BOR ненужной, в то время как
для семейства PIC18 это необходимо (максимальная производительность, а
точнее частота тактирования, зависит от напряжения питания). Следует
заметить, что микроконтроллеры PIC18FxxJ имеют схему BOR сброса,
аналогичную PIC24F.
В микроконтроллерах PIC18 после сброса регистры специального
назначения могут находиться в двух различных состояниях в зависимости от
причины сброса. После сбросов по включению питания (POR) и снижению
напряжения питания (BOR) регистры специального назначения находятся в
первом состоянии. После всех остальных причин сброса регистры
специального назначения находятся во втором состоянии. В зависимости от
назначения регистра его значение в двух состояниях после сброса может
быть одинаковым, однако для большинства регистров оно различно.
В микроконтроллерах PIC24F после любого вида сброса регистры
специального назначения переходят в одно состояние по умолчанию, в
зависимости от назначения регистра. Исключением являются регистры RCON и OSCCON . Состояние первого определяется причиной сброса, второго - словом конфигурации.
Для микроконтроллеров PIC18 определено состояние регистров
специального назначения после выхода из энергосберегающего режима по
переполнению сторожевого таймера. Для большинства регистров это
состояние соответствует выходу из энергосберегающего режима по внешнему
событию (wake-up event). Для микроконтроллеров семейства PIC24F
состояние регистров SFR не меняется при выходе из энергосберегающего
режима. За более подробной информацией можно обратиться к [1].
В микроконтроллерах PIC18 присутствует специальный таймер с
фиксированным периодом, задерживающий контроллер в состоянии сброса
после подачи питания. Период таймера TPWRT выбран таким
образом, чтобы все периферийные модули успели инициализироваться, а
регистры специального назначения перейти в требуемое состояние. Таймер,
задерживающий запуск микроконтроллера, может быть включен или выключен
установкой бита в конфигурационном слове. В зависимости от выбранного
источника тактирования и использования PLL к периоду таймера добавляется
некоторое время, которое требуется для запуска генератора и
установления петли ФАПЧ.
Для микроконтроллеров PIC24F время удержания в сбросе после
событий BOR или POR зависит от конфигурации стабилизатора напряжения
ядра. Если стабилизатор выключен, время удержания в сбросе равно TSTARTUP = TPWRT. Если стабилизатор включен - время удержания в сбросе равно TVREG. Интервал TPWRT фиксирован и составляет 64 мс, что сравнимо с задержкой старта семейства PIC18. Время TVREG
составляет 10 мкс. Этого достаточно для запуска регулятора и
стабилизации напряжения ядра. В дополнении к этому при сброшенном бите VREGS (RCON<8> )
к интервалу задержки добавляется дополнительное время, которое
требуется для запуска и стабилизации генератора и установления петли
ФАПЧ, если используется умножение тактовой частоты.
Многие микроконтроллеры PIC18 с поддержкой технологии NanoWatt
позволяют конфигурировать вывод внешнего сброса /MCLR как порт общего
назначения (только на вход). Функция вывода /MCLR определяется битом
конфигурации MCLRE .
В микроконтроллерах PIC24F вывод /MCLR не может выполнять функции
вывода общего назначения и всегда является выводом внешнего сброса.
Для приложений, в которых необходимо определять источник сброса,
часть кода, отвечающая за опрос флагов сброса, должна быть изменена.
Флаги причин сброса в PIC24F аналогичны флагам в PIC18, однако их
больше, и они имеют несколько другие причины установки. В PIC24F нет
необходимости проверять все флаги с целью принятия решения о причине
сброса - для большинства ситуаций достаточно определить, какой флаг
установлен. Следует помнить, что в PIC18 флаги сброса имеют активную
величину 0, в то время как в PIC24F - 1.
В микроконтроллерах PIC24F время удержания микроконтроллера в
сбросе будет больше, если не используется внутренний стабилизатор
напряжения ядра. Если же стабилизатор напряжения ядра используется, то
автоматически включается функция сброса по снижению напряжения питания
(BOR).
Внимание: внутренний стабилизатор напряжения ядра
не предназначен для питания внешних устройств! Микроконтроллер может
быть поврежден при превышении тока, на который рассчитан стабилизатор.
Рекомендуется для архитектур PIC18 и PIC24F подтягивать вывод
внешнего сброса /MCLR к шине VDD резистором с номиналом 1 кОм. В случае
нештатных ситуаций он ограничит ток, втекающий в вывод /MCLR. При этом
система может остаться частично работоспособной даже при физическом
повреждении драйверов других портов.
|