AVR микроконтроллер AT90S2333 фирмы Atmel
Иначе процессор не начнет работу.
Режим холостого хода.
Когда бит SM сброшен (0), команда SLEEP переводит процессор в режим
холостого хода (Idle mode). ЦПУ останавливается, но Таймеры/Счетчики,
сторожевой таймер и система прерываний продолжают работать. Это позволяет
процессору возобновлять работу как от внешних прерываний, так и по
переполнению таймеров/счетчиков или по сбросу от сторожевого таймера. Если
прерывание от аналогового компаратора не требуется, аналоговый компаратор
может быть отключен установкой бита ACD регистра ACSR. Это уменьшает
потребляемую мощность в режиме холостого хода. При выходе из режима
холостого хода процессор запускается без задержки.
Экономичный режим.
Когда бит SM установлен (1), команда SLEEP переводит процессор в
экономичный режим (Power Down Mode). В этом режиме останавливается внешний
генератор тактовых импульсов. Пользователь может разрешить работу
сторожевого таймера в этом режиме. Если сторожевой таймер разрешен,
процессор выходит из экономичного режима после отработки периода
сторожевого таймера. Если сторожевой таймер запрещен, выход из экономичного
режима может произойти только по внешнему сбросу, brown-out
сбросу или внешнему прерыванию по уровню.
Если для вывода из экономичного режима используется прерывание по
уровню, низкий уровень должен удерживаться на время достаточное для запуска
процессора. Это увеличивает устойчивость процессора к помехам. Изменение
уровня дважды проверятся с периодом генератора сторожевого таймера, если
обе выборки сигнала имеют необходимый уровень, процессор включается.
Номинальный период сторожевого таймера 1uS при 5В питания и температуре 25
градусов Цельсия.
При выходе из экономичного режима, от времени появления условия выхода
до включения процессора проходит некоторое время необходимое для запуска
кварцевого генератора. Задержка включения определяется теми же битами
CKSEL, что и время сброса. Длительность задержки на включение приведена в
таблице 7.
Если условие включения исчезнет до того, как процессор запустится,
например, низкий уровень на входе прерывания продержится недостаточно
долго, процессор не выйдет из экономичного режима.
Таблица 7. Установка задержки включения
|CKSEL [2:0] |Время запуска |
|000 |6CK |
|001 |6CK |
|010 |16K CK |
|011 |16K CK |
|100 |16K CK |
|101 |1K CK |
|110 |1K CK |
|111 |1K CK |
ТАЙМЕРЫ/СЧЕТЧИКИ
В AT90S2333/4433 предусмотрены два таймера/счетчика общего назначения.
8-разрядный и 16-разрядный. Каждый из таймеров индивидуально подключается к
одному из выходов 10-разрядного предварительного делителя частоты. Оба
таймера могут использоваться как таймеры с внутренним источником импульсов
или счетчики импульсов поступающих извне. В качестве источника импульсов
для таймеров можно выбрать сигнал с тактовой частотой процессора (CK),
импульсы предварительного делителя (CK/8, CK/64, CK/256 или CK/1024) или
импульсы с соответствующего внешнего вывода. Кроме того, таймеры могут быть
остановлены, запретом прохождения импульсов на них.
8-РАЗРЯДНЫЙ ТАЙМЕР/СЧЕТЧИК 0
8-разрядный таймер/счетчик может получать импульсы тактовой частоты -
CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024),
импульсы с внешнего вывода или быть остановлен соответствующими установками
регистра TCCR0. Флаг переполнения таймера находится в регистре TIFR. Биты
управления таймером расположены в регистре TCCR0. Разрешение и запрещение
прерываний от таймера управляется регистром TIMSK.
При работе таймера/счетчика от внешнего сигнала, внешний сигнал
синхронизируется с тактовым генератором ЦПУ. Для правильной обработки
внешнего сигнала, минимальное время между соседними импульсами должно
превышать период тактовой частоты процессора. Сигнал внешнего источника
обрабатывается по спадающему фронту тактовой частоты процессора.
8-разрядный таймер/счетчик можно использовать как счетчик с высоким
разрешением, так и для точных применений с низким коэффициентом деления
тактовой частоты. Более высокие коэффициенты деления можно использовать для
медленных функций или измерения временных интервалов между редкими
событиями.
РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 0 - TCCR0
TCCR0
|0 |0 |0 |Таймер/счетчик остановлен |
|0 |0 |1 |CK |
|0 |1 |0 |CK/8 |
|0 |1 |1 |CK/64 |
|1 |0 |0 |CK/256 |
|1 |0 |1 |CK/1024 |
|1 |1 |0 |Внешний вывод T0, нарастающий фронт |
|1 |1 |1 |Внешний вывод T0, спадающий фронт |
Условие Stop запрещает/разрешает функционирование таймера/счетчика. В
режимах деления используется частота тактового генератора. При
использовании работы от внешнего источника предварительно должен быть
установлен соответствующий бит регистра направления данных (0 - включает
ножку на ввод).
ТАЙМЕР/СЧЕТЧИК 0 - TCNT0.
TCNT0
|0 |0 |Таймер/счетчик 1 отключен от вывода OC1 |
|0 |1 |Переключение выхода OC1 |
|1 |0 |Сброс (0) вывода OC1 |
|1 |1 |Установка (1) вывода OC1 |
Таблица 10. Установка режима работы ШИМ
|PWM11 |PWM10 |Описание |
|0 |0 |Работа ШИМ запрещена |
|0 |1 |8 разрядный ШИМ |
|1 |0 |9 разрядный ШИМ |
|1 |1 |10 разрядный ШИМ |
РЕГИСТР B УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 - TCCR1B
|0 |0 |0 |Таймер/счетчик 1 |
| | | |остановлен |
|0 |0 |1 |CK |
|0 |1 |0 |CK/8 |
|0 |1 |1 |CK/64 |
|1 |0 |0 |CK/256 |
|1 |0 |1 |CK/1024 |
|1 |1 |0 |Спадающий фронт на |
| | | |выводе T1 |
|1 |1 |1 |Нарастающий фронт на |
| | | |выводе T1 |
Условие Stop запрещает/разрешает функционирование таймера/счетчика. В
режимах деления используется частота тактового генератора. При
использовании работы от внешнего источника предварительно должен быть
установлен соответствующий бит регистра направления данных (0 - включает
ножку на ввод).
ТАЙМЕР/СЧЕТЧИК 1 - TCNT1H И TCNT1L
TCNT1H
| |7 |6 |5 |4 |3 |2 |1 |0 |
|2Dh(4Dh) | | | | | | | | |
| |MSB |- |- |- |- |- |- |- |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
TCNT1L
| |7 |6 |5 |4 |3 |2 |1 |0 |
|2Ch(4Ch) | | | | | | | | |
| | | | | | | | |LSB |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Это 16-разрядный регистр, содержащий текущее значение таймера/счетчика 1.
Чтобы чтение и запись двух байт счетчика происходило синхронно, для работы
с ним используется временный регистр (TEMP). Этот вре-
менный регистр также используется при доступе к регистрам OCR1 и ICR1.
Если доступ к регистру с использованием TEMP производится и в основной
программе и в обработчике прерывания, на время доступа к регистру из
основной программы прерывания должны быть запрещены.
- Запись в таймер счетчик 1: При записи старшего байта в TCNT1H,
записываемые данные помещаются в регистр TEMP. Затем, при записи младшего
байта, он вместе с данными из TEMP переписывается в таймер/счетчик 1. Таким
образом, при записи 16-разрядного значения первым должен записываться байт
в TCNT1H.
- Чтение таймера/счетчика 1: При чтении младшего байта из TCNT1L, он
посылается в процессор, а данные из TCNT1H переписываются в регистр TEMP,
то есть одновременно читаются все 16-разрядов. При последующем чтении
регистра TCNT1H, данные берутся из регистра TEMP. То есть при чтении 16-
разрядного значения счетчика первым должен читаться регистр TCNT1L.
Таймер/счетчик 1 организован как суммирующий счетчик (в режиме ШИМ -
суммирующий/вычитающий) с возможностью чтения и записи. Если задан источник
тактовых импульсов для таймера/счетчика 1, после записи в него нового
значения, счет продолжается с следующем за операцией записи
периоде тактовой частоты.
РЕГИСТР СОВПАДЕНИЯ ТАЙМЕРА/СЧЕТЧИКА 1 - OCR1H И OCR1L
OCR1H
| |7 |6 |5 |4 |3 |2 |1 |0 |
|2Bh(4Bh) | | | | | | | | |
| |MSB | | | | | | | |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
OCR1L
| |7 |6 |5 |4 |3 |2 |1 |0 |
|3Dh(5Dh) | | | | | | | | |
| | | | | | | | |LSB |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Регистр совпадения 16-разрядный регистр, доступный для чтения и записи. В
этом регистре хранятся данные, которые непрерывно сравниваются с текущим
значением таймера/счетчика 1. Действие по совпадению задается регистрами
управления таймером/счетчиком 1 и регистром состояния. Поскольку регистр
OCR1A является 16-разрядным, при записи нового значения в регистр, для того
чтобы оба байта регистра записывались одновременно, используется временный
регистр (TEMP). При записи старшего байта, данные помещаются во временный
регистр, который переписывается в OCR1AH при записи младшего байта в
OCR1AL. Таким образом, для записи в регистр первым должен записываться
старший байт. Регистр TEMP используется при доступе к TCNT1 и ICR1, поэтому
если временный регистр используется в основной программе и в прерываниях,
при доступе к TEMP из основной программы прерывания должны запрещаться.
РЕГИСТР ЗАХВАТА ТАЙМЕРА/СЧЕТЧИКА 1 - ICR1H И ICR1L
ICR1H
| |7 |6 |5 |4 |3 |2 |1 |0 |
|25h(45h) | | | | | | | | |
| |MSB | | | | | | | |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
ICR1L
| |7 |6 |5 |4 |3 |2 |1 |0 |
|24h(44h) | | | | | | | | |
| | | | | | | | |LSB |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Регистр захвата 16-разрядный регистр доступный только для чтения. По
нарастающему или спадающему фронту (в соответствии с выбором фронта
импульса захвата ICES1) сигнала на выводе ICP текущее значение
таймера/счетчика 1 переписывается в регистр захвата ICR1. В это же время
устанавливается флаг захвата ICF1. Поскольку регистр захвата является 16-
разрядным, для чтения его значения, чтобы оба байта прочитались
одновременно, используется временный регистр. При чтении младшего байта
ICR1L, он посылается в ЦПУ, а старший байт регистра ICR1H переписывается во
временный регистр (TEMP). При чтении старшего байта, он принимается из
временного регистра. Таким образом для чтения 16-разрядного регистра первым
должен читаться младший байт. Регистр TEMP используется при доступе к TCNT1
и OCR1, поэтому если временный регистр используется в основной программе и
в прерываниях, при доступе к TEMP из основной программы прерывания должны
запрещаться.
ТАЙМЕР/СЧЕТЧИК 1 В РЕЖИМЕ ШИМ
При выборе режима широтно-импульсной модуляции (ШИМ), таймер/счетчик 1 и
регистр совпадения OCR1A формируют 8, 9 или 10-разрядный непрерывный
свободный от "дрожания" и правильный по фазе сигнал, выводимый на ножку
PB3(OC1). Таймер/счетчик 1 работает как реверсивный счетчик считающий от 0
до конечного значения (см. табл.10). При достижении конечного значения
счетчик начинает считать в обратную сторону до нуля, после чего рабочий
цикл повторяется. Когда значение счетчика совпадает с 8, 9 или 10-ю
младшими битами регистра OCR1A, вывод PD1(OC1) устанавливается или
сбрасывается в соответствии с установками бит COM1A1 и COM1A0 в регистре
TCCR1 (см. табл.11).
Таблица 12. Конечное значение таймера и частота ШИМ.
|Разрешение |Конечное значение |Частота ШИМ |
|ШИМ |таймера | |
|8 бит |00FFh (255) |Ftc1/510 |
|9 бит |01FFh (511) |Ftc1/1022 |
|10 бит |03FFh (1023) |Ftc1/2046 |
Таблица 13. Установка режима совпадения при работе ШИМ
|COM1A1|COM1A0|Влияние на вывод OC1 |
|0 |0 |не подключен |
|0 |1 |не подключен |
|1 |0 |очищается при совпадении, для возрастания счетчика и |
| | |сбрасывается для уменьшения (неинвертирующий ШИМ) |
|1 |1 |очищается при совпадении, для уменьшения счетчика и |
| | |сбрасывается для возрастания (инвертирующий ШИМ) |
В режиме ШИМ, при записи в регистр OCR1A, 10 младших бит передаются во
временный регистр и переписываются только при достижении таймером/счетчиком
конечного значения. При этом устраняется появление несимметричных импульсов
(дрожания), которые неизбежны при асинхронной записи OCR1A. Во промежуток
времени между записью во временный регистр и переписыванием его в OCR1, при
обращении к OCR1 читается содержимое временного регистра. Если OCR1A
содержит значение 0000h или конечное значение (TOP), вывод OC1 остается в
том состоянии, которое определяется установками COM1A1 и COM1A0. Это
показано в табл. 14.
Таблица 14. Выход ШИМ для OCR=0000h или TOP
|COM1A1|COM1A0|OCR1A |вывод OC1|
|1 |0 |0000h |низкий |
|1 |0 |TOP |высокий |
|1 |1 |0000h |высокий |
|1 |1 |TOP |низкий |
В режиме ШИМ флаг переполнения таймера 1 (TOV1) устанавливается когда
счетчик изменяет направление счета в точке 0000h. Прерывание по
переполнению таймера 1 работает как при нормальном режиме работы
таймера/счетчика, т.е. оно выполняется, если установлен флаг TOV1 и
разрешены соответствующие прерывания. То же самое касается флага совпадения
и прерывания по совпадению.
СТОРОЖЕВОЙ ТАЙМЕР
Сторожевой таймер работает от отдельного встроенного генератора
работающего на частоте 1 MHz (это типовое значение частоты для питания 5В).
Управляя предварительным делителем сторожевого таймера можно задавать
интервал сброса таймера от 16 до 2048 mS. Команда WDR сбрасывает сторожевой
таймер. Для работы сторожевого таймера можно выбрать одно из 8-ми значений
частоты, что позволяет в широких пределах изменять время между исполнением
команды WDR и сбросом процессора. При отработке периода работы сторожевого
таймера, если не поступила команда WDR, AT90S2313 сбрасывается, выполнение
программы продолжается с вектора сброса.
Для предотвращения нежелательного отключения сторожевого таймера, для
его запрещения должна выполняться определенная последовательность, которая
описана при рассмотрении регистра WDTCR.
РЕГИСТР УПРАВЛЕНИЯ СТОРОЖЕВЫМ ТАЙМЕРОМ – WDTCR
WDTCR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|21h(41h) | | | | | | | | |
| | | | |WDTOE |WDE |WDP2 |WDP1 |WDP0 |
| |R |R |R |R |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Биты 7..5 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и
всегда читаются как 0.
Бит 4 - WDTOE - разрешение выключения сторожевого таймера. При очистке бита
WDE этот бит должен быть установлен (1). Иначе, работа сторожевого таймера
не прекращается. Через четыре такта после установки этого бита, он
аппаратно сбрасывается.
Бит 3 - WDE- разрешение сторожевого таймера. Если бит установлен (1),
работа сторожевого таймера разрешена, если бит сброшен - запрещена. Сброс
бита производится только в том случае, если бит WDTOE установлен в 1. Для
запрещения включенного сторожевого таймера должна исполняться следующая
процедура:
1. Одной командой записать 1 в WDTOE и WDE. Единица в WDE должна
записываться даже в том случае если этот бит был установлен перед началом
процедуры остановки таймера
2. В течение следующих четырех тактов процессора необходимо записать в WDE
логический 0, при этом работа сторожевого таймера запрещается.
Биты 2..0 - WDP2..0 - Биты предварительного делителя сторожевого таймера.
Если работа сторожевого таймера разрешена, эти биты определяют
предварительный коэффициент деления для сторожевого таймера. В таблице 15
приведены различные значения установок предварительного делителя и
соответствующие им временные интервалы для напряжения питания Vcc=5V.
Таблица 15. Установки предварительного делителя сторожевого таймера
|WDP2 |WDP1 |WDP0 |период |
| | | |времени |
|0 |0 |0 |16K циклов |
|0 |0 |1 |32K циклов |
|0 |1 |0 |64K циклов |
|0 |1 |1 |128K циклов |
|1 |0 |0 |256 циклов |
|1 |0 |1 |512 циклов |
|1 |1 |0 |1024 циклов |
|1 |1 |1 |2048 циклов |
ЧТЕНИЕ И ЗАПИСЬ В ЭНЕРГОНЕЗАВИСИМУЮ ПАМЯТЬ
Регистры доступа к энергонезависимой памяти (EEPROM) расположены в
пространстве ввода/вывода. Время записи лежитв диапазоне 2.5-4 mS и зависит
от напряжения питания. Это самотактируемая функция которая, однако,
позволяет пользователю определить, можно ли записывать следующий байт. Для
определения возможности записи в EEPROM можно использовать специальное
прерывание по готовности EEPROM. Инициированная запись в EEPROM
заканчивается даже при возникновении условия сброса. Для защиты от
нежелательной записи в EEPROM необходимо следовать некоторым правилам,
которые будут рассмотрены ниже, при описании управляющего регистра
энергонезависимой памяти. При записи или чтении EEPROM процессор
приостанавливается на 2 машинных цикла до начала выполнения следующей
команды. При чтении из EEPROM процессор приостанавливается на четыре
машинных цикла перед тем как начнет выполняться следующая команда.
РЕГИСТР АДРЕСА EEPROM – EEAR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|1Eh(3Eh) | | | | | | | | |
| |EEAR7 |EEAR6 |EEAR5 |EEAR4 |EEAR3 |EEAR2 |EEAR1 |EEAR0 |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Регистр EEAR задает адрес одного из 128/256 байт адресного пространства
EEPROM. Байты данных адресуется линейно в диапазоне от 0 до 127/255.
Начальное значение регистра EEAR неопределено, поэтому перед доступом к
EEPROM в этот регистр должно быть записано требуемое число.
РЕГИСТР ДАННЫХ EEPROM – EEDR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|1Dh(3Dh) | | | | | | | | |
| |MSB | | | | | | |LSB |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Биты 7..0 - EEDR7..0 - Данные EEPROM. При записи регистр EEDR содержит
данные, которые записываются в EEPROM по адресу в регистре EEAR. Для
операции чтения в этот регистр читаются данные прочитанные из EEPROM по
адресу заданному в регистре EEAR.
РЕГИСТР УПРАВЛЕНИЯ EEPROM - EECR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|1Ch(3Ch) | | | | | | | | |
| | | | | |EERIE |EEMWE |EEWE |EERE |
| |R |R |R |R |R |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |0 |0 |0 |
|значение | | | | | | | | |
Биты 7..4 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и
всегда читаются как 0.
Бит 3 - EERIE - Разрешение прерывания по готовности EEPROM. Если
установлены биты I в регистре SREG и EERIE, разрешается прерывание по
готовности EEPROM. Это прерывание возникает непрерывно, если сброшен бит
EEWE.
Бит 2 - EEMWE - Управление разрешением записи. Этот бит определяет, будут
ли записаны данные при установке EEWE. Если бит EEMWE установлен, при
установке EEWE данные записываются по выбранному адресу EEPROM. Если этот
бит сброшен, установка EEWE не имеет эффекта. После программной установки
этот бит сбрасывается аппаратно через четыре такта процессора.
Бит 1 - EEWE - Разрешение записи в EEPROM. Сигнал EEWE является стробом
записи в EEPROM. После установки правильных адреса и данных для записи в
EEPROM необходимо установить бит EEWE. При записи "1"
в бит EEWE должен быть установлен бит EEMWE, тогда происходит запись в
EEPROM. Для записи в EEPROM должна соблюдаться следующая последовательность
(порядок шагов 2 и 3 необязателен):
|1|Ждем обнуления EEWE |
|2|Записываем адрес в EEAR (не обязательно) |
|3|Записываем данные в EEDR (не обязательно) |
|4|Устанавливаем в 1 бит EEMWE |
|5|Не позже чем через 4 такта после установки EEMWE |
| |устанавливаем EEWE |
После того как время записи истечет (типично 2.5 mS для Vcc=5V и 4mS для
Vcc=2.7), бит EEWE очищается аппаратно. Пользователь может отслеживать этот
бит и ожидать его установки в ноль, перед тем как записывать следующий
байт. При установке EEWE, ЦПУ останавливается на два цикла перед
исполнением следующей команды.
Бит 0 - EERE - разрешение чтения из EEPROM. Сигнал EERE является стробом
чтения из EEPROM. После установки нужного адреса в регистре EEAR,
необходимо установить бит EERE. После того как бит EERE будет аппаратно
очищен, в регистре EEDR. Чтение EEPROM занимает одну команду и не требует
отслеживания бита EERE. При установке бита EERE, ЦПУ останавливается на два
цикла перед тем как будет выполнена следующая команда. Перед чтением
пользователь должен проверять состояние бита EEWE, если регистры данных или
адреса изменяются во время операции записи, запись в ячейку прерывается и
результат операции записи становится неопределенным.
ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС SPI
Интерфейс SPI позволяет производить высокоскоростной синхронный обмен
данными между AT90S2333/4433 и периферийными устройствами или несколькими
процессорами. SPI-интерфейс предлагает следующие возможности:
1. Полностью дуплексная 3-проводная синхронная передача данных;
2. Работа в режиме ведущего или ведомого;
3. Передача начиная со старшего или младшего бита;
4. Четыре программируемые скорости передачи;
5. Флаг прерывания по окончанию передачи;
6. Флаг защиты от коллизий при записи
7. Выход из режима Idle.
Соединение между ведущим и ведомым контроллерами показана ниже. Вывод
PB5(SCK) является выходом тактовых импульсов для ведущего контроллера и
входом для ведомого. Запись в регистр данных SPI ведущего контроллера
запускает тактовый генератор. Записанные данные сдвигаются через вывод
PB3(MOSI) на вывод PB3(MOSI) ведомого контроллера. После того как байт
будет выведен тактовый генератор останавливается и выставляет флаг
окончания передачи (SPIF). Если разрешены прерывания (установлен бит SPIE в
регистре SPCR), вызывается соответствующее прерывание. Вывод PB2(SS)
ведомого контроллера должен быть подключен на землю. Два сдвиговых регистра
в ведущем и ведомом контроллерах можно рассматривать как один
распределенный 16-разрядный регистр сдвига. Когда данные сдвигаются из
ведущего контроллера в ведомый, то же самое происходит в обратном
направлении. За один цикл сдвига ведущий и ведомый контроллеры обмениваются
байтами данных.
Система имеет одиночный буфер в направлении передачи и двойной в
направлении приема. Передаваемый символ не записывается в регистр данных
SPI до тех пор, пока передача не завершится. При приеме до завершения
операции сдвига данные должны быть прочитаны из регистра данных. Иначе
предыдущий символ теряется. При разрешении SPI выводы MOSI, MISO, SCK и SS
устанавливаются на ввод/вывод в соответствии с таблицей.
Таблица 16. Установка выводов SPI
|Выво|Направление в режиме |Направление в режиме |
|д |ведущего |ведомого |
|MOSI|Определяется |Вход |
| |пользователем | |
|MISO|Вход |Определяется |
| | |пользователем |
|SCK |Определяется |Вход |
| |пользователем | |
|SS |Определяется |Вход |
| |пользователем | |
РАБОТА ВЫВОДА SS
Если SPI сконфигурирован как ведущий (установлен бит MSTR в SPCR),
пользователь может задавать направление ввода для ножки SS. Если SS
сконфигурирован на вывод, ножка работает как бит ввода/вывода общего
назначения не влияющий на работу SPI. Если ножка сконфигурирована на ввод,
на нее необходимо подать высокий уровень, чтобы SPI работал в режиме
ведущего. Если в режиме ведущего ножка SS установлена на ввод и внешним
устройством устанавливается в низкий уровень, системой SPI это
воспринимается как выбор шины другим ведущим устройством и попытка передать
данные ведомому. Для избежания конфликтов на шине система SPI делает
следующее:
1. Сбрасывается бит MSTR в SPCR, система SPI становится ведомой. При этом
ножки MOSI и SCK становятся входами.
2. Устанавливается флаг SPIF в SPSR, если разрешены прерывания, будет
исполнена программа обслуживания прерывания.
Таким образом если передача по SPI производится в режиме ведущего и
существует возможность установки вывода SS в низкий уровень, прерывание
должно отслеживать установлен ли бит MSTR. Если бит MSTR будет сброшен при
переходе в режим ведомого контроллера, обратно он должен быть установлен
пользователем.
Если система SPI сконфигурирована как ведомая, вывод SS всегда является
входом. Когда SS переводится в низкий уровень, система SPI активируется и
ножка MISO, если это задано пользователем, становится выходом. Другие
выводы являются входами. Если внешним устройством на вывод SS подан высокий
уровень, все выводы становятся входами, а система SPI становится пассивной,
т.е. не будет принимать данные.
Режимы обмена данными
Биты CPHA и CPOL определяют четыре комбинации фазы и полярности SCK
относительно битов данных. Битом CPOL задается полярность импульсов на
выводе SCK, при CPOL=0 полярность импульсов положительная, при отсутствии
импульсов на выводе удерживается низкий уровень. При CPOL=1 полярность
импульсов отрицательная, при отсутствии импульсов на выходе высокий
уровень. Битом CPHA задается фронт по которому обрабатываются биты данных.
При CPHA=0 обработка происходит по переднему фронту импульсов SCK (для
CPOL=0 переход из низкого уровня в высокий, для CPOL=1 - из высокого в
низкий). При CPHA=1 обработка происходит по заднему фронту импульсов SCK.
РЕГИСТР УПРАВЛЕНИЯ SPI – SPCR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|0Dh(2Dh) | | | | | | | | |
| |SPIE |SPE |DORD |MSTR |CPOL |CPHA |SPR1 |SPRO0 |
| |R\W |R\W |R\W |R\W |R\W |R\W |R\W |R\W |
|Начальное|0 |0 |0 |0 |0 |1 |0 |0 |
|значение | | | | | | | | |
Бит 7 - SPIE - Разрешение прерываний от SPI - если этот бит установлен, при
установке бита SPIF в регистре SPSR выполняется прерывание от SPI, если
разрешены общие прерывания.
Бит 6 - SPE - Разрешение SPI - Этот бит должен быть установлен для
осуществления любых операций по шине SPI.
Бит 5 - DORD - Порядок бит данных - Если этот бит установлен, при обмене
первым передается младший бит данных. Если бит сброшен – первым передается
старший бит.
Бит 4 - MSTR - Выбор ведущего/ведомого - При установке этого бита шина SPI
работает в режиме ведущего, при сбросе - в режиме ведомого. Если вывод SS
сконфигурирован как вход и устанавливается в низкий уровень когда
установлен бит MSTR, бит MSTR сбрасывается и устанавливается бит SPIF в
регистре SPSR. Для возобновления работы в режиме ведущего пользователь
должен установить этот бит.
Бит 3 - CPOL - Полярность тактовых сигналов - Этим битом задается
полярность импульсов на выводе SCK, при CPOL=0 полярность импульсов
положительная, при отсутствии импульсов на выводе удерживается низкий
уровень. При CPOL=1 полярность импульсов отрицательная, при отсутствии
импульсов на выходе высокий уровень.
Бит 2 - CPHA - Фазировка тактовых импульсов. - Этим битом задается фронт по
которому обрабатываются биты данных. При CPHA=0 обработка происходит по
переднему фронту импульсов SCK (для CPOL=0 переход из низкого уровня в
высокий, для CPOL=1 - из высокого в низкий). При CPHA=1 обработка
происходит по заднему фронту импульсов SCK.
Биты 1,0 - SPR1,SPR0 - Выбор тактовой частоты SPI. - Этими битами задается
скорость работы SPI шины для ведущего устройства. Для ведомого контролерра
установка этих бит не имеет значения. Соотношение тактовой частоты
процессора и частоты SCK приведено в таблице:
Таблица 17. Соотношение между SCK и тактовой частотой процессора
|SPR1|SPR0|Частота SCK |SPR1|SPR0|Частота |
| | | | | |SCK |
|0 |0 |Fck/4 |1 |0 |Fck/64 |
|0 |1 |Fck/16 |1 |1 |Fck/128 |
РЕГИСТР СОСТОЯНИЯ SPI – SPSR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|0Eh(2Eh) | | | | | | | | |
| |SPIF |WCOL |- |- |- |- |- |- |
| |R |R |R |R |R |R |R |R |
|Начальное|0 |0 |0 |0 |0 |1 |0 |0 |
|значение | | | | | | | | |
Бит 7 - SPIF - флаг прерывания SPI. После завершения обмена устанавливается
бит SPIF и генерируется прерывание, если установлен бит SPIE в SPCR и
разрешены глобальные прерывания. Этот флаг устанавливается и в том случае,
если на вывод SS, сконфигурированный как вход, подается низкий уровень,
когда SPI работает в режиме ведущего. Флаг SPIF сбрасывается аппаратно при
выполнении соответствующего вектора прерывания. Кроме того бит SPIF, если
он был установлен, сбрасывается при первом же чтении регистра SPSR и
последующем доступе к регистру данных SPI.
Бит 6 - WCOL - Ошибка записи. - Этот бит устанавливается при записи в
регистр SPDR во время обмена. Чтение регистра во время обмена дает неверный
результат, запись в него не производится. Так же как и бит SPIF, WCOL
сбрасывается (если он был установлен) при первом же чтении регистра SPSR и
последующем доступе к регистру SPDR.
Биты 5..0 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и
всегда читаются как 0.
SPI интерфейс также используется для загрузки и чтения памяти программ и
содержимого EEPROM процессора, программирование процессора через SPI
интерфейс будет рассмотрено ниже.
РЕГИСТР ДАННЫХ SPI – SPDR
| |7 |6 |5 |4 |3 |2 |1 |0 |
|0Fh(2Fh) | | | | | | | | |
Страницы: 1, 2, 3, 4
|