fl
"РЛ" - НАЧИНАЮЩИМ
г .
ш а с а с а с о с а с э щ и г х
Роман Абраш
г. Новочеркасск
E-mail:
a r v @ r a d i o l i g a . c o m
Продолжение. Начало в №1-12/2007
Глава 23. Последовательный интерфейс вР1
Вначале
6
домашнем задании. Разумеется, чтобы
подпрограммы ввода-вывода не зависали при ожида-
нии, необходимо ограничить каким-то образом время
ожидания. Можно использовать, например, П тегО (ко-
торый в силу высокого приоритета своих прерываний
чаще всего используется для отсчета временных ин-
тервалов). В цикле ожидания подпрограмм надо допол-
нительно проверять заранее выделенный флаг, уста-
новка которого будет означать, что время (»кидания ис-
текло, а устанавливать этот флаг в обработчике пре-
рываний от таймера после истечения заданного про-
межутка времени. При этом цикл ожидания в процеду-
ре ОШВуІе будет выглядеть так:
W a itT I:
jb
T im eo u t,
e x it_ e r r o r
; если время истекло *■ выход с
ошибкой
jn b
T I,
W a itT I
; ждем завершения передачи
Участок кода в обработчике прерываний таймера должен быть примерно таким:
jb
Tim eo u t,
no_check
; флаг стоит - ничего не делаем
d jn z
Tim eO utC nt,
no_check
; таймаут не истек - ничего не
делаем
setb
Tim eout
; устанавливаем флаг
no_check:
Перед тем, как вызвать подпрограмму OutByte, необхо-
димо занести в ячейку TimeOutCnt число, определяющее
значение таймаута, и сбросить флаг Timeout. Участок кода
в обработчике прерывания должен находиться в таком мес-
те, чтобы он выполнялся через нужные промежутки време-
ни, например, каждые
10
миллисекунд, тогда при помощи
переменной TimeOutCnt мы сможем задавать время ожида-
ния от 10 до 2560 миллисекунд. Само собой, подпрограмма
InByte должна быть построена аналогично.
Другой метод исключения “зависаний’’ в процессе ожи-
дания - выполнять его в основном цикле программы, т.е. от-
казаться от отдельной подпрограммы ввода или вывода бай-
та, а делать это непосредственно в основном рабочем цик-
ле. В этом случае внутри цикла ожидания продолжает вы-
полняться полезная работа.
А теперь обратимся ко второму аппаратно реализован-
ному в AT89S8252 последовательному интерфейсу - SPI
(Serial Peripherial Interface). От UART он отличается существен-
но большей скоростью обмена (максимум - с в 4 раза мень-
шей частотой, чем у кварцевого генератора), обмен всегда
синхронный и одновременный (т.е. при любой передаче про-
исходит одновременный прием байта и наоборот), а так же
количеством задействованных линий портов (3 или 4 против
двух).
При связи двух устройств по интерфейсу SPI одно из них
всегда является ведущим (Master), а другое - ведомым (Slave).
Master всегда является инициатором обмена, т.е. формиру-
ет импульсы синхронизации, >для передачи которых исполь-
зуется линия SCK (порт Р1.7). Данные, передаваемые бит за
битом ведущим устройством, поступают в линию MOSI
(Master Output - Slave Input), что переводится как “выход ве-
дущего - вход ведомого”. Для линии MOSI использован порт
Р1.5. Одновременно бит за битом ведомое устройство выда-
ет ответный байт в линию MISO (Master Input - Slave Output),
что переводится как “Вход ведущего - выход ведомого/’. В
качестве линии MISO задействован порт Р1.6. Кроме ука-
занных трех основных линий имеется еще вход SS (порт Р
1
.4),
который задает режим работы SPI: если на этом входе высо-
кий логический уровень, то модуль SPI работает в качестве
ведущего (Master Mode), а низкий уровень включает режим
ведомого (Slave Mode). При помощи згой линии можно орга-
низовать обмен одного ведущего с несколькими ведомыми:
нужный ведомый выбирается установкой на его входе SS
низкого уровня, а у остальных ведомых модуль SPI работать
не будет.
Рис. 16 поясняет, как происходит связь устройств по
SPI: показано соединение двух ведомых с одним ведущим.
Если ведомое устройство только одно - его вход SS надо
сразу соединить с общим проводом, у а ведущего при этом
высвобождается одна линия порта ©.
Slave 2
SCK
MOSI
MISO
SS
MSTR=0
Рис. 16. Соединение устройств по SPI
Master_____
SCK
MOSI
MISO
MSTR=1
Slave 1
SCK
MOSI
MISO
SS
__MSTRsQ
Радиолюбитель - О I /2 0 0 8 [)
23
предыдущая страница 23 Радиолюбитель 2008-01 читать онлайн следующая страница 25 Радиолюбитель 2008-01 читать онлайн Домой Выключить/включить текст