SFIOR - регистр специальных функций ввода вывода МК AVR

Просмотров: 13503Комментарии: 1
Электроника. СхемотехникаAVR.Начинающим

Когда описывал разную периферию обратил внимание, что биты регистра SFIOR описываются в разных местах даташита, а это может оказаться не очень удобным. Не так часто конечно он используется, я бы даже сказал редко, но все же решил сделать короткую заметку об этом регистре, может кому сгодится. Итак, SFIOR (special function input output regester) - регистр специальных функций ввода вывода. В этой заметке опишу регистр МК ATmega16 и в каком разделе даташита биты описываются. У него задействованы почти все биты регистра. У других микроконтроллеров функции битов будут те же самые, но некоторые биты могут не использоваться.

SFIOR
Биты 7:5 - ADTS2:ADTS0: выбор источника запуска АЦП. Если ADATE=1 регистра ADCSRA, то значение записанное в эти биты будет определять источник запуска преобразований АЦП. Преобразование будет запускаться на растущем фронте выбранного флага прерывания (т.е. при установке в "1"). Раздел даташита Analog to Digital Converter.
Бит 3 - ACME: включение мультиплексора аналогового компаратора. Если  в этот бит записан "0" - вход компаратора AIN1 подключен к ножке микроконтроллера AIN1, а если "1", тогда AIN1 может быть подключен к любому входу АЦП микроконтроллера (при условии, что АЦП выключен - бит ADEN=0 регистра ADCSRA). Раздел даташита Analog Comparator.
Бит 2 - PUD: отключение подтягивающих резисторов. Если бит установлен, то подтягивающие резисторы отключены не зависимо от того, что записано в DDRx и PORTx. Раздел даташита I/O Ports.
Бит 1 - PSR2: сброс предделителя таймера/счетчика2. Если этот бит установить в "1" - предделитель таймера/счетчика2 будет сброшен. Этот бит будет очищен аппаратно после подтверждения операции (буквально на следующем такте). Запись "0" в этот бит ни к чему не приведет. Раздел даташита 8-bit Timer/Counter2 with PWM and Asynchronous Operation.
Бит 0 - PSR10: сброс делителя частоты таймера/счетчика1 и таймера/счетчика0. Если этот бит установлен в "1" - предделитель таймера/счетчика1 и таймер/счетчика0 будет сброшен. Этот бит будет очищен аппаратно после  подтверждения операции. Запись "0" ни к чему не приведет. Чтение этого бита всегда будет возвращать "0". Следует отметить, что ТС1 и ТС0 используют совместно один и тот же предделитель и сброс делителя повлияет на оба таймера. Раздел даташита Timer/Counter0 and Timer/Counter1 Prescalers.
Предделитель работает не зависимо от того включен таймер или выключен. Если мы запускаем таймер с каким-нибудь предделителем, например 256, то первый такт на таймер может прийти не через 256 импульсов, а меньше, т.к. при запуске таймера на этом предделителе могло пройти какое-то количество импульсов. Сброс предделителей нужен для того, чтобы мы точно знали, что в этот момент мы начинаем наш счет с нуля. Но к этому нужно подходить аккуратно. А то, например, сбрасывая все время один таймер, второй с большим предделителем может и не сработать никогда.

Комментариев: 1 RSS

1 Руслан 11-11-2012 02:54

Спасибо! Оч пригодилась статья.

нет, как раз это все спользуется.. И даже не редко. Даже в самых простых задачах.

Жаль ADATE не разъяснили.. И ADIE (ADC Interrupt Enable - Разрешение прерывания ADC)

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)