Материал: Микропроцессорные устройства систем управления (2005)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

терфейса). Обмен данными между 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

Регистр управления UCR содержит 8 бит управления работой интерфей­ са.

Символические имена битов управления регистра UCR [RXCIEJ TXCIE| UDRIE j RXEN TXEN CHR9 \ RXBjTj TXB8 |

RXCIE - бит разрешения прерывания по окончании рабочего цикла приема данных (вектор прерывания UARTJRXC с адресом $00Ь).

TXCIE - бит разрешения прерывания по окончании рабочего цикла пере­ дачи данных (вектор прерывания UARTJTXC с адресом $00d).

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

(вектор прерывания UART_DRE с адресом $00с).

RXEN - бит разрешения приема, разрешает работу приемника интерфейса. TXEN - бит разрешения передачи, разрешает работу передатчика интер­

фейса.

CHR9 - бит разрешения 9-битового формата сообщения.

RXB8 - дополнительный 9-й бит сообщения приемника (бит 8). ТХВ8 - дополнительный 9-й бит сообщения передатчика (бит 8).

В регистре UCR все биты управления при единичном значении разрешают выполнение соответствующей функции, при нулевом значении ~ запреща­ ют. Эти значения и, следовательно, выполнение указанных функций зада­ ются программно.

Регистр состояния USR содержит флаги выполнения интерфейсом

раз­

личных операций.

 

 

 

 

 

 

Символические имена флагов в регистре USR

 

 

[ RXC j ТХС

UDRE | FE

OR

-

-

-

j

RXC - флаг окончания приема сообщения; устанавливается после приема очередного сообщения в UDR и вызывает вектор прерывания UARTJRXC, если биты разрешения RXCIE (в регистре UCR) и I (в регистре SREG) установлены. Флаг очищается при чтении регист­ ра UDR, т.е. подпрограмма обработки прерывания RXC должна обязательно предусматривать чтение регистра UDR для очистки флага.

53

ТХС - флаг завершения передачи сообщения; аналогично флагу RXC вы­ зывает вектор прерывания UARTTXC. Флаг ТХС очищается ав­ томатически при вызове вектора прерывания или программно за­ писью " 1" в этот бит.

UDRE - флаг готовности регистра UDR к приему нового сообщения для передачи (до завершения передачи ТХС); аналогично флагу RXC вызывает вектор прерывания UARTDRE. Флаг очищается при за­ писи в регистр UDR, что должно обязательно выполняться в под­ программе обработки прерывания.

FE - флаг ошибки формата сообщения; устанавливается, например, когда столовый бит принятого сообщения имеет нулевой уровень. Очи­ щается при приеме сообщения установленного формата.

OR - флаг перегрузки; устанавливается, когда предыдущее принятое со­ общение еще не прочитано из регистра UDR, а следующее уже по­ ступает в приемник. Очищается, когда сообщение принято и пере­ дано в UDR.

Регистр UBRR определяет скорость обмена данными интерфейса. Ско­ рость обмена данными BAUD определяется формулой

BAUD =

£и

,

 

16(UBRR + 1)

 

где f-ги - частота тактового генератора микроконтроллера,

UBRR - содержимое регистра скорости (число в диапазоне $00 - $FF). Вычисленное значение скорости округляется до ближайшего стандартного значения (не рекомендуется использование скоростей, отличающихся от стандартных более, чем на 1 %).

Таким образом, в интерфейсе UART скорости передачи и приема сооб­ щения одинаковы и определяются UBRR, разрешение на выполнение раз­ личных операций задается программно изменением содержимого регистра UCR. Операции обмена данными выполняются по флагам регистра USR векторами соответствующих прерываний. Подпрограммы обработки пре­ рываний должны выполнять обмен данными с интерфейсом UART через регистр UDR.

3.4. Таймеры микроконтроллера

Микроконтроллер содержит 3 таймера-счетчика, которые работают не­ зависимо друг от друга. Таймер 0 и таймер 2 состоят из 8-разрядных счет­ чиков, таймер 1 содержит 16-разрядный счетчик. Счетчики таймеров рабо­ тают в режиме суммирования. Каждый из таймеров может работать от так­ тового генератора микроконтроллера с программируемым коэффициентом деления частоты (от 1 до 1024) либо от внешнего источника входного сиг­ нала. При использовании внешнего источника входные сигналы стробируются тактовыми импульсами микроконтроллера. Кроме того, таймер 2 мо54

Источник: https://studfile.net/preview/16521245/