Свежие обсуждения
Микроконтроллеры

Таймеры в AVR

1 2

Врпрос у меня такой - при каких условиях и режимах работы таймеров в ATMEGA 64-128 выставляются в регистре TIFR биты признака переполнения таймера. Возможно ли это, если прерывание по переполнению таймера запрещено ?

Второй вопрос - в регистре SFIOR самый старший бит при установке в "1" останавливаяе таймеры или все-же он как-то по другому работает ? Просто у младших 8 и 16 мег назначение битов другое.

 

1. Возможно
2. По-другому

 

С первым разобрался - не совсем корректно работал с TCNT1H, а вот со вторым пока несяно - как все-же работает старший бит SFIOR в ATMEGA128 ?

 

Работает очень просто, пока TSM стоит в 1, соответствующие прескалеры обнулены (там где PSR0 и/или PSR321 в 1) и не выдают импульсы на свои выходы. Как только TSM =0, прескалеры начинают синхронно работать.

 

А если PSRы стоят в "0" то действия никакого ?

ЗЫЖ №2 - можно-ли как-то из программы определить - в каком режиме сконфигурирован контролер 128ом или режиме совместимости с ATMEGA103 ?

 

Никакого.

Надо фьюзы читать. Некоторые из них можно читать из программы, некоторые нельзя, надо смотреть по месту. Но зачем? Прочитать их драконом или джейтагом, да и всё.

 

Следующий вопрос :

Какие регистры портятся при сбросе по сторожевому таймеру. Понял, что ОЗУ не портиться, поэтому определив причину сброса восстанавливаю состояние из ОЗУ, а оно виснет. Почему не знаю - JTAG не присоединить.

 

При любом сбросе все регистры устанавливаются в исходное состояние.

During Reset, all I/O registers are set to their initial values, and the program starts execution
from the Reset Vector.

Исходное состояние указано в описании регистров.

 

Я думал что при сбросе по WDT ничего не изменяется , только выполняется немаскируемое прерывание на нулевой адрес. Пришлось копии всего хранить в ОЗУ и переписывать оттуда.

 

Wladimir_TS: Я думал что при сбросе по WDT ничего не изменяется
Зачем думать, надо дейташит курить