в бит 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-интерфейс предлагает следующие возможности:
Соединение между ведущим и ведомым контроллерами показана ниже. Вывод 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
0Dh(2Dh) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
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
0Eh(2Eh) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
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.