ИСТОЧНИКИ И МЕХАНИЗМ ОБРАБОТКИ ПРЕРЫВАНИЙ

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

• регистры центрального процессора автоматически сохраняются в стеке в следующем порядке: регистр признаков ССР, аккумулятор АСС, младший байт индексного регис­тра 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

 

 


 


 


 

 



9
  • 10
  • 11
  • 121314
  • 15
  • Далее ⇒