Программирование ARM AT91SAM7X: контроллер сброса Mon, September 16 2019  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AT91SAM7X: контроллер сброса Печать
Добавил(а) microsin   

Контролер сброса (Reset Controller, сокращенно RSTC) основанный на схемах генерации сброса при включении, обрабатывает все сбросы системы без необходимости применения каких-либо специальных внешних компонентов. Он может сообщить, когда сброс был произведен последний раз, и какой это был тип сброса.

RSTC также независимо или одновременно обрабатывает внешний сброс, и сбрасывает периферийные устройства и ядро процессора. Также в RSTC имеется встроенная система детектирования провала напряжения питания (brownout detection), которая защищает процессор от попадания в непредсказуемое состояние.

SAM7X RSTC block diagram fig13 01

Рис. 13-1. Блок-схема контроллера сброса.

[Функциональное описание]

Контроллер сброса RSTC построен из блоков NRST Manager, Brownout Manager, Startup Counter и Reset State Manager. Они работают от медленных тактов процессора (Slow Clock, SLCK) и генерируют следующие сигналы сброса:

proc_nreset: сигнал сброса процессора. Он также сбрасывает сторожевой таймер (Watchdog Timer).
periph_nreset: влияет на весь набор встроенных периферийных устройств.
nrst_out: управляет выходным сигналом NRST.

Эти сигналы сброса выставляются контроллером сброса либо от внешних событий, либо от действий в программе. 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.

SAM7X RSTC NRST Manager fig13 02

Рис. 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 запрещен.

SAM7X RSTC Brownout Manager fig13 03

Рис. 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 (сброс при включении питания).

SAM7X RSTC Power up Reset fig13 04

Рис. 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.

SAM7X RSTC User Reset fig13 05

Рис. 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.

SAM7X RSTC Brownout Reset fig13 06

Рис. 13-6. Состояние Brownout Reset.

Software Reset. Контроллер сброса предоставляет несколько команд, используемых для выставления разных сигналов сброса. Эти команды выполняются записью в регистр управления (RSTC_CR) в лог. 1 следующих бит:

PROCRST: запись в этот бит единички сбросит процессор и сторожевой таймер.
PERRST: записью в этот бит единички сбросит все встроенные периферийные устройства, включая подсистему памяти, и в частности команду Remap. Сброс периферии обычно используется в целях отладки.
EXTRST: запись в этот бит единички переводит в лог. 0 уровень на выводе NRST на время, определенное полем ERSTL в регистре режима (RSTC_MR).

Происходит вход в состояние программного сброса (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 не даст никакого эффекта.

SAM7X RSTC Software Reset fig13 07

Рис. 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.
• Если WDRPROC = 1, то будет сгенерирован только сброс процессора.

Сторожевой таймер (Watchdog Timer [1]) сбрасывается сигналом proc_nreset. Поскольку срабатывание сторожевого таймера (watchdog fault) всегда приводит к сбросу процессора, если установлен бит WDRSTEN, то сторожевой таймер всегда сбросится после Watchdog Reset, и сторожевой таймер по умолчанию будет разрешен с временем срабатывания, установленным на максимум.

Когда сброшен бит WDRSTEN в регистре WDT_MR, срабатывание сторожевого таймера (событие watchdog fault) никак не влияет на контролер сброса.

SAM7X RSTC Watchdog Reset fig13 08

Рис. 13-8. Watchdog Reset.

Приоритеты состояний сброса. Reset State Manager обрабатывает различные источники сброса в следующем порядке приоритета, приоритет понижается от начала к концу списка:

• Power-up Reset (сброс при включении питания).
• Brownout Reset (сброс при пропадании питания).
• Watchdog Reset (сброс от сторожевого таймера).
• Software Reset (программный сброс).
• User Reset (пользовательский сброс от внешнего сигнала лог. 0, поданного на вывод NRST).

Ниже описаны частные случаи:

• Когда происходит User Reset:

   – Событие сторожевого таймера не может возникнуть, потому что Watchdog Timer сбрасывается сигналом proc_nreset.
   – Программный сброс невозможен, потому что активировался сброс процессора.

• Когда происходит Software Reset:

   – Событие сторожевого таймера имеет приоритет над текущим состоянием.
   – Сигнал NRST не оказывает никакого эффекта.

• Когда происходит Watchdog Reset:

   – Активен сброс процессора, поэтому нельзя запрограммировать Software Reset.
   – Нельзя войти в состояние User 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 и очистит прерывание.

SAM7X RSTC Status and Interrupt fig13 09

Рис. 13-9. Статус контроллера сброса и статус прерывания.

[Регистры контроллера сброса]

Интерфейс пользователя WDT составляют три 32-битных регистра, показанные в таблице 13-1. В столбце "Смещение" указано смещение относительно базового адреса AT91C_BASE_RSTC (0xFFFFFD00).

Таблица 13-1. Карта памяти регистров контроллера сброса RSTC.

Смещение Регистр Мнемоника Доступ(1) Значение после сброса
0x00 Control Register (регистр управления) RSTC_CR WO -
0x04 Status Register (регистр состояния) RSTC_SR RO 0x00000000
0x08 Mode Register (регистр режима) RSTC_MR RW 0x00000000

Примечание (1): WO означает только запись (Write Only), RW означает чтение и запись (Read Write), RO означает только чтение (Read Only). 

Reset Controller Control Register (RSTC_CR)

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
KEY - - - - - - -
-
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
-
- - - - - - - - - - - EXTRST PERRST - PROCRST

PROCRST: Processor Reset

0 не дает никакого эффекта.
1 если KEY правильный, то будет сброшен процессор.

PERRST: Peripheral Reset

0 не дает никакого эффекта.
1 если KEY правильный, то будут сброшены периферийные устройства.

EXTRST: External Reset

0 не дает никакого эффекта.
1 если KEY правильный, то будет сгенерирован импульс лог. 0 (сигнал сброса внешних устройств) на выводе корпуса NRST.

KEY: Password

Специальное защитное поле, предназначенное для предотвращения случайного доступа на запись к регистру RSTC_CR. В поле KEY должно быть записано значение 0xA5. Запись сюда любого другого значения отменит операцию записи.

Reset Controller Status Register (RSTC_SR)

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
- - - - - - - - - - - - - - SRCMP NRSTL
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
-
- - - - RSTTYP - - - - - - BODSTS URSTS

URSTS: User Reset Status

0 не было перехода уровня 1 -> 0 на NRST с момента последнего чтения регистра RSTC_SR.
1 был обнаружен как минимум один переход уровня 1 -> 0 на NRST с момента последнего чтения регистра RSTC_SR.

BODSTS: Brownout Detection Status

0 не было перехода 1 -> 0 сигнала brownout с момента последнего чтения регистра RSTC_SR.
1 был переход 1 -> 0 сигнала brownout с момента последнего чтения регистра RSTC_SR.

RSTTYP: Reset Type

Это битовое поле сообщает о типе последнего сброса. Чтение регистра RSTC_SR не сбрасывает это поле.

RSTTYP Тип сброса Комментарии
000 Power-up Reset Произошло нарастание уровня напряжения питания VDDCORE.
010 Watchdog Reset Произошло событие отказа ПО (событие сторожевого таймера)
011 Software Reset Сброс процессора, вызванный командой программы.
100 User Reset Был обнаружен спад уровня на выводе корпуса NRST.
101 Brownout Reset Произошел сброс из-за просадки питания.

NRSTL: NRST Pin Level

Показывает зарегистрированное с частотой MCK состояние (лог. уровень) вывода корпуса NRST.

SRCMP: Software Reset Command in Progress

0 в настоящее время контролер сброса не выполняет команду программного сброса. Контроллер сброса готов к приему программной команды.
1 контроллером сброса выполняется одна из команд программного сброса. Контролер сброса занят.

Reset Controller Mode Register (RSTC_MR)

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
KEY - - - - - - -
BODIEN
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
-
- - - ERSTL - - - URSTIEN - - - URSTEN

URSTEN: User Reset Enable

0 детектирование низкого уровня на выводе корпуса NRST не сгенерирует User Reset.
1 детектирование низкого уровня на выводе корпуса NRST сгенерирует User Reset.

URSTIEN: User Reset Interrupt Enable

0 бит USRTS в регистре RSTC_SR, установленный в 1, не окажет никакого эффекта на сигнал прерывания rstc_irq.
1 бит USRTS в регистре RSTC_SR, установленный в 1, приведет к установке сигнала прерывания rstc_irq, если URSTEN = 0.

BODIEN: Brownout Detection Interrupt Enable

0 бит BODSTS в регистре RSTC_SR, установленный в 1, не окажет влияния на сигнал прерывания rstc_irq.
1 бит 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.
2. Сторожевой таймер (WatchDog, WDT) в микроконтроллерах ARM AT91SAM7X.

 

Добавить комментарий


Защитный код
Обновить

Top of Page