Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Источники и механизм обработки прерываний




Прерывания изменяют текущую последовательность выполнения команд с целью об­служивания внешнего или внутреннего события, вызывавшего прерывание. Прерывание в отличие от сброса не останавливает выполнение текущей инструкции. При поступлении запроса на прерывание МК завершает выполнение текущей команды, а затем реализует механизм перехода к подпрограмме прерывания:

• регистры центрального процессора автоматически сохраняются в стеке в следующем порядке: регистр признаков ССР, аккумулятор АСС, младший байт индексного регис­тра X, старший байт счетчика адреса РСН, младший байт счетчика адреса PCL; по завершении прерывания инструкция возврата из прерывания RTI восстанавливает в обратном порядке все регистры центрального процессора для возобновления вы­полнения фоновой программы;

• бит глобальной маски прерывания I в регистре признаков CCR устанавливается в «1»,
запрещая обслуживание любых других запросов на прерывание до тех пор, пока не
будет завершена текущая подпрограмма прерывания;

• счетчик адреса PC загружается адресом начала подпрограммы прерывания, который называют вектором прерывания.

В МК семейства НС08 реализован традиционный для всех МК фирмы «Motorola» механизм загрузки векторов прерывания. В адресном пространстве памяти программ МК выделена специальная область, которая носит название сегмента векторов прерывания. Каждому источнику запросов на прерывание в этой области отведено по два байта памяти с фиксированными адресами. Пользователь на этапе программирования МК за­носит в эти ячейки памяти адрес начала подпрограммы прерывания. При переходе к выполнению подпрограммы прерывания этот адрес автоматически загружается в счетчик адреса центрального процессора. В рассматриваемом сегменте памяти размещается также вектор сброса.

Ниже приведен пример структуры прикладной программы с двумя подпрограммами

прерывания по запросам на входе и от процессора событий TIM1. Абсолютные адреса сегмента векторов прерывания соответствуют карте памяти МК MC68HC908GP32.

 

Аппаратные средства прерывания МК семейства НС08 имеют следующие особенности:

• выполнение команды возврата из прерывания RTI автоматически разрешает преры­вания;

• выполнение команды возврата из прерывания RTI не блокирует прерывания на пе­риод выполнения следующей команды; вход в новую подпрограмму возможен сразу
после выполнения команды RTI.

Дело в том, что при входе в подпрограмму прерывания бит глобальной маски преры­вания I обязательно равен 0. Иначе прерывания были бы запрещены и говорить о под­программе прерывания не имело бы смысла. Содержимое регистра признаков, в кото­ром располагается маска I, сохраняется в стеке при входе в подпрограмму прерывания. Следовательно, при восстановлении регистра признаков из стека по команде RTI бит глобальной маски прерывания установится в «0», и прерывания будут разрешены.

Все источники прерываний МК семейства НС08 можно разделить на три группы:

1)немаскируемое программное прерывание по команде SWI;

2)маскируемые внешние прерывания по входу и по некоторому числу линий
портов ввода/вывода, которые принадлежат модулю сканирования клавиатуры KBI08;

3)маскируемые прерывания от периферийных модулей.

Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме прерывания по ходу выполнения прикладной программы и воспользоваться подпрограм­мой прерывания как обычной подпрограммой. Наличие в системе команд инструкции программного прерывания SWI предоставляет такую возможность. Эта команда автома­тически загружает в стек регистры CCR, АСС, X и увеличенное на единицу содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $fffd сегмента векторов прерывания. Этот адрес может быть началь­ным адресом подпрограммы прерывания или же находиться внутри нее. При выходе из подпрограммы прерывания команда RTI восстановит содержимое регистров централь­ного процессора и МК продолжит выполнение прикладной программы с команды, кото­рая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы прерывания, который начинается с произвольно выбранной инструкции внутри подпрог­раммы прерывания, но заканчивается обязательно командой RTI.

Число линий МК MC68HC908GP32 для приема внешних запросов на прерывания варьируется от одной линии (вход ) до 9 линий. Обслуживание запросов по входу осуществляет модуль внешних прерываний IRQ08. Активный уровень сигнала запроса на входе - низкий логический, длительность сигнала запроса должна составлять не менее tILIH=50 нc. Дополнительные входы внешних запросов могут быть получены путем соответствующей инициализации модуля сканирования клавиатуры KBI08, который по­зволяет настроить некоторое число линий ввода/вывода МК для приема внешних запро­сов на прерывание.

Все прерывания, кроме программного по команде SWI, могут быть разрешены или запрещены сбросом или установкой глобальной маски прерывания I в регистре при­знаков CCR:

cll; команда сбрасывает в «О» бит I, т. е. разрешает прерывания.

sel; команда устанавливает бит I в «1», т. е. запрещает прерывания.

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

Подсистема прерываний МК семейства НС08 имеет жесткое распределение приори­тетов, которое не может быть скорректировано программными настройками. Источники прерываний, уровни их приоритетов, абсолютные адреса векторов прерываний для МК MC68HC908GP32 приведены в табл. 4.31.

Таблица 4.31


 

 

 

ПОРТЫ ВВОДА/ВЫВОДА

МК MC68HC908GP32 обладает 33 линиями ввода/вывода данных. Эти линии объеди­нены в 8-разрядные параллельные порты, которые именуют в соответствии с буквами латинского алфавита: Port A, Port В, Port С, Port D, Port H.

Все линии ввода/вывода MKMC68HC908GP32- двунаправленные, т. е. могут исполь­зоваться разработчиком как для ввода данных в МК, так и для вывода логических сигна­лов. Направление передачи линий ввода/вывода настраивается программно путем за­писи управляющих слов в регистры специальных функций. Возможно изменение направ­ления передачи в ходе выполнения программы посредством перепрограммирования этих регистров. Сигнал сброса устанавливает все линии в режим ввода. Направление пере­дачи каждой линии может быть выбрано разработчиком произвольно, независимо от других линий, принадлежащих к одному и тому же порту ввода/вывода.

Большинство линий ввода/вывода обладают так называемой альтернативной функ­цией. Эти линии связаны со встроенными в МК периферийными устройствами, они обес­печивают связь периферийных модулей с «внешним миром». Так, линии порта Port В используются для подключения к встроенному АЦП измеряемых напряжений, линии дру­гих портов служат линиями ввода/вывода последовательных приемопередатчиков. Если соответствующий периферийный модуль МК не используется, то его выводы можно за­действовать как обычные линии ввода/вывода. Распределение линий ввода/вывода по портам, спецификация линий альтернативных функций для МК MC68HC908GP32 приве­дены в табл. 4.32.

По способу схемного решения выходного драйвера различают два типа линий ввода/
вывода:

1)линии с обычной схемотехникой двунаправленной линии ввода/вывода;

2)двунаправленные линии с программно-подключаемыми в режиме ввода подтяги­вающими резисторами RPULLUP (см. рис. 4.5).

Если порт имеет «обычную» схемотехнику, то для его обслуживания предусмотрены два типа регистров:

1)РТх - регистр данных порта х, где х - имя порта ввода/вывода;

2)DDRx - регистр направления передачи порта х.

Если порт имеет схемотехнику с программно-подключаемым «подтягивающим» рези­стором, то для обслуживания порта предусмотрены три регистра:

1)РТх - регистр данных порта х;

2)DDRx - регистр направления передачи порта х;

3)PTxPUE - регистр входного сопротивления порта х.

Так, порт Port А микроконтроллера MC68HC908GP32 обслуживается регистрами РТА,DDRA и PTAPUE. В табл. 4.33, 4.34, и 4.35 приведен формат регистров специальных функций РТх, DDRx и PTxPUE. Заметим, что формат регистров РТх и DDRx для портов с различной схемотехникой полностью совпадает.

 

 


 



Детальный формат всехрегистров специальных функций портов ввода/вывода при­веден ниже (рис. 4.47).

 

 

 

 

 


 

 

 

 

4.3.7. ПРОЦЕССОР СОБЫТИЙ TIM08

Модуль TIM08, хотя и носит дословное название «модуль таймерного интерфейса», по сути, является одним из лучших процессоров событий в 8-разрядных МК.

Модуль TIM08 состоит из 16-разрядного таймера-счетчика и некоторого количества связанных с ним полностью идентичных каналов захвата/сравнения. Каждый из каналов в процессе инициализации может быть настроен на один из пяти режимов работы:

1)входного захвата;

2)не буферированного выходного сравнения;

3)буферированного выходного сравнения;

4)небуферированной широтно-импульсной модуляции (ШИМ);

5) буферированной ШИМ.

 

 

Каждый канал захвата/сравнения связан с одним из выводов МК. Функция входного или

выходного сигнала модуля процессора событий является альтернативной функцией линий порта Port D. МК MC68HC908GP32 имеет в своем составе два модуля процессора событий - TIM1 и TIM2. Каждый из модулей имеет по два канала захвата/сравнения.

Структурная схема модуля двухканального процессора событий представлена на рис. 4.48. Шестнадцатиразрядный таймер-счетчик служит временной базой для модулей захвата/сравнения. Он подсчитывает импульсы тактовой частоты, поступающие на его вход. Все интервалы времени, которые генерируются или измеряются МК, измеряются числом периодов этой тактовой частоты.

В общем случае (модули TIM08 других МК семейства НС08) таймер-счетчик имеет два источника тактирования:

1)внутренний генератор, выполненный на основе программируемого делителя час­тоты ШИНЫ МК fBUS;

2)внешний генератор, подключаемый к выводу TxCLK МК.

Выбор между внутренним и внешним генераторами, а также выбор коэффициента деления программируемого делителя частоты шины КTIMх определяется комбинацией битов PS2 – PSO0 регистра управления таймера-счетчика TxSC. Коэффициент деления КTIMх может принимать семь различных значений: 1, 2, 4, 8, 16, 32, 64. Максимальная частота сигнала внешнего генератора, подключаемого ко входу TxCLK, составляет 4 МГц при условии, что МК работает на предельной частоте внутренней шины fBUS= 8 МГц. Про­цессоры событий TIM1 и Т1М2 в составе МК MC68HC908GP32 не имеют выводов T1CLK и T2CLK в перечне выводов корпуса и, следовательно, могут использовать для тактиро­вания только встроенный генератор.

Таймер-счетчик временной базы допускает программную установку периода работы. Если не предпринимать специальных действий при инициализации процессора собы­тий, то коэффициент счета счетчика временной базы будет равен 216, т. е. счетчик прохо­дит полный цикл от начального состояния кода $0000 до конечного состояния кода $FFFF. Если таймер-счетчик находится в состоянии $FFFF, то при поступлении на его вход оче­редного тактового импульса наступает переполнение таймера-счетчика. Счетчик пере­ходит в состояние $0000, одновременно устанавливается флаг переполнения TOF. Переполнение счетчика не оказывает влияния на его работу: при поступлении следую­щих тактовых импульсов код в счетчике продолжает нарастать. Коэффициент счета тай­мера-счетчика может быть изменен посредством записи кода желаемого Ксч в двухбай­товый регистр периода TxMOD (TxMODH и TxMODL - старший и младший байты этого регистра, х - номер таймерного модуля, для TIM1 х = 1, для TIM2 х = 2). Вход сброса счетчика подключен к выходу цифрового компаратора (см. рис. 4.48), на один из входов которого поступает код текущего состояния таймера-счетчика, а на другой - код Ксч, за писанный в регистре TxMOD. Если эти коды равны, то при поступлении следующего так­тового импульса счетчик сбрасывается в «0», и флаг переполнения ТОР устанавливает­ся в «1». Диапазон допустимых значений Ксч составляет от 1 до (216-1). Таким образом, дискретность регулирования периода таймера-счетчика, который в режиме ШИМ обра­зует период ШИМ-сигнала, составляет 16 бит.

Предусмотрена возможность пуска и останова таймера-счетчика под управлением
программы (бит TSTOP в регистре управления таймером-счетчиком TxSC). Кроме того,
счетчик и программируемый делитель частоты могут быть одновременно сброшены по­
средством установки в «1» бита TRST в регистре TxSC. При этом все триггеры таймера-
счетчика установятся в «0», а программируемый делитель частоты будет настроен на
режим единичного коэффициента деления частоты внутренней шины МК. Заметьте, что
бит TRST не останавливает работу таймера-счетчика, с приходом очередного тактового
импульса состояние счетчика станет равным $0001. Сброс таймера-счетчика рекомен­дуется проводить в следующем порядке:

• остановите таймер-счетчик (бит TSOP = 1);

• выполните операцию сброса таймера-счетчика (бит TRST = 1);

• переинициализируйте биты PS2-PSO регистра TxSC, которые определяют источник и частоту тактирования;

• разрешите счет таймера-счетчика.

Таймера-счетчика в процессе счета может быть считан прикладной программой при обращении к регистрам текущего кода TxCNTH и TxCNTL. При обращении к регистру старшего байта код таймера-счетчика автоматически копируется в указанную регистро­вую пару. Поэтому, несмотря на то, что операции чтения старшего и младшего байтов разнесены во времени, вы прочитаете состояние таймера-счетчика в момент обращения к регистру старшего байта ТхСМТН. Такое решение предотвращает получение ложной информации в случае, если частота тактирования таймера-счетчика высока, и по этой причине в моменты обращения к регистрам TxCNTH и TxCNTL состояния счетчика раз­личаются. Однако нельзя допускать ситуацию, при которой после прочтения старшего байта младший прочитан на будет. Повторное чтение старшего байта не сопровождается защелкиванием текущего кода таймера-счетчика в регистрах TxCNTH и TxCNTL.

При переполнении таймера-счетчика устанавливается флаг переполнения ТОР в ре­гистре управления TxSC (табл. 4.36) и генерируется запрос на прерывание, если бит разрешения прерывания TOIE установлен в «1», т. е. прерывания по переполнению тай­мера-счетчика разрешены.

Таблица 4.36

Для управления таймером-счетчиком модуля Т1М08 предусмотрены пять регистров специальных функций:

TxSC - регистр управления таймером-счетчиком «х», где «х» - имя модуля

процессора событий МК (для TIM1 х=1, для TIM2 х=2);

TxMODH - регистр периода таймера-счетчика (старший байт);

TxMODL- регистр периода таймера-счетчика (младший байт);

TxCNTH - регистр текущего значения таймера-счетчика (старший байт);

TxCNTL - регистр текущего значения таймера-счетчика (младший байт).

 

 

Каждый канал захвата/сравнения в составе процессора событий связан с одним выво­дом МК (см. рис. 4.48). Вывод обозначают TxCHi, где i - порядковый номер канала захвата/ сравнения в составе процессора событий х. Например, Т1СНО - вывод канала 0 процес­сора событий TIM1. В режиме захвата аппаратные средства канала захвата/сравнения фиксируют моменты времени, когда логический сигнал на входе TxCHi изменяет свое со­стояние. В режимах выходного сравнения и широтно-импульсной модуляции (ШИМ) канал захвата/сравнения формирует импульсный сигнал с заданными временными параметра­ми на выходе TxCHi. Направление передачи сигнала по линии TxCHi (вход или выход) определяется инициализацией каналов захвата/сравнения на тот или иной режим. Несмотря на то, что работа линииTxCHi в составе процессора событий является альтернативной функцией линии одного из портов ввода/вывода МК, состояние регистра направления пе­редачи порта DDRx в этом случае значения не имеет.

Программно-логическая модель каждого канала захвата/сравнения включает три ре­гистра: 16-разрядный регистр данных канала i (TxCHiH и TxCHiL - старший и младший байты этого регистра) и регистр управления каналом i - TxSCi. Функция регистра данных определяется режимом работы канала захвата/сравнения, регистр управления TxSCi служит для выбора этого режима и для обслуживания прерываний по запросам модуля захвата/сравнения.

В режиме входного захвата аппаратные средства модуля следят за уровнем сигнала на входе TxCHi микроконтроллера (рис. 4.49).

При изменении уровня логического сигнала с «0» на «1» или наоборот вырабатыва­ется строб записи, и текущее состояние таймера-счетчика временной базы копируется в 16-разрядный регистр данных TxCHi канала захвата/сравнения. Событие захвата от­мечается установкой в «1» флага CHiF в регистре управления каналом с номером i. Этот флаг может быть считан программно, а если прерывания по событию канала i разреше­ны (флаг CHilE в регистре управления установлен), то модуль процессора событий выс­тавляет запрос на прерывание. Предусмотрены три типа изменения сигнала на входе TxCHi MK, которые воспринимаются модулем захвата/сравнения, как событие захвата:

1)передний (нарастающий) фронт сигнала;

2)задний (падающий) фронт сигнала;

3)любое изменение логического уровня сигнала.

Выбор типа события захвата для модуля определяется битами ELSiB:ELSiA регистра

управления каналом TxSCi.

В режиме выходного сравнения аппаратные средства модуля непрерывно сравнива­ют изменяющийся во времени код таймера-счетчика с кодом, который записан в 16-раз­рядный регистр данных TxCHi модуля захвата/сравнения (рис. 4.50).

В момент равенства кодов аппаратные средства модуля устанавливают на выходе микроконтроллера TxCHi заданный уровень логического сигнала либо изменяют этот уровень на противоположный. При наступлении события выходного сравнения в регист­ре управления канала TxSCi устанавливается в «1» флаг CHiF, тот же, что и при наступ­лении события захвата. Аналогично предыдущему случаю этот флаг вызывает форми­рование запроса на прерывание, если прерывания от модуля i разрешены. Предусмот­рены три типа изменения сигнала на выходе TxCHi MK в момент события выходного сравнения:

1)инвертирование сигнала на выходе;

2)установка низкого логического уровня

3)установка высокого уровня.

Выбор типа изменения выходного сигнала для модуля определяется битами ELSiB:ELSiA регистра управления каналом TxSCi.

При работе в режиме выходного сравнения могут возникать нарушения алгоритма работы канала захвата/сравнения, приводящие к неправильному формированию сигна­ла на выходе TxCHi модуля. Причиной таких сбоев является изменение величины кода сравнения в процессе работы канала, а также конечное время выполнения программы перезагрузки кода сравнения в регистр данных канала TxCHi. Например, событие выход­ного сравнения еще не произошло, когда код в регистре данных TxCHi был изменен на меньшее значение (рис. 4.51). Причем это значение таково, что текущий код таймера-счетчика превышает его. В результате в текущем периоде работы таймера-счетчика со­бытия выходного сравнения уже не произойдет, так как равенство кодов наступит толь­ко в следующем периоде работы таймера-счетчика. Подобная ситуация исключается при использовании режима буферированного выходного сравнения.

В режиме буферированного выходного сравнения каналы захвата/сравнения объе­диняются в пары: канал 0 с каналом 1 (канал 2 с каналом 3, канал 4 с каналом 5 - в дру­гих МК семейства НС08). Канал с нечетным номером работает в режиме выходного срав­нения. Канал с четным номером переводится в нерабочее состояние, и его нельзя ис­пользовать ни в каком из режимов работы. Вывод TxCHi MK, принадлежащий каналу с четным номером, автоматически конфигурируется в режим обычной линии ввода/выво­да. Далее для определенности рассмотрим логику работы на примере пары 0 и 1. Сразу после инициализации в качестве источника кода сравнения модуль 0 использует регист­ры данных ТхСНО, принадлежащие модулю 0. После того, как событие сравнения про­изошло, в качестве источника кода сравнения могут использоваться как регистры дан­ных канала 0, так и регистры данных канала 1. Выбор регистра данных осуществляется модулем автоматически: используется та пара регистров данных, в которую запись была произведена последней. По этой причине не следует новое значение кода сравнения записывать в текущий активный регистр данных канала. Эта операция в соответствии с принципом действия режима буферированного сравнения фактически переведет канал в режим не буферированного выходного сравнения. Никаких сбоев формирования сигна­ла на выходе TxCHi в режиме буферированного выходного сравнения не возникнет, если:

• производить запись нового кода сравнения в регистр неактивного канала;

• выполнять эту операцию в подпрограмме прерывания по событию выходного сравне­ния обслуживаемого канала.

 

Назначение режима буферированного выходного сравнения производится установ­кой бита MSiB в регистре управления каналом с номером 1=0. Регистр управления кана­ла 1 в этом случае не оказывает влияния на работу канала 0 в режиме буферированного выходного сравнения. Однако для однозначного определения состояния неиспользуе­мой в режиме буферированного выходного сравнения линии ТхСШ канала 1 биты ELSiB:ELSiA регистра управления канала 1 должны быть установлены в «00».

Особенности инициализации каналов захвата/сравнения поясняет табл. 4.37.

Режим не буферированного выходного сравнения может быть использован для полу­чения на выходе модуля TxCHi широтно-модулированного импульсного сигнала. С этой целью следует запрограммировать логику изменения сигнала на выходе TxCHi следую­щим образом (рис. 4.52):

• при наступлении события выходного сравнения на выходе TxCHi устанавливается низ­кий логический уровень;

• при переполнении таймера-счетчика уровень сигнала на выводе инвертируется.

Вы получите ШИМ сигнал, у которого длительность импульса будет изменяться по закону:

Тимп =K/fтакт,

 

где К - код регистра данных канала, f такт - частота тактирования таймера-счетчика.

Период широтно-модулированных импульсов определяется периодом таймера-счетчика:

Т = К сч/ fтакт,

При тактированиии таймера-счетчика от внутреннего генератора период таймера-счет­чика составляет:

Т = К сч КТ IМх/f BUS,

где КТIМх - коэффициент деления программируемого делителя частоты, К сч - коэффици­ент счета таймера-счетчика.

 

 

 

Из приведенного соотношения следует, что дискретизация коэффициента заполне­ния γ определяется выбранным коэффициентом счета К сч таймера-счетчика. Следова­тельно, модуль процессора событий TIM08 может реализовать ШИМ с дискретизацией коэффициента заполнения вплоть до 16 бит. При необходимости полярность импульсов ШИМ-сигнала может быть изменена. Для этого необходимо при инициализации выбрать следующие опции:

•при наступлении события выходного сравнения на выходе устанавливается высокий логический уровень;

•при переполнении таймера-счетчика уровень сигнала на выходе инвертируется.

Рассмотренный режим небуферированной ШИМ подвержен сбоям в работе так же, как и режим небуферированного выходного сравнения (рис. 4.52). Так, если вы станете менять код заполнения в течение периода, то при смене большего кода на меньший возможен пропуск момента сравнения и, как следствие, получение единичного коэффи­циента заполнения. Поэтому режим небуферированной ШИМ следует использовать в тех случаях, когда код коэффициента заполнения требуется изменять крайне редко. В остальных случаях следует использовать режим буферированной ШИМ.

Для получения буферированной ШИМ используют режим буферированного выходно­го сравнения, при котором каналы объединяются по парам, и для генерации ШИМ сигна­ла на одном выводе используются регистры сразу двух каналов захвата/сравнения. Вслед­ствие этого число линий с ШИМ-сигналами для любого процессора событий TIM08 со­кращается вдвое. Особенности инициализации модулей захвата/сравнения в режиме буферированной ШИМ определяются правилами инициализации канала на режим бу­ферированного выходного сравнения.

Формат регистра управления канала захвата/сравнения приведен в табл. 4.38.

Регистры данных канала TxCHiH и TxCHiL являются 8-разрядными регистрами, кото­рые доступны для чтения и для записи. Полный перечень регистров двух процессоров событий МК MC68HC908GP32 приведен в табл. 4.39.

 


Таблица 4.38.

 


 
.

 

 


 


 

4.3.8. МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО СИНХРОННОГО ИНТЕРФЕЙСА SPI08

Модуль последовательного периферийного интерфейса SPI08 предназначен для вы­сокоскоростного обмена между МК и периферийными микросхемами, такими как АЦП и ЦАП, FLASH-память большой информационной емкости, часы реального времени. Мо­дуль SPI08 обладает следующими характеристиками:

поддерживает два режима работы: ведущего (master) и ведомого (slave) приемопередатчиков; позволяет программно настраивать частоту обмена, причем в формировании сетки ча­стот модули таймеров TIM08 и PIT08 не задействованы:

где Кт= 2, 8, 32, 128; максимальная частота обмена в режиме ведущего составляет 4,0 МГц, в режиме ведомого - 8,0 МГц;

•генерирует запросы на прерывание с раздельными векторами по завершению приема
очередного байта или по окончании передачи байта;

•генерирует два флага нарушения режима работы: при переполнении приемника и
при принудительной смене режима работы (ведущий/ведомый) в процессе незавершенного обмена;

•позволяет программно конфигурировать линии приема и передачи данных (MISO и
MOSI) как линии с открытым коллекторным выходом; объединение MISO и MOSI по
схеме «монтажное ИЛИ» делает модуль совместимым с протоколом интерфейса I 2C.

Контроллер SPI08 обслуживает стандартную шину SPI,для чего имеет четыре линии:

MOSI-линия передачи данныхот ведущего к ведомому (Master Output Slave Input);

MISO -линия передачи данных от ведомого к ведущему (Master Input Slave Output);

SPSCK - линия сигнала синхронизации даных

SS-линия выбора ведомого.

Направление передачи каждой линии определяется выбором режима работы кон­троллера SPI08. Если назначен режим ведущего (бит MSTR регистра управления SPCR равен 1), то линии MOSI и SCK работают в режиме вывода, а линия МISО_в режиме ввода. Если назначен режим ведомого (MSTR = 0), то линии MOSI, SCK и работают в режиме ввода, a MISO - в режиме вывода. В режиме ведущего линия может быть использована, как обычная линия ввода/вывода.

Обслуживание модуля SPI08 является альтернативной функцией для линий PTD (см. рис. 4. 44). Если бит разрешения работы контроллера модуля установлен SPE = 1, то независимо от значения соответствующих битов регистра направления передачи пор­та ввода/вывода его линии назначаются для работы в составе контроллера SPI08.

Функциональная схема контроллера SPI08 приведена на рис. 4.53. Основные эле­менты контроллера - 8-разрядный сдвиговый регистр (Shift Register) и два буферных регистра данных, программно доступных по одному и тому же адресу. При выполнении операции записи в регистр данных SPDR данные будут запомнены в буферном регистре передатчика. Буфер данных передатчика недоступен для чтения. Операция чтения реги­стра SPDR возвращает данные из буферного регистра приемника. Буфер данных прием­ника недоступен для записи.

Если контроллер настроен для работы в режиме ведущего, то обмен данными в лю­бом из направлений (прием или передача) инициируется операцией записи байта в ре­гистр данных. Этот байт сначала автоматически копируется в сдвиговый регистр, а затем

сдвигается в течение 8 тактов генератора синхронизации обмена на линию MOSI. Одно­временно на линию SCK выдаются импульсы синхронизации. Каждый из импульсов син­хронизации SCK, поступающих от ведущего на одноименный вход ведомого, вызывает операцию сдвига данных на один разряд в сдвиговом регистре принимающего устрой­ства. В результате очередной бит, переданный ведущим по линии MOSI, запоминается в регистре-приемнике, но одновременно на линию MISO выдвигается очередной стар­ший бит этого регистра. Бит с линии MISO фиксируется в сдвиговом регистре ведущего. При завершении передачи 8 бит данных от ведущего к ведомому в сдвиговом регистре ведущего окажется принятый байт данных от ведомого. Если пользователь желает реа­лизовать передачу байта данных от ведущего к ведомому, то для осуществления обмена в программе ведущего в регистр данных контроллера SPI08 записывается передавае­мый байт, а при завершении передачи бесполезные данные из регистра данных порта SPI08 просто не считываются. Если же пользователь желает реализовать прием байта данных, то для осуществления обмена в программе ведущего в регистр данных контрол­лера SPI08 записывается любой «ненужный» байт, а при завершении передачи приня­тый полезный байт данных считывается из регистра данных порта SPI08. Завершение передачи каждого байта данных отмечается установкой в «1» бита SPIF регистра состо­яния SPSR. Этот бит генерирует запрос на прерывание, если прерывания от модуля SPI разрешены (бит SPIE = 1). При обмене с высокими скоростями в режиме ведущего бит завершения передачи байта SPIF следует контролировать программно. Для этого после записи очередного байта в регистр данных следует прочитать регистр состояния SPSR, дождаться, пока бит SPIF не установится, а затем произвести считывание принятых дан­ных или запись следующего передаваемого байта в регистр данных (в зависимости от направления передачи). Бит SPIF сбрасывается в «О» автоматически при выполнении последовательности из двух операций:

• чтение регистра состояния SPSR при установленном бите SPIF;

• чтение или запись в регистр данных SCDR.

Если контроллер SPI08 работает в режиме ведомого, то момент начала передачи определяет ведущий. Поэтому следует организовать прерывания по запросу от триггера SPIF, в подпрограмме обработки которого принятый байт будет прочитан из регистра данных и проанализирован, а при необходимости предоставления ведущему каких-либо данных очередной байт будет записан в регистр данных для последующей передачи при поступлении импульсов синхронизации SCK от ведущего.

Контроллер SPI08 поддерживает 4 возможных режима SPI. Для задания детализиро­ванной временной диаграммы обмена следует использовать биты СРНА и CPOL регист­ра управления SPCR. Скорость обмена в режиме ведущего определяется программно настраиваемым коэффициентом делителя fBUS (биты SPR1:SPRO регистра управления). Максимальная скорость обмена составляет fBUS/2, минимальная - fвus/128. В режиме ве­домого биты SPR1:SPRO не оказывают влияния на работу контроллера. Скорость обме­на определяется ведущим, она может достигать fBUS.

Программно-логическая модель модуля SPI08 включает три регистра специальных функций:

1)SPCR - регистр управления модуля SPI08;

2)SPSCR - регистр состояния модуля SPI08;

3)SPDR - регистр данных модуля SPI08.

Форматы регистров SPCR и SPSCR приведены в табл. 4.40 и 4.41. Регистр данных SPDR доступен по адресу 0012h.

 


Таблица 4.40

 

 


 


 


 

 





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 803 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2370 - | 2121 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.