Из приведенного соотношения следует, что дискретизация коэффициента заполнения у определяется выбранным коэффициентом счета /ССч таймера-счетчика. Следовательно, модуль процессора событий TIM08 может реализовать ШИМ с дискретизацией коэффициента заполнения вплоть до 16 бит. При необходимости полярность импульсов ШИМ-сигнала может быть изменена. Для этого необходимо при инициализации выбрать следующие опции: при наступлении события выходного сравнения на выходе устанавливается высокий логический уровень;
при переполнении таймера-счетчика уровень сигнала на выходе инвертируется.
Рассмотренный режим небуферированной ШИМ подвержен сбоям в работе так же, как и режим небуферированного выходного сравнения (рис. 4.52). Так, если вы станете менять код заполнения в течение периода, то при смене большего кода на меньший возможен пропуск момента сравнения и, как следствие, получение единичного коэффициента заполнения. Поэтому режим небуферированной ШИМ следует использовать в тех случаях, когда код коэффициента заполнения требуется изменять крайне редко. В остальных случаях следует использовать режим буферированной ШИМ.
Для получения буферированной ШИМ используют режим буферированного выходного сравнения, при котором каналы объединяются по парам, и для генерации ШИМ сигнала на одном выводе используются регистры сразу двух каналов захвата/сравнения. Вследствие этого число линий с ШИМ-сигналами для любого процессора событий TIM08 сокращается вдвое.
Особенности инициализации модулей захвата/сравнения в режиме буферированной ШИМ определяются правилами инициализации канала на режим буферированного выходного сравнения.
Формат регистра управления канала захвата/сравнения приведен в табл. 4.38.
Регистры данных канала TxCHiH и TxCHiL являются 8-разрядными регистрами, которые доступны для чтения и для записи. Полный перечень регистров двух процессоров событий МК MC68HC908GP32 приведен в табл. 4.39. 4.3.8. МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО СИНХРОННОГО ИНТЕРФЕЙСА SPI08
Модуль последовательного периферийного интерфейса SPI08 предназначен для высокоскоростного обмена между МК и периферийными микросхемами, такими как АЦП и ЦАП, FLASH-память большой информационной емкости, часы реального времени. Модуль SPI08 обладает следующими характеристиками:
поддерживает два режима работы: ведущего (master) и ведомого (slave) приемопередатчиков; позволяет программно настраивать частоту обмена, причем в формировании сетки частот модули таймеров TIM08 и PIT08 не задействованы:
где Кт= 2, 8, 32, 128; максимальная частота обмена в режиме ведущего составляет 4,0 МГц, в режиме ведомого - 8,0 МГц;
генерирует запросы на прерывание с раздельными векторами по завершению приема очередного байта или по окончании передачи байта;
генерирует два флага нарушения режима работы: при переполнении приемника и при принудительной смене режима работы (ведущий/ведомый) в процессе незавершенного обмена;
позволяет программно конфигурировать линии приема и передачи данных (MISO и MOSI) как линии с открытым коллекторным выходом; объединение MISO и MOSI по схеме «монтажное ИЛИ» делает модуль совместимым с протоколом интерфейса PC.
Контроллер SPI08 обслуживает стандартную шину SPI, для чего имеет четыре линии:
MOSI - линия передачи данных от ведущего к ведомому (Master Output Slave Input);
MISO -линия передачи данных от ведомого к ведущему (Master Input Slave Output);
SPSCK - линия сигнала синхронизации данных;
SS-линия выбора ведомого.
Направление передачи каждой линии определяется выбором режима работы контроллера SPI08. Если назначен режим ведущего (бит MSTR регистра управления SPCR равен 1), то линии MOSI и SCK работают в режиме вывода, а линия М!3_О_в режиме ввода. Если назначен режим ведомого (MSTR = 0), то линии MOSI, SCK и SS работают в режиме ввода, a MISO - в режиме вывода. В режиме ведущего линия §s может быть использована, как обычная линия ввода/вывода.
Обслуживание модуля 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, минимальная - feus/128. В режиме ведомого биты SPR1:SPRO не оказывают влияния на работу контроллера. Скорость обмена определяется ведущим, она может достигать fBus.
Программно-логическая модель модуля SPI08 включает три регистра специальных функций:
SPCR - регистр управления модуля SPI08;
SPSCR - регистр состояния модуля SPI08;
SPDR - регистр данных модуля SPI08.
Форматы регистров SPCR и SPSCR приведены в табл. 4.40 и 4.41. Регистр данных SPDR доступен по адресу 0012h.
4.3.9. Модуль последовательного асинхронного интерфейса sci08
Контроллер последовательного асинхронного интерфейса SCI предназначен для обмена с устройствами управления верхнего уровня. Модуль SCI08 обладает следующими характеристиками:
поддерживает полнодуплексный режим обмена данными:
реализует стандартный протокол асинхронного обмена с длиной кадра в 10 или 11 бит;
подсистема передатчика реализует режим вставки бита паритета, подсистема приемни ка автоматически контролирует соблюдение логики паритета в принятом байте данных;
позволяет программно настраивать частоту обмена, причем в формировании сетки ча стот модуль таймера TIM08 не задействован; частота обмена программируется в соот ветствии с Формулой
где NP= 1, 3,4,13; NS = 2", n = CN-7; максимальная скорость обмена составляет 131 Кбит/с;
имеет независимые биты разрешения работы приемника и передатчика;
генерирует запросы на прерывание с раздельными векторами по окончании передачи байта, завершению приема очередного байта и при диагностировании ошибок приема байта;
генерирует 4 флага нарушения режима работы: при переполнении приемника, при возникновении шума на линии в процессе приема, при нарушении формата принимаемого кадра, при нарушении логики паритета; каждое из перечисленных событий формирует
запрос на прерывание; реализуется раздельное маскирование всех указанных событий нарушения режима работы;
имеет встроенные аппаратные средства для организации работы в локальной сети;
позволяет реализовать «замкнутый» режим работы, при котором передаваемые данные без внешних коммутаций поступают на вход приемника;
имеет опцию изменения полярности передаваемых данных.
Контроллер SCI08 обслуживается двумя выводами: TxD - линия передачи данных; RxD - линия приема данных. Обслуживание модуля SCI08 является альтернативной функцией линий порта РТЕ (см. рис. 4.44). Если бит разрешения работы модуля ENSCI в регистре SCC1 установлен, то независимо от значения соответствующих битов регистра, направления передачи порта ввода/вывода, его линии назначаются для работы в составе контроллера SCI08.
Принцип действия модуля SCI08 аналогичен рассмотренному принципу действия модуля типа UART. По сравнению с рассмотренным ранее последовательным портом МК MCS-51 модуль SCI08 отличает значительно более сложная функциональная схема, которая реализует логику паритета, а также диагностирует пять типов ошибок приема, позволяя существенно повысить надежность обмена данными. Соответственно увеличилось и число регистров специальных функций, которые обслуживают модуль. Однако протоколы обмена и базовые алгоритмы функционирования модуля остались неизменными. Аппаратные средства модуля SCI08 делят на две подсистемы: приемника и передатчика. Основу каждой подсистема составляют сдвиговый регистр и буферный регистр данных (см. рис. 4.19).
Различают два состояния подсистемы передатчика:
активное состояние или состояние передачи данных, которое характеризуется периодическим появлением на линии TxD сигнала низкого логического уровня; даже если все биты данных передаваемого кадра равны 1, то линия TxD будет находиться в «О» в течение интервала передачи стартового бита; в состоянии передачи данных в буферном регистре или в сдвиговом регистре обязательно присутствуют еще не переданные данные;
состояние ожидания (IDLE), которое характеризуется наличием сигнала высокого логического уровня на линии TxD в течение не менее 10 или 11 тактов работы передатчика (для 10- и 11-битового кадра соответственно); передатчик переходит в состояние ожидания, если в буферном регистре данных и в сдвиговом регистре новые данные для передачи отсутствуют.
Передача данных от МК к другому устройству инициируется посредством записи байта данных в буферный регистр передатчика по адресу регистра данных SCDR. Аппаратные средства передатчика загружают содержимое буферного регистра данных в сдвиговый регистр. Одновременно устанавливается флаг SCTE (флаг очистки регистра буфера данных в регистре SCS1), который информирует МК о том, что буферный регистр передатчика пуст, и в него могут быть загружены новые данные. Если следующий байт данных для передачи будет загружен в буферный регистр SCDR до завершения передачи предыдущего байта, то нарушения в работе передатчика не произойдет. Второй байт данных будет сохраняться в буферном регистре до тех пор, пока передача предыдущего байта не будет завершена. Следует иметь в виду, что копирование содержимого буферного регистра в сдвиговый регистр под управлением аппаратных средств не сопровождается автоматическим началом передачи этого байта данных. Процесс передачи нового байта из сдвигового регистра на линию TxD начнется только после того, как бит SCTE будет сброшен. Для достижения последнего необходимо выполнить две операции:
прочитать регистр состояния SCS1 при установленном бите SCTE;
записать в регистр буфера передатчика по адресу SCDR новый байт данных.
Тогда под управлением генератора скорости передачи GT биты предыдущего байта данных начнут последовательно передаваться из сдвигового регистра на вывод TxD.
После завершения передачи пакета обмена, когда в сдвиговом и буферном регистрах не осталось данных для передачи, устанавливается в «1» бит ТС. Флаги очистки буфера данных SCTE и окончания передачи ТС имеют независимое маскирование (биты SCT1E и TCIE регистра SCC2 соответственно). Если прерывания по этим запросам разрешены, то любой из триггеров генерирует запрос на прерывание. Рассматриваемые запросы объединяются по «ИЛИ» и обслуживаются по единому вектору прерывания от передатчика модуля SCI08 (см. табл. 4.31).
Формат кадра передаваемых данных определяется значением бита М в регистре управления SCC1. Если М = 0, то обмен осуществляется с использованием 10-битового кадра . Сдвиговый регистр передатчика автоматически настраивается на 10-разрядный формат, в младшем и старшем разрядах сдвигового регистра устанавливаются логические уровни стартового и стопового битов (см. рис. 4.20). Если М = 1, то используется 11-битовый кадр обмена (см. рис. 4.21). Сдвиговый регистр настраивается на 11-разрядный формат. Недостающий бит данных D8 заполняется значением Т8 из регистра управления SCC3, которое должно быть определено программой до записи в буферный регистр восьми младших бит передаваемого слова. Значение бита М определяет формат кадра обмена как для приемника, так и для передатчика. Поэтому обмен в дуплексном режиме возможен только с одинаковым форматом кадра.
Скорость передачи данных, так же как и скорость приема, определяется собственным генератором модуля SCI08. Этот генератор состоит из двух делителей частоты тактирования межмодульных магистралей fEUS: предварительного с коэффициентом деления NP и основного с коэффициентом деления NS. Скорость обмена данными следует определить в формуле:
где NP - коэффициент деления предварительного делителя, NP = 1, 3, 4,13; NS - коэффициент деления основного делителя, NS= 1, 2, 4, 8, 16, 32, 64, 128.
Значения коэффициентов NP и NS определяются установкой соответствующих разрядов в регистре скорости передачи SCBR.
Передатчик модуля SCI08 реализует режим генерации сигнала «конец сеанса обмена» (сигнал «Break»), который состоит из 10 или 11 нулей, и в мультимикропроцессорных системах обозначает конец сеанса обмена между двумя устройствами. Для генерации сигнала «конец сеанса обмена» необходимо установить бит SBK в регистре управления SCC2.
Основные элементы приемника - сдвиговый регистр, 8-разрядный буферный регистр данных, схема мажоритарной логики для формирования значения очередного принимаемого бита, схема детектирования условия вывода приемника из режима ожидания, логический блок управления. Различают два состояния подсистемы приемника:
активное состояние, которое характеризуется периодическим формированием байта данных из последовательности битов на входе RxD, копированием принятого байта в буферный регистр данных приемника с одновременной установкой в «1» бита завершения приема данных SCRF;
состояние ожидания, в котором также реализуется преобразование последовательного кода на входе RxD в параллельный код в сдвиговом регистре, но копирование принятого байта в буферный регистр данных приемника и установка бита завершения приема SCRF выполняется только тогда, когда значение принятого слова удовлетворяет одному из условий выхода из режима ожидания.
Формат кадра принимаемых данных определяется значением бита М в регистре управления SCC1. При М = 0 обмен осуществляется 10-битовыми кадрами, при М = 1 используется 11-битовый кадр обмена. В последнем случае сдвиговый регистр настраивается на 11-разрядный формат. Бит данных D8, который не помещается в разрядную сетку буферного регистра данных приемника, записывается в разряд R8 регистра управления SCC3.
Блок логики управления подсистемы приемника детектирует наличие на входе RxD последовательности из не менее чем одного стопового бита, а затем стартового бита, и начинает формирование слова данных посредством выполнения под управлением генератора скорости передачи GR сдвиговых операций. Значение старшего бита на каждом такте работы сдвигового регистра определяет схема мажоритарной логики. Эта схема производит три выборки уровня сигнала на входе RxD в течение одного такта работы, значение старшего бита определяется по правилу «два из трех». Момент окончания формирования слова в сдвиговом регистре отмечается установкой в «1» триггера завершения приема SCRF в регистре SCS1. Одновременно принятые данные записываются в буферный регистр данных приемника, который доступен для чтения по адресу SCDR. Бит SCRF по существу является флагом готовности данных приемника, он информирует МК о том, что произошел прием очередного слова данных, и его следует переместить в память МК. Бит SCRF может быть считан программно, а если прерывания от приемника разрешены (бит SCRIE регистра управления SCC2 равен «1»), то генерируется запрос на прерывание от приемника модуля SCI08. Сброс бита готовности данных приемника осуществляется в процессе выполнения двух операций:
чтения регистра состояния SCS1 при установленном бите SCRF;
чтения регистр данных приемника SCDR.
Нетрудно заметить, что именно эта последовательность операций должна быть выполнена при считывании очередного принятого по линии RxD байта в память МК.
Если бит SCRF находится в «1», т. е. байт данных принят и находится в буферном регистре приемника, то подобная ситуация не препятствует процессу приема в сдвиговый регистр приемника следующего байта данных. Необходимо только, чтобы до завершения приема последующего байта данных предыдущий байт был считан из буферного регистра приемника. Если этого не произошло, то аппаратные средства блокируют запись нового байта в буферный регистр приемника, поэтому новый принятый байт будет потерян. Одновременно устанавливается бит нарушения работы OR в регистре SCS1 (Overrun - попытка перезаписи). Установленный в «1» бит OR может вызывать генерацию запроса на прерывание, если прерывания именно по этому событию разрешены (бит ORIE в регистре SCC3 равен «1»).
Аппаратные средства приемника сообщают пользователю о наличии шума на линии RxD при приеме каждого байта данных: бит NF регистра SCS1 устанавливается в «1», если при определении значения хотя бы одного из битов кадра обмена, включая стартовый и стоповый биты, не все три выборки сигнала были равны. Установленный в «1» бит NF может вызывать генерацию запроса на прерывание, если прерывания именно по этому событию разрешены (бит NEIE в регистре SCC3 равен «1»). Если следующий принятый байт не содержит признака шума на линии, то бит NF не сбрасывается автоматически. Условия сброса бита NF указаны в табл. 4.46.
Аппаратные средства приемника также распознают нарушение формата кадра обмена: бит FE регистра SCS1 устанавливается в «1», если на линии RxD присутствует сигнал низкого логического уровня в то время, когда должен присутствовать столовый бит с высоким логическим уровнем. Подобная ситуация может возникнуть, если скорости обмена приемника и передатчика не совпадают, или если принимается специальный сигнал «конец сеанса обмена». Бит FE может вызывать генерацию запроса на прерывание, если прерывания именно по этому событию разрешены (бит FEIE в регистре SCC3 равен «1»).
В процессе приема каждого байта информации в формате 11-битового кадра аппаратные средства приемника автоматически производят контроль бита паритета. Управление функцией паритета осуществляется с использованием битов PEN и РТУ регистра SCC1. Если функция контроля паритета разрешена, то бит РЕ в регистре SCS1 устанавливается в «1», если в принятом байте данных вычисленный бит паритета не совпадает со значением принятого бита паритета. Установленный бит РЕ может генерировать запрос на прерывание, если прерывания по событию несовпадения паритетов разрешены (бит PEIE в регистре SCC3 равен «1»).
Запросы на прерывание, сформированные признаками ошибки приема (триггеры OR, NF, FE, РЕ) объединены по «ИЛИ» и обслуживаются по одному вектору прерывания (см. табл. 4.31).
Неактивное состояние линии RxD, которое характеризуется наличием на линии 10 или 11 (в зависимости от формата кадра) последовательных единиц, отмечается установкой бита IDLE регистра состояния SCS1. Неактивное состояние линии RxD свидетельствует о том, что передатчик другого устройства, которое выставляет данные на линию RxD, находится в состоянии ожидания IDLE. Бит IDLE может быть считан программно, но может также генерировать запрос на прерывание, если эти прерывания разрешены (бит ILIE в регистре управления SCC2 равен «1»). Вектор обслуживания запроса по флагу IDLE совпадает с вектором обслуживания приемника модуля SCI08.
Бит RWU в регистре управления SCC2 переводит приемник модуля SCI08 в режим ожидания. Этот режим позволяет организовать протокол обмена локальной управляющей сети МК. В режиме ожидания приемник продолжает преобразование последовательного кода на входе RxD в параллельный код в сдвиговом регистре. Однако формирование признаков SCRF, IDLE, OR, NF, FE, PE приемник не производит, и принятые данные в буферный регистр не копируются. Определено два способа перевода приемника из режима ожидания в активный режим работы:
• поступление последовательности битов с установленным в «1» маркером адреса; в качестве маркера адреса используют старший значащий бит; поэтому, для 10-битового кадра бит D7 должен быть равен «1», чтобы приемник вышел из состояния ожидания, для 11-битового кадра - бит D8.;
• нахождение линии RxD в неактивном состоянии IDLE.
Выбор способа «пробуждения» приемника определяется предварительной установкой бита WAKE в регистре управления SCC1. При диагностировании на входе RxD одной из двух указанных последовательностей приемник выходит из состояния ожидания, устанавливает бит готовности данных SCRF и копирует принятые данные в буферный регистр SCDR. Бит RWU автоматически сбрасывается, логика формирования бита IDLE не работает. Она начнет функционировать только при поступлении следующего байта в активном режиме работы приемника. На практике при организации локальных сетей чаще используется первый способ «пробуждения». Тогда младшие 7 или 8 бит данных первого принятого в процессе «пробуждения» слова содержат в себе адрес МК, с которым будет производиться обмен. Программа обслуживания прерывания по запросу от приемника сравнивает принятый адрес с собственным и, если адреса не совпадают, снова переводит приемник в режим ожидания. В случае равенства адресов приемник остается в активном режиме работы и участвует в сеансе обмена.
Программно-логическая модель модуля SCI08 включает семь регистров специальных функций: SCDR - регистр данных порта SCI08; SCC1 - регистр управления контроллером SCI08; SCC2 - регистр управления контроллером SCI08; SCC3 - регистр управления контроллером SCI08; SCS1 - регистр состояния контроллера SCI08; SCS2 - регистр состояния контроллера SCI08; SCBR - регистр скорости обмена контроллера SCI08.
Форматы этих регистров представлены в табл. 4.42 -4.48.