Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1572

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

РВ6), SS (альтернативная функция РВ4). Контроллер при обмене данными может работать в режиме ведущий (master) или ведомый (slave). Структур­ ная схема, поясняющая алгоритмы работы интерфейса, приведена на рис. 6. Этот же интерфейс используется для внутрисистемного программирования микроконтроллера с записью данных в FLASH и EEPROM.

SPI-master управляет обменом данных. Он формирует информационную 8-битовую последовательность на выходе MOSI, стробирующую выдачу данных, последовательность тактовых импульсов на выходе SCK и одно­ временно может принимать на входе MISO 8-битовую последовательность, стробируемую импульсами SCK. Если РВ4 конфигурируется как выход (DDB4=1), сигнал SS не используется, и РВ4 может работать в стандартном режиме вывода. Если РВ4 конфигурируют как вход (DDB4=0), при SS=1 продолжается работа в режиме SPI-master. Сигнал SS=0, поступающий от другого устройства, должен рассматриваться как запрос на переход в ре­ жим SPI-slave для приема данных.

master |

| slave

|

8-битовый

]

MISO I

PB6

PB6

1 MISO

1

регистр сдвига

Г

1

|РММНКЯ

i i

MOSI |

РВ5

PB5

I MOSI

к

1

1

1

1

|PB7

PB7|

I

Схема

!

SCK

1

1 sc*(

|

управления

|

i_

i

ss

|PB4

P B 4 |

ss

J

I

I

Рис. 6. Интерфейс SPI

SPI-slave управляется последовательностью импульсов на входе SCK и принимает информационную 8-битовую последовательность, подаваемую на его вход MOSI. Параллельно с приемом данных по этим же стробирующим импульсам SCK может формироваться выходная информационная по­ следовательность на выходе MISO. Для этого режима РВ4 должен конфи­ гурироваться входом. При SS=0 реализуется режим SPI-slave, если SS=l, интерфейс переходит в пассивное состояние и перестает работать.

Для режима SPI-master конфигурирование порта В следующее: MISO - вход, MOSI - выход, SCK - выход, SS - вход (как вход используется только при необходимости), для режима SPI-slave: MISO - выход, MOSI - вход, SCK - вход, SS - вход (задается сигнал логического нуля для работы ин-

49


терфейса). Обмен данными между SPI-master и SPI-slave производится по алгоритму кольцевого регистра сдвига (рис. 6), по каждому такту SCK дан­ ные сдвигаются на один бит, после 8 тактов содержимое регистра-master и регистра-slave меняется местами. Соединение MOSI - MOSI обеспечивает передачу от SPI-master к SPI-slave, а соединение MISO - MISO использует­ ся при необходимости передачи данных в обратном направлении.

Управление интерфейсом SPI производится тремя регистрами файла ре­ гистров ввода-вывода: регистром данных - SPDR, регистром управления - SPCR, регистром состояния - SPSR. SPDR и SPCR программно доступны и для чтения, и для записи, SPSR доступен только для чтения. Логическая организация этого интерфейса, как и других интерфейсных средств, рас­ сматриваемых далее, существенно сложнее, чем в параллельных портах ввода-вывода. Передача данных выполняется не за один такт микрокон­ троллера, а требует формирования целой последовательности сигналов. Поэтому необходимо согласование и логического взаимодействия, и вре­ менного взаимодействия с другими реализуемыми функциями.

В главе 1 было показано, что наиболее успешно эти задачи решаются применением процедур ввода-вывода по прерываниям. Практически все интерфейсные устройства микроконтроллера содержат средства поддержки для выполнения процедур прерываний; индивидуально формируемые за­ просы прерываний, соответствующая им таблица векторов прерываний, флаги разрешения и запрета обработки прерываний, аппаратно реализуемая процедура вызова прерываний. Более полно особенности системы преры­ ваний микроконтроллера будут рассмотрены в одном из последующих раз­ делов. В описании же работы каждого из интерфейсных средств, в том чис­ ле и интерфейса SPI, будут упоминаться только необходимые элементы системы прерываний.

SPDR служит для записи передаваемых данных и чтения данных, кото­ рые поступили в регистр сдвига при обмене. SPCR содержит 8 бит управ­ ления интерфейсом (слева в таблице символических имен старший бит).

Символические имена битов управления регистра SPCR

| SPIE | SPE | DORP | MSTR \ CPOL | CPHA j SPR1 | SPRO [

SPIE - бит разрешения прерывания SPI, 0 запрещает прерывания.

SPE - бит разрешения работы; при 0 запрещены любые операции в SPI, 1 разрешает работу интерфейса.

DORD - при 1 первым передается младший бит слова данных, при 0 - старший бит.

MSTR - при I определяется режим SPI-master, при 0 - режим SPI-slave. Младшие 4 бита SPCR определяют параметры тактового сигнала SCK:

50


CPOL - определяет пассивный уровень сигнала SCK в перерывах передачи данных, т.е. при 0 тактовый сигнал в пассивном состоянии интер­ фейса тоже нулевой.

СРНА - при 0 запись данных должна производиться каждым первым фронтом сигнала SCK после пассивного уровня, при 1 - каждым вторым фронтом сигнала после пассивного уровня.

SPR1 и SPR0 задают частоту сигнала SCK; коэффициент деления такто­ вой частоты микроконтроллера для интерфейса определяется эти­ ми битами следующим образом:

00 - коэффициент деления 4,

01 ~ коэффициент деления 16,

10 - коэффициент деления 64,

11 - коэффициент деления 128.

В регистре SPSR используется только 2 старших бита. SPIF (бит 7) - флаг прерывания, WCOL (бит 6) - флаг коллизии. SPIF устанавливается в 1 после каждого цикла передачи данных или после отмены режима SPImaster сигналом SS. SPIF вызывает вектор прерывания SPI_STC (адрес вектора $00а), если бит SPIE=1 (разрешение прерывания в SPCR) и уста­ новлен флаг глобального прерывания I в регистре состояния SREG*. Флаг прерывания очищается автоматически при вызове вектора прерывания SPISTC либо одновременно с очисткой флага WCOL. Флаг коллизии ус­ танавливается в случае чтения регистра SPDR в период передачи данных в SPI (некорректное чтение данных) и автоматически очищается одновре­ менно с флагом SPIF после чтения регистра SPSR и последующего обра­ щения к регистру SPDR.

Если биты в регистре управления SPCR для выбора необходимого ре­ жима заданы, запись байта данных в регистр SPDR микроконтроллера в режиме SPI-master приводит к началу рабочего цикла интерфейса. SPImaster (рис. 6) передает на MOSI данные, с входа MISO может записывать данные от SPI-slave и на выходе SCK формирует 8 импульсов, управляю­ щих передачей байта данных. Под управлением этих же сигналов SCK SPIslave (рис. 6) принимает данные с входа MOSI и может передавать из сво­ его регистра SPDR данные на выход MISO.

После завершения рабочего цикла обмена данными в микроконтроллере, работающем в любом режиме, устанавливается флаг прерывания для вызо­ ва вектора прерывания SPISTC. Подпрограмма обработки этого вектора должна выполнять операции доступа к регистрам SPI для реализации не­ обходимых функций интерфейса. Например, чтение из SPDR, поступивших в предыдущем цикле данных, и запись в него новых данных для передачи в следующем цикле. Управление битом разрешения прерываний SPIE позво­ ляет отказаться от вызова вектора прерывания SPISTC и производить

" регистр состояния SREG будет описан позднее

51


только программный ввод-вывод данных с программным опросом состоя­ ния интерфейса SPI. К микроконтроллеру SPI-master для обмена данными вместо второго контроллера может быть подключен и обычный регистр сдвига разрядности, соответствующей формату данных.

Таким образом, интерфейс SPI обеспечивает за один рабочий цикл и пе­ редачу байта данных через SPDR на выход, и запись в этот же регистр но­ вого байта данных, поступившего на вход. Запуск рабочего цикла произво­ дится записью в SPI-master очередного байта данных в регистр SPDR. До первого рабочего цикла параметры работы интерфейса должны быть указа­ ны записью соответствующего байта управления в регистр SPCR. Команды обмена данными с регистрами интерфейса SPI аналогичны командам, рас­ смотренным в примерах работы с параллельными портами. Программы управления работой интерфейса SPI рассмотрены в примерах главы 5.

3.3. Последовательный интерфейс UART

Интерфейс UART обеспечивает полнодуплексную передачу данных че­ рез линии ввода-вывода порта D сигналами: вход приемника - RxD (аль­ тернативная функция PD0) и выход передатчика - TxD (альтернативная функция PD1). Приемник и передатчик интерфейса работают независимо друг от друга в асинхронном режиме со стандартными скоростями переда­ чи данных и стандартным форматом сообщения (более подробную инфор­ мацию можно найти в описании любого асинхронного приемопередатчика, например, К580ВВ51 [1] или интерфейса RS-232C). Длина одного сообще­ ния - 8 или 9 бит, минимальная скорость передачи - 2400 бит/с, другие стандартные скорости кратны минимальной (например, 4800, 9600, 14400 и т.д.).

Управление интерфейсом UART производится 4 регистрами из файла регистров ввода-вывода: UBR - регистр данных, UCR - регистр управле­ ния, USR - регистр состояния, UBRR - регистр скорости передачи данных. Все регистры интерфейса программно доступны и для чтения, и для записи. Основные алгоритмы управления интерфейсом предполагают применение процедур ввода-вывода по прерываниям. Таблица векторов прерываний микроконтроллера включает соответствующие вектора прерываний. Обра­ ботку и формирование других сигналов интерфейса кроме RxD и TxD не­ обходимо производить программно в подпрограммах векторов прерываний.

Регистр данных UDR физически состоит из двух независимых регист­ ров; при записи в UDR данные поступают в регистр передачи интерфейса, при чтении считывается содержимое другого регистра, обеспечивающего прием данных интерфейсом. Запуск передатчика интерфейса производится записью байта данных в UDR, а по завершению приема запускается проце­ дура вызова вектора прерывания для считывания байта данных, поступив­ шего в приемник.

52