Смекни!
smekni.com

Микроконтроллеры AVR (стр. 9 из 15)

-RX9 – флаг разрешения приема девяти бит данных;

-SREN – флаг активизации USART (для передачи битов данных используется вывод 6 порта С, а для приема – вывод 7 того же порта).

Флаги запросов (TXIF и RCIF) и разрешения (TXIE и RCIE) прерываний от USART находятся в регистрах PIR и PIE.

Синхронная передача данных по интерфейсу SPI

Интерфейс SPI (Serial Peripheral Interface) служит для обмена данными с периферийными устройствами. В качестве таких устройств могут выступать простые сдвиговые регистры или буквенно-цифровые модули индикации, а также сложные микропроцессорные системы или системы регистрации данных. Многие компании-изготовители предлагают большой выбор устройств с интерфейсом SPI.

В случае обмена данными по интерфейсу SPI микроконтроллер работает в режиме ведущего устройства (Master), взаимодействуя с одним или несколькими ведомыми блоками (Slave). Схема передачи данных по интерфейсу SPI микроконтроллеров AVR/PIC показана на рис. 7.6 (MSB – старший разряд, a LSB – младший разряд передаваемого байта).


Рис. 7.6. Схема передачи данных по интерфейсу SPI микроконтроллеров AVR/PIC

Ведущее устройство берет на себя активную часть обмена данными, вызывая передачу и управляя процессом. Ведомое устройство не может само быть активным. Оно принимает и передает данные только тогда, когда происходит его активизация со стороны ведущего устройства по линии /SS. Ведущее устройство также генерирует такт для передачи по выходной линии SCK. Для ведомого блока вывод SCK является входом, через который он получает от Master-устройства тактирующие сигналы.

Если ведомое устройство активизируется ведущим по линии /SS, то начинается обмен данными: Master записывает подлежащий передаче байт в свой сдвиговой регистр данных (для микроконтроллеров AVR – регистр SPDR, для микроконтроллеров PIC – регистр SSPBUF). С помощью каждого выработанного тактового импульса Master перемещает один бит данных на выход MOSI/SDO, a Slave одновременно в обратном направлении передает один бит на вход MISO/SDI ведущего блока. Таким образом, в течение цикла SPI, состоящего из восьми тактовых импульсов, Master и Slave обмениваются байтом данных.

По окончании передачи данных в регистре состояния интерфейса SPI устанавливается флаг соответствующего запроса на прерывание. Этот флаг указывает на окончание передачи и вызывает запрос на прерывание после того как в регистре управления SPI будет установлен разряд разрешения на прерывание от интерфейса SPI. В режиме "Master" текущая передача данных может быть преждевременно завершена выдачей в линию /SS сигнала лог. 1.

К интерфейсу SPI ведущего устройства можно подключать несколько ведомых устройств (пример для микроконтроллеров AVR – на рис. 7.7), однако активным будет только то из них, на вход /SS которого будет подан уровень лог. 0. Выходы MISO незадействованных ведомых блоков находятся в высокоомном состоянии и не влияют на процесс передачи данных.

В примере на рис. 7.7 устройство G2, с точки зрения ведущего устройства, является только блоком передачи (например, ЦАП с интерфейсом SPI), а устройство G3 – только блоком приема.

Рис. 7.7. Подключение нескольких ведомых устройств к одному ведущему по SPI (для AVR)

В микроконтроллерах AVR в качестве линий SPI используются выводы порта В (табл. 7.2). В микроконтроллерах PIC для последовательной синхронной передачи данных используется порт MSSP, работающий в режиме интерфейса SPI или I2С. Линиям SPI соответствуют выводы порта А и С (табл. 7.2).

Таблица 7.2. Распределение выводов портов для линий интерфейса SPI

Линия Микроконтроллеры AVR Микроконтроллеры PIC
/SS Разряд 4 порта В Зависит от модели (например, разряд 5 порта А)
MOSI (SDO) Разряд 5 порта В Разряд 5 порта С
MISO(SDI) Разряд 6 порта В Разряд 4 порта С
SCK Разряд 7 порта В Разряд 3 порта С

Регистры управления и состояния SPI в микроконтроллерах AVR

Регистр управления SPCR интерфейса SPI в микроконтроллерах AVR (рис. 7.8) находится в области ввода/вывода по адресу 0x0D (адресу 0x2D в SRAM).

7 6 5 4 3 2 1 0
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

Рис. 7.8. Регистр управления SPCR микроконтроллеров AVR

По окончании передачи данных через интерфейс SPI аппаратная часть устанавливает в регистре состояния SPCR разряд SPIF (флаг прерываний от интерфейса SPI). Этот флаг указывает на завершение передачи, и приводит к запросу на прерывание как только в регистре управления SPCR будет установлен разряд SPIE, а в регистре состояния SREG – флаг общего разрешения прерываний I.

Разряд SPE активизирует интерфейс SPI (лог. 1) или отключает его (лог. 0). После поступления сигнала сброса этот разряд принимает значение лог. 0, и тем самым система SPI отключается.

Если разряд DORD содержит лог. 0, то сначала будет передан старший разряд байта данных. При DORD = 1 первым передается младший разряд.

Когда разряд MSTR содержит лог. 0, то система SPI определяется как ведомая (Slave), а при MSTR = 1 она будет определена как ведущая (Master). Когда линия /SS в режиме Master сконфигурирована как вход, то разряд MSTR при низком уровне сигнала на выводе /SS сбрасывается в лог. 0, и тем самым интерфейс SPI определяется как Slave. В этом случае в регистре состояния устанавливается флаг SPIF.

Когда разряд CPOL содержит лог. 0, то на выходе SCK в неактивном состоянии находится сигнал низкого уровня. Если CPOL = 1, то на SCK в неактивном состоянии находится сигнал высокого уровня. С помощью этого разряда, а также разряда СРНА (выбор фазы синхронизации) устанавливается один из четырех режимов передачи данных по интерфейсу SPI (табл. 7.3).

Разряды SPR1 и SPR0 при работе интерфейса SPI в режиме Master служат для выбора тактовой частоты для линии SCK. Если система SPI сконфигурирована как Slave, то эти разряды не имеют никакого значения. Взаимосвязь между разрядами SPR1, SPR0 и частотой импульсов в линии SCK показана в табл. 7.4.

Таблица 7.3. Режимы передачи данных по интерфейсу SPI в МК AVR

CPOL СРНА Описание режима
0 0 Master переводит линию /SS в состояние лог. 0. Для соответствующего ведомого блока передача начинается по ниспадающему фронту этого сигнала. Его выход MISO переходит из высокоомного в активное состояние, и старший разряд байта, находящегося в его регистре данных SPDR, появляется на выходе MISO.Собственно передачу данных Master начинает записью подлежащего передаче байта данных в свой регистр SPDR. Вслед за этим на выходе MOSI ведущего блока появляется старший разряд. На протяжении первой половины первого тактового импульса тактовая линия еще остается в состоянии покоя для того, чтобы обеспечить стабильную установку на соответствующем входе бита данных.По нарастающему фронту первого и каждого последующего тактового импульса принимаются биты, расположенные на входах Master и Slave, а по ниспадающему фронту следующий бит сдвигается дальше. После восьмого тактового импульса передача данных завершена, флаги SPIF в регистрах состояния ведущего и ведомого блоков установлены, а содержимое сдвиговых регистров будут перенесено в соответствующие приемные буферы. Выход MOSI ведущего блока возвращается в состояние покоя (лог. 1), а на выходе MISO ведомого блока, как правило, находится старший разряд байта, только что принятого ведущим блоком.Одновременно со сбросом линии /SS в исходное состояние (лог. 1) Master завершает передачу, Slave становится неактивным, а его выход MISO переходит в высокоомное состояние
0 1 Аналогично описанному выше случаю с той разницей, что состояние покоя тактовой линии здесь устанавливается при лог. 1, биты данных принимаются по первому и каждому последующему тактовому импульсу, а сдвиг осуществляется по нарастающему фронту сигнала
1 0 Для того чтобы при этом режиме начать передачу данных, Master, как и в первом случае, переводит линию /SS в состояние лог. 0. Блок Slave разблокирован, и его выход MISO переходит из высокоомного в активное состояние. Логический уровень на MISO для этого случая не определен, но, как правило, на MISO находится младший разряд байта, переданного во время предыдущей передачи от Slave к Master. Собственно передачу данных Master в этом режиме начинает посредством записи байта данных, подлежащего передаче, в регистр SPDR. Для ведомого блока передача начинается по нарастающему фронту тактового сигнала. Старшие разряды подлежащих передаче байтов в ведущем и ведомом блоках с помощью нарастающего фронта первого тактового импульса устанавливаются на выходе MOSI ведущего блока (выходе MISO ведомого блока). По ниспадающему фронту первого и каждого последующего тактового импульса они переносятся на входы Master и Slave, а по нарастающему фронту следующий разряд сдвигается.После восьмого тактового импульса передача данных завершается, устанавливаются флаги SPIF в регистрах состояния интерфейсов Master и Slave, а содержимое их сдвиговых регистров переносится в соответствующие буферы приема. Выход MOSI ведущего блока возвращается в состояние покоя (лог. 1), на выходе MISO ведомого блока остается младший разряд байта, только что переданного ведущему блоку. Одновременно с возвратом в исходное состояние линии /SS (лог. 1) Master завершает передачу в целом, Slave становится неактивным, а его выход MISO переходит в высокоомное состояние.
1 1 Аналогично описанному выше случаю стой разницей, что состоянием покоя тактовой линии здесь является лог. 1, а биты данных сдвигаются по ниспадающему фронту первого и каждого последующего тактового импульса, а принимаются по нарастающему фронту

Таблица 7.4. Частота импульсов в линии SCK в зависимости от разрядов SPR1, SPR0

SPR1 SPR0 Частота импульсов в линии SCK
0 0 Частота системной синхронизации / 4
0 1 Частота системной синхронизации /16
1 0 Частота системной синхронизации / 64
1 1 Частота системной синхронизации /128

Регистр состояния SPSR интерфейса SPI в микроконтроллерах AVR расположен в области ввода/вывода по адресу 0х0Е (0x2E в SRAM). В этом регистре используются только разряды 6 и 7: