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.

Бит 6 - WCOL - Ошибка записи. - Этот бит устанавливается при записи в регистр SPDR во время обмена. Чтение регистра во время обмена дает не­верный результат, запись в него не производится. Так же как и бит SPIF, WCOL сбрасывается (если он был установлен) при первом же чтении регистра SPSR и последующем доступе к регистру SPDR.

Биты 5..0 - зарезервированы. В AT90S2333/4433 эти биты зарезервиро­ваны и всегда читаются как 0.

SPI интерфейс также используется для загрузки и чтения памяти программ и содержимого EEPROM процессора, программирование процессора через SPI интерфейс будет рассмотрено ниже.

РЕГИСТР ДАННЫХ SPI – SPDR

 

0Fh(2Fh)

7 6 5 4 3 2 1 0

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

Регистр данных SPI доступен для чтения и записи и используется для обмена данными между набором регистров и регистром сдвига SPI. За­пись в регистр инициирует передачу данных. При чтении регистра читают­ся данные и буфера регистра сдвига.


УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМО-ПЕРЕДАТЧИК

 

В состав AT90S2333/4433 входит универсальный асинхронный приемо­передатчик (UART), его основные особенности:

- генерация произвольных значений скорости

- высокая скорость при низких тактовых частотах

- 8 или 9 бит данных

- фильтрация шума

- Определение переполнения

- Детектирование ошибки кадра

- Определение неверного стартового бита

- Три раздельных прерывания - завершение передачи, очистка регист­ра передачи и завершение приема.

- Режим мультипроцессорного обмена.

 

Передача данных

 

Передача данных инициируется записью передаваемых данных в регистр ввода/вывода данных UART - UDR. Данные пересылаются из UDR в сдвиговый

регистр передатчика когда:

- новый символ записывается в UDR после того как был выдвинут стоповый бит для предыдущего символа. При этом сдвиговый регистр за­гружается сразу.

- новый символ записывается в UDR до того как выдвинут стоповый бит для предыдущего символа. При этом сдвиговый регистр записывается сразу после того, как будет выдвинут стоповый бит предыдущего символа.

При этом в регистре состояния UART - USR устанавливается бит-при­знак очистки регистра данных - UDRE/ Когда этот бит установлен, UART готов к приему следующего символа. При перезаписи UDR в 10(11)- разря­дный сдвиговый регистр, бит 0 сдвигового регистра обнуляется (старто­вый бит), а бит 9 или 10 устанавливается (стоповый бит). Если выбрано 9-битовое слово данных (установлен бит CHR9 в регистре UCR), бит TXB8 из UCR переписывается в 9-й бит сдвигового регистра передатчика.

После тактового импульса, следующего с частотой передачи, старто­вый бит выдвигается на вывод TXD. Затем выдвигаются данные, начиная с младшего бита. После того как выдвинут стоповый бит, в сдвиговый ре­гистр загружаются новые данные, если они были записаны в UDR во время передачи. При загрузке устанавливается бит UDRE. Если до выдвижения стопового бита в регистр UDR не поступают новые данные, UDRE остается установленным до последующей записи UDR. Если новые данные не поступили и на выводе TXD появляется стоповый бит, в регистре USR устанавливает­ся флаг окончания передачи - TXC.

Установка бита TXEN в UCR разрешает работу передатчика. При очис­тке бита TXEN, вывод PD1 можно использовать для ввода/вывода данных. Если бит TXEN установлен, передатчик UART подключен к выводу PD1 неза­висимо от установки бита DDD1 в регистре DDRD.

Прием данных

Логическая схема приемника обрабатывает сигнал на выводе RXD с частотой в 16 больше скорости передачи (для обработки одного бита при­нимаемой последовательности, производится 16 выборок входного сигна­ла). В состоянии ожидания одна выборка логического нуля интерпретиру­ется как спадающий фронт стартового бита, после чего запускается по­следовательность обнаружения стартового бита. Если в первой выборке сигнала обнаружен нулевой отсчет, приемник обрабатывает 8, 9 и 10 вы­борки сигнала на выводе RXD. Если хотя бы две из трех выборок равны логической единице, стартовый бит считается шумом и приемник ждет сле­дующего перехода из 1 в 0. Если обнаружен стартовый бит, начинается обработка бит данных. Решение об уровне данных также производится по 8, 9 и 10 выборкам вхо­дного сигнала, уровень входного сигнала определяется по равенству двух выборок. После того как уровень данных определен, данные вдвигаются в сдвиговый регистр приемника. Для определения стопового бита хотя бы две из трех выборок вход­ного сигнала должны быть равны 1. Если это условие не выполняется, в регистре USR устанавливается флаг ошибки кадра FE. Перед чтением дан­ных из регистра UDR пользователь должен проверять бит FE для обнаруже­ния ошибок кадра. Независимо от принятия правильного стопового бита по окончанию приема символа принятые данные переписываются в UDR и устанавливается флаг RXC в регистре USR. Физически регистр UDR состоит из двух отдель­ных регистров, один используется для передачи данных, другой - для приема. При чтении UDR происходит доступ к регистру приемника, при за­писи - к регистру передатчика. При обмене 9-битовыми данными 9-й бит принятых данных записывается в бит RXB8 регистра UCR. Если при приеме символа из регистра UDR не был прочитан предыду­щий символ, в регистре UCR устанавливается флаг переполнения - OR. Ус­тановка этого бита означает, что последний принятый байт данных не пе­реписывается из сдвигового регистра в регистр UDR и будет потерян. Бит OR буферирован и обновляется при чтении правильных данных из UDR. Та­ким образом, пользователь всегда может проверить состояние OR после чтения UDR и обнаружить происшедшее переполнение. При сбросе бита RXEN в регистре UCR прием данных запрещается. При этом вывод PD0 можно использовать для ввода/вывода общего назначения. При установке RXEN, приемник подключен к выводу PD0 независимо от со­стояния бита DDD0 в регистре DDRD.

Режим мультипроцессорного обмена Режим многопроцессорного обмена позволяет нескольким ведомым про­цессорам принимать данные от ведущего. Для этого сначала декодируется адресный байт, который определяет к какому из процессоров обращается ведущий.

Если ведомый процессор принял правильный адрес, последующие

байты он принимает как данные, в то время как остальные ведомые про­цессоры игнорируют принимаемые байты до приема следующего адреса. Для работы в режиме ведущего процессор должен установить 9-би­товый режим передачи (установлен бит CHR9 в UCSRB). Для передачи адре­сного байта девятый бит должен устанавливаться в 1, и сбрасываться для передачи байтов данных. В ведомых процессорах механизм приема слегка отличается для 8-ми и 9-ти битового режима приема. При приеме восьми бит (сброшен бит CHR9 в UCSRB), стоповый бит для адресного байта равен единице и равен нулю для байт данных. В 9-ти битовом режиме для адресного байта устанавли­вается 9-й бит, для байт данных он будет сброшен, стоповый бит всегда будет равен 1. Для обмена данными в многопроцессорном режиме необходимо выпол­нить следующую процедуру.

1. Все подчиненные процессоры устанавливают обмен в многопроцес­сорном режиме (установлен бит MPCM в UCSRA)

2. Ведущий процессор посылает адресный байт, все подчиненные про­цессоры читают и принимают этот байт. В ведомых процессорах устанавли­вается флаг RXC в UCSRA.

3. Каждый из ведомых процессоров читает регистр UDR и определяет был ли он выбран. Если процессор выбран, он сбрасывает флаг MPCM в UCSRA, иначе он будет ожидать следующего адресного байта.

4. Для каждого принятого байта данных в ведомом процессоре уста­навливается флаг завершения приема (RXC в UCSRA). Кроме того в 8-битовом режиме будет генерироваться ошибка кадра (FE в UCSRA), по­скольку стоповый бит будет равен 0. В других подчиненных процессорах

установлен бит MPCM, поэтому байты данных будут игнорироваться, ре­гистр UDR не записывается, флаги RXC и FE не устанавливаются.


Информация о работе «AVR микроконтроллер AT90S2333 фирмы Atmel»
Раздел: Радиоэлектроника
Количество знаков с пробелами: 141751
Количество таблиц: 86
Количество изображений: 0

0 комментариев


Наверх