AT91SAM7X: контроллер сброса |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Контролер сброса (Reset Controller, сокращенно RSTC) основанный на схемах генерации сброса при включении, обрабатывает все сбросы системы без необходимости применения каких-либо специальных внешних компонентов. Он может сообщить, когда сброс был произведен последний раз, и какой это был тип сброса. RSTC также независимо или одновременно обрабатывает внешний сброс, и сбрасывает периферийные устройства и ядро процессора. Также в RSTC имеется встроенная система детектирования провала напряжения питания (brownout detection), которая защищает процессор от попадания в непредсказуемое состояние. Рис. 13-1. Блок-схема контроллера сброса. [Функциональное описание] Контроллер сброса RSTC построен из блоков NRST Manager, Brownout Manager, Startup Counter и Reset State Manager. Они работают от медленных тактов процессора (Slow Clock, SLCK) и генерируют следующие сигналы сброса: proc_nreset: сигнал сброса процессора. Он также сбрасывает сторожевой таймер (Watchdog Timer). Эти сигналы сброса выставляются контроллером сброса либо от внешних событий, либо от действий в программе. Reset State Manager управляет генерацией сигналов сброса и предоставляет сигнал для NRST Manager, когда требуется выставить выходной сигнал NRST. NRST Manager генерирует сигнал NRST в течение программируемого времени, что позволяет правильно сбрасывать внешние устройства. Счетчик запуска (startup counter) ждет полноценного запуска кварцевого генератора. Задержка ожидания дается по максимальному времени запуска кварцевого генератора, которое можно узнать в секции характеристик Crystal Oscillator Characteristics (раздел Electrical Characteristics) документации. NRST Manager. Менеджер NRST опрашивает вывод NRST как вход и управляет этим выходом, переводя его в лог. 0, когда этого требует Reset State Manager. Рис. 13-2 показывает блок-схему NRST Manager. Рис. 13-2. Блок-схема менеджера сигнала NRST. Менеджер NRST опрашивает вывод корпуса NRST на тактовой частоте Slow Clock (SLCK). Когда обнаружено, что уровень перешел в лог. 0, для Reset State Manager сообщается о событии User Reset (сброс пользователя). Однако менеджер NRST может быть запрограммирован так, чтобы не вызывать срабатывание сброса, когда происходит внешнее управление выводом NRST. Запись бита URSTEN в 0 регистра RSTC_MR запрещает срабатывание User Reset. Логический уровень на выводе NRST может быть в любой момент прочитан чтением бита NRSTL (сокращение от NRST level) в регистре RSTC_SR. Как только выставляется сигнал сброса на выводе NRST, установится бит URSTS в регистре RSTC_SR. Этот бит очищается только когда читается регистр RSTC_SR. Контроллер сброса также может быть запрограммирован для генерации прерывания вместо генерации сброса. Для этой цели бит URSTIEN в регистре RSTC_MR должен быть записан в 1. Управление внешним сбросом NRST. Reset State Manager выставляет сигнал ext_nreset, чтобы выставить уровень сброса на выводе NRST. Когда это происходит, сигнал nrst_out переводится в лог. менеджером NRST на программируемое время, которое задается полем бит ERSTL в регистре RSTC_MR. Эта длительность сигнала сброса, которая называется EXTERNAL_RESET_LENGTH, равна по продолжительности 2(ERSTL+1) тактов Slow Clock. Это дает приблизительную длительность сигнала сброс в диапазоне от 60 мкс до 2 секунд. Обратите внимание, что значение 0 поля ERSTL определяет длительность импульса NRST равной двум тактам. Эта функция позволяет контроллеру сброса формировать сигнал на выводе NRST, гарантируя, что сигнал NRST будет подтянут к лог. 0 на время, достаточное для сброса внешних устройств, которые могут потенциально присутствовать в системе и сбрасываться от системного сброса. Brownout Manager. Этот блок защищает процессор от попадания в непредсказуемое состояние, если напряжение питания просядет ниже определенного уровня. Когда VDDCORE падает ниже порога brownout, Brownout Manager запрашивает генерацию brownout-сброса путем выставления сигнала bod_reset. Программист может запретить brownout reset путем установки в лог. 0 входного сигнала bod_rst_en, например путем блокировки соответствующего бита общего назначения энергонезависимой памяти (general-purpose NVM bit), который находится во FLASH. Когда brownout reset запрещен, сброс не выполняется. Вместо этого о событии просадки напряжения (brownout detection) сообщается в бите BODSTS регистра RSTC_SR. BODSTS устанавливается, и очищается только тогда, когда считывается регистр RSTC_SR. Бит BODSTS может вызвать прерывание, если установлен бит BODIEN в регистре RSTC_MR. С завода по умолчанию brownout reset запрещен. Рис. 13-3. Brownout Manager. [Состояния сброса] Reset State Manager обрабатывает разные источники сброса и генерирует внутренние сигналы сброса. Он сообщает о текущем состоянии сброса значением поля RSTTYP в регистре состояния (RSTC_SR). Обновление битового поля RSTTYP происходит, когда процессор выходит из состояния сброса. Power-up Reset. Когда поступает напряжение питания на VDDCORE, выход ячейки Main Supply POR (сброс от включения основного питания) фильтруется счетчиком запуска (start-up counter), который работает на медленных тактах (Slow Clock, SLCK). Назначение этого счетчика - гарантировать, что генератор Slow Clock застабилизируется перед запуском устройства. Время запуска (startup time), как показано на рис. 13-4, с помощью генератора Slow Clock фиксировано задано для удовлетворения времени запуска кварцевого генератора. После истечения времени startup сигнал сброса снимается, и поле RSTTYP в регистре RSTC_SR сообщит о событии Power-up Reset (сброс при включении питания). Рис. 13-4. Power-up Reset. Когда ячейкой Main Supply POR было детектировано, что VDDCORE в низком уровне, сигналы сброса выставляются немедленно. User Reset. Происходит вход в состояние сброса пользователя (User Reset), когда был детектирован низкий уровень на выводе NRST, и бит URSTEN в регистре RSTC_MR находится в лог. 1. Входной сигнал NRST ресинхронизируется с частотой медленных тактов SLCK, чтобы застраховать правильное поведение системы. В состояние User Reset активируется как только определен лог. 0 на выводе NRST. Выставляются сигналы сброса Processor Reset и Peripheral Reset. Из состояния User Reset происходит выход, когда уровень NRST поднимается, после двух тактов времени ресинхронизации и трех тактов, необходимых для старта процессора. Тактирование процессора возобновляется, как только подтверждено состояние NRST в лог. 1. Когда сигнал сброса процессора снимается, поле RSTTYP регистра состояния (RSTC_SR) загружается значение 0x4, чем показывается User Reset. Менеджер NRST гарантирует, что на линии NRST будет выставлен низкий уровень сброса на время не менее EXTERNAL_RESET_LENGTH тактов Slow Clock, как запрограммировано в поле ERSTL. Однако если NRST не перейдет в лог. 1 после EXTERNAL_RESET_LENGTH из-за внешней подтяжки к лог. 0, то внутренний сброс остается активным до тех пор, пока уровень на выводе NRST не поднимется к лог. 1. Рис. 13-5. Состояние User Reset. Brownout Reset. Когда выставлен сигнал brown_out / bod_reset, то Reset State Manager немедленно входит в состояние Brownout Reset (сброс по провалу питания). В этом состоянии выставляются сигналы сброса процессора, его внутренних периферийных устройств, а также выставляется внешний сигнал сброса NRST. Brownout Reset остается на 3 такта Slow Clock после нарастания brown_out / bod_reset, после 2 тактов ресинхронизации. Также срабатывает сигнал внешнего сброса. Когда процессор выходит из сброса, поле RSTTYP регистра RSTC_SR загружается значением 0x5, показывая тем самым, что последний сброс был типа Brownout Reset. Рис. 13-6. Состояние Brownout Reset. Software Reset. Контроллер сброса предоставляет несколько команд, используемых для выставления разных сигналов сброса. Эти команды выполняются записью в регистр управления (RSTC_CR) в лог. 1 следующих бит: PROCRST: запись в этот бит единички сбросит процессор и сторожевой таймер. Происходит вход в состояние программного сброса (Software Reset), если как минимум один из этих бит будет установлен программно. Все эти команды могут быть выполнены независимо (по отдельности) или одновременно. Программный сброс длится 3 такта Slow Clock (SLCK). Внутренние сигналы сброса выставляются, как только осуществилась запись в регистр. Это определяется на основной тактовой частоте (Master Clock, MCK). Сигналы сброса снимаются, когда происходит выход из состояния программного сброса, т. е. синхронно с сигналом медленных тактов SLCK. Если установлен бит EXTRST, то сигнал nrst_out выставляется в зависимости от состояния запрограммированного поля ERSTL. Однако результирующий спад уровня NRST не приводит к User Reset. Если установлен только бит PROCRST, то контроллер сброса сообщит о состоянии программного сброса в поле RSTTYP регистра состояния Status Register (RSTC_SR). Другие состояния Software Resets не сообщаются полем RSTTYP. Как только был определен программный характер сброса, установится бит SRCMP (Software Reset Command in Progress) в регистре состояния (RSTC_SR). Он очистится как только произойдет выход из состояния программного сброса. Не могут быть выполнены другие виды программного сброса, пока установлен бит SRCMP, и запись любого значения в регистр RSTC_CR не даст никакого эффекта. Рис. 13-7. Software Reset. Watchdog Reset. Произойдет вход в состояние сброса Watchdog Reset, когда произошло событие отказа ПО, обнаруженное сторожевым таймером (watchdog fault). Это состояние длится 3 такта Slow Clock. В состоянии Watchdog Reset активация сигналов сброса зависит от бита WDRPROC в регистре WDT_MR: • Если WDRPROC = 0, то будут выставлены сигналы сброса процессора (Processor Reset) и периферии (Peripheral Reset). Появится также сигнал сброса на выводе NRST, в зависимости от программирования поля ERSTL. Однако результирующий низкий уровень на сигнале NRST не приведет к состоянию User Reset. Сторожевой таймер (Watchdog Timer [1]) сбрасывается сигналом proc_nreset. Поскольку срабатывание сторожевого таймера (watchdog fault) всегда приводит к сбросу процессора, если установлен бит WDRSTEN, то сторожевой таймер всегда сбросится после Watchdog Reset, и сторожевой таймер по умолчанию будет разрешен с временем срабатывания, установленным на максимум. Когда сброшен бит WDRSTEN в регистре WDT_MR, срабатывание сторожевого таймера (событие watchdog fault) никак не влияет на контролер сброса. Рис. 13-8. Watchdog Reset. Приоритеты состояний сброса. Reset State Manager обрабатывает различные источники сброса в следующем порядке приоритета, приоритет понижается от начала к концу списка: • Power-up Reset (сброс при включении питания). Ниже описаны частные случаи: • Когда происходит User Reset: – Событие сторожевого таймера не может возникнуть, потому что Watchdog Timer сбрасывается сигналом proc_nreset. • Когда происходит Software Reset: – Событие сторожевого таймера имеет приоритет над текущим состоянием. • Когда происходит Watchdog Reset: – Активен сброс процессора, поэтому нельзя запрограммировать Software Reset. Регистр состояния контроллера сброса. Этот регистр (RSTC_SR) предоставляет несколько информационных бит и битовых полей статуса: RSTTYP. Это поле показывает тип последнего сброса, как это было объяснено ранее. SRCMP. Этот бит показывает, что выполняется команда программного сброса (Software Reset Command), и не должны предприниматься другие попытки программного сброса, пока не закончится текущий программный сброс. Бит автоматически сбросится по окончании текущего программного сброса. NRSTL. Этот бит показывает логический уровень на выводе NRST, который оценивается на каждом фронте тактов MCK (Master Clock, основная частота тактов процессора). URSTS. Этот бит установится при переходе уровня от лог. 1 к лог. 0 на выводе NRST. Этот переход также детектируется на частоте основных тактов процессора, по фронту нарастания MCK (см. рис. 13-9). Если запрещен User Reset (URSTEN = 0), и если разрешено прерывание установкой бита URSTIEN в регистре RSTC_MR, то бит URSTS вызовет прерывание. Чтение регистра RSTC_SR сбросит бит URSTS и очистит прерывание. BODSTS. Этот бит показывает событие brownout detection, когда brownout reset запрещен (bod_rst_en = 0). Это вызовет прерывание, если оно разрешено установкой бита BODIEN в регистре RSTC_MR. Чтение регистра RSTC_SR сбросит бит BODSTS и очистит прерывание. Рис. 13-9. Статус контроллера сброса и статус прерывания. [Регистры контроллера сброса] Интерфейс пользователя WDT составляют три 32-битных регистра, показанные в таблице 13-1. В столбце "Смещение" указано смещение относительно базового адреса AT91C_BASE_RSTC (0xFFFFFD00). Таблица 13-1. Карта памяти регистров контроллера сброса RSTC.
Примечание (1): WO означает только запись (Write Only), RW означает чтение и запись (Read Write), RO означает только чтение (Read Only). Reset Controller Control Register (RSTC_CR)
PROCRST: Processor Reset 0 не дает никакого эффекта. PERRST: Peripheral Reset 0 не дает никакого эффекта. EXTRST: External Reset 0 не дает никакого эффекта. KEY: Password Специальное защитное поле, предназначенное для предотвращения случайного доступа на запись к регистру RSTC_CR. В поле KEY должно быть записано значение 0xA5. Запись сюда любого другого значения отменит операцию записи. Reset Controller Status Register (RSTC_SR)
URSTS: User Reset Status 0 не было перехода уровня 1 -> 0 на NRST с момента последнего чтения регистра RSTC_SR. BODSTS: Brownout Detection Status 0 не было перехода 1 -> 0 сигнала brownout с момента последнего чтения регистра RSTC_SR. RSTTYP: Reset Type Это битовое поле сообщает о типе последнего сброса. Чтение регистра RSTC_SR не сбрасывает это поле.
NRSTL: NRST Pin Level Показывает зарегистрированное с частотой MCK состояние (лог. уровень) вывода корпуса NRST. SRCMP: Software Reset Command in Progress 0 в настоящее время контролер сброса не выполняет команду программного сброса. Контроллер сброса готов к приему программной команды. Reset Controller Mode Register (RSTC_MR)
URSTEN: User Reset Enable 0 детектирование низкого уровня на выводе корпуса NRST не сгенерирует User Reset. URSTIEN: User Reset Interrupt Enable 0 бит USRTS в регистре RSTC_SR, установленный в 1, не окажет никакого эффекта на сигнал прерывания rstc_irq. BODIEN: Brownout Detection Interrupt Enable 0 бит BODSTS в регистре RSTC_SR, установленный в 1, не окажет влияния на сигнал прерывания rstc_irq. ERSTL: External Reset Length Это поле задает длительность сигнала сброса внешних устройств на выводе корпуса NRST. Время импульса сброса (длительность импульса лог. 0) равно 2(ERSTL+1) таков Slow Clock. Это позволяет запрограммировать длительность сигнала сброса в интервале от 60 μs до 2 секунд. KEY: Password Специальное защитное поле, предназначенное для предотвращения случайного доступа на запись. В поле KEY должно быть записано значение 0xA5. Запись сюда любого другого значения отменит операцию записи. [Ссылки] 1. Сторожевой таймер AT91SAM7X. |