Микроконтроллер ATmega328 имеет возможность сброса (реинициализации) разными способами:
Бит BOOTRST (0) управляет значением вектора сброса (1 - по адресу 0x0000 / 0 - в области загрузчика)
Биты BOOTSZ1 (2) и BOOTSZ0 (1) управляют расположением области загрузчика и его размером:
Бит WDRF (3) устанавливается в 1 если сброс произошел по тайм-ауту сторожевого таймера.
Бит BORF (2) устанавливается в 1 если сброс произошел по снижению питания (от системы BOD).
Бит EXTRF (1) устанавливается в 1 если сброс произошел по сигналу низкого уровня на выводе RESET (1 ножка).
Бит PORF (0) устанавливается в 1 если сброс произошел при включении питания микроконтроллера.
Управление системой сброса также осуществляется заданием длительности задержки сброса. Это было описано в посте Тактирование микроконтроллера - Часть 1
- При включении питания микроконтроллера
- Аппаратный сброс
- Тайм-аут сторожевого таймера
- Падения напряжения питания ниже заданной величины
При наступлении одного из этих событий все регистры принимают начальные значения, а в счетчик команд загружается адрес вектора сброса. Вектор сброса может располагаться как по адресу 0x0000, так и в начале области загрузчика.
High fuse byte:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
RSTDISBL
|
DWEN
|
SPIEN
|
WDTON
|
EESAVE
|
BOOTSZ1
|
BOOTSZ0
|
BOOTRST
|
Бит BOOTRST (0) управляет значением вектора сброса (1 - по адресу 0x0000 / 0 - в области загрузчика)
Биты BOOTSZ1 (2) и BOOTSZ0 (1) управляют расположением области загрузчика и его размером:
- 00 - загрузчик располагается по адресу 0x3800 и его размер 512 байт
- 01 - загрузчик располагается по адресу 0x3C00 и его размер 1024 байта
- 10 - загрузчик располагается по адресу 0x3E00 и его размер 2048 байт
- 11 - загрузчик располагается по адресу 0x3F00 и его размер 4096 байт
Бит RSTDISBL (7) позволяет отключить аппаратный сброс микроконтроллера и использовать вывод RESET (1 ножка) как порт ввода вывода (0 - сброс отключен / 1 - сброс включен).
Для определения каким образом был сброшен микроконтроллер существует регистр MCUSR:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
WDRF
|
BORF
|
EXTRF
|
PORF
|
Бит WDRF (3) устанавливается в 1 если сброс произошел по тайм-ауту сторожевого таймера.
Бит BORF (2) устанавливается в 1 если сброс произошел по снижению питания (от системы BOD).
Бит EXTRF (1) устанавливается в 1 если сброс произошел по сигналу низкого уровня на выводе RESET (1 ножка).
Бит PORF (0) устанавливается в 1 если сброс произошел при включении питания микроконтроллера.
Управление системой сброса также осуществляется заданием длительности задержки сброса. Это было описано в посте Тактирование микроконтроллера - Часть 1
Комментариев нет:
Отправить комментарий