- •1. Структура и функционирование микроконтроллера mc68hc908gp32
- •1.1. Общая структура микроконтроллера mc68hc908gp32.
- •1.2. Организация и адресация памяти.
- •1.3. Генерация тактовых импульсов и запуск микроконтроллера.
- •1.4. Реализация прерываний.
- •1.5. Режимы функционирования.
- •2. Лабораторный стенд лс-1
- •2.1. Общее описание лабораторного стенда лс-1.
- •2.2. Основные функциональные узлы лабораторного стенда лс-1.
- •2.3. Включение лабораторного макета и подготовка его к работе.
- •3. Интегрированная среда программирования ics08gpgtz
- •3.1. Интегрированная среда WinIde.
- •3.2. Создание исходного текста и компиляция программы.
- •3.3. Моделирование выполнения программы.
- •3.4. Загрузка программы в память микроконтроллера.
- •3.5. Запуск и отладка программы на лабораторном макете.
- •Работа №1. Микроконтроллер mc68hc908gp32: регистровая структура, способы адресации, команды пересылки
- •Введение
- •Выполнение работы
- •Работа № 2. Микроконтроллер mc68hc908gp32: команды обработки данных
- •Введение
- •Выполнение работы
- •Работа № 3. Микроконтроллер mc68hc908gp32: команды управления программой и процессором.
- •Введение
- •Выполнение работы
- •Работа № 4. Микроконтроллер mc68hc908gp32: программирование на языке Ассемблера
- •Выполнение работы
- •Работа №5. Цифровая система на базе микроконтроллера mc68hc908gp32: реализация параллельного ввода-вывода данных.
- •Введение
- •Порядок выполнения работы
- •Работа №6. Цифровая система на базе микроконтроллера mc68hc908gp32: реализация последовательного обмена данными.
- •Введение
- •Порядок выполнения работы
- •Работа №7. Цифровая система на базе микроконтроллера mc68hc908gp32: ввод и обработка аналогового сигнала.
- •Введение
- •Порядок выполнения работы
- •Работа №8. Цифровая система на базе микроконтроллера mc68hc908gp32: реализация таймерных функций.
- •Введение
- •Порядок выполнения работы
- •Приложение 1. Описание жидкокристаллического индикатора
- •Приложение 2.
- •Приложение 3.
Порядок выполнения работы
1. Ознакомиться с функционированием параллельных портов ввода-вывода в микроконтроллере MC68HC908GP32.
2. Реализовать процедуру записи данных в параллельный порт A. Правильность работы процедуры проконтролировать с помощью симулятора.
3. Написать подпрограмму, реализующую опрос состояния клавиатуры с сохранением номера нажатой клавиши в регистре A микроконтроллера. Проверить правильность работы подпрограммы с помощью симулятора.
4. Ознакомиться с функционированием ЖКИ.
5. Написать подпрограммы, обеспечивающие инициализацию ЖКИ и вывод заданного в регистре A символа на экран ЖКИ.
Составить программу, реализующую вывод номера нажатой клавиши в первой позиции экрана ЖКИ. Проверить правильность выполнения программы сначала с помощью симулятора, а затем на лабораторном макете.
Работа №6. Цифровая система на базе микроконтроллера mc68hc908gp32: реализация последовательного обмена данными.
Цель работы: изучение функционирования последовательных портов SCI и SPI микроконтроллера MC68HC908GP32, получение практических навыков программирования микроконтроллера для реализации последовательного обмена.
Введение
Для последовательного обмена данными можно использовать встроенные в MC68HC908GP32 блоки последовательного обмена SCI08 и SPI08. В данной работе рассматривается пример использования стандартного последовательного порта SCI для обмена данными по интерфейсу RS-232, и пример использования порта SPI для опроса цифрового термометра, входящего в состав лабораторного стенда ЛС-1.
Асинхронный последовательный порт SCI. Структура модуля SCI08, входящего в состав микроконтроллера MC68HC908GP32 приведена на рис.6.1. Модуль содержит регистр данных SCDR (адрес $0018), два регистра состояния SCS1 (адрес $0016), SCS2 (адрес $0017) и три регистра управления SCC1 – SCC3 (адреса $0013 - $0015), определяющих режим функционирования SCI08. Генератор синхросигналов (ГСС) формирует синхросигналы обмена, частота которых Fs определяется содержимым регистра SCBR (адрес $0019). Принимаемые данные поступают на вход RxD, а передаваемые на выход TxD, совмещенные, соответственно, с выводами PTE1 и PTE0 порта E.
SCI08 обеспечивает последовательный прием/передачу 8 или 9 битов данных с одним старт-битом и одним стоп-битом, что соответствует 10- или 11-битному кадрам обмена. Разрядность передаваемого слова данных определяется значением бита M в регистре управления SCC1: 8 бит при M=0, 9 бит при M=1. Если M=1, то при передаче в качестве девятого (контрольного) бита передается бит T8 из регистра SCC3, а при приеме девятый бит заносится в регистр SCC3 в качестве бита R8. Перед началом передачи на линии устанавливается уровень логической 1 (сигнал ожидания) на время не менее, чем длительность одного такта синхросигналов Ts = 1/Fs. Если на линии поддерживается уровень логического 0 в течении 10 Ts в случае 10-битного кадра (M=0) или 11 Ts в случае 11-битного кадра (M=1), то это является сигналом прекращения обмена.
Рис.6.1. Структура модуля SCI08.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
LOOPS |
ENSCI |
TXINV |
M |
WAKE |
ILTY |
PEN |
PTY |
а). SCC1 (адрес $0013)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SCTIE |
TCIE |
SCRIE |
ILIE |
TE |
RE |
RWU |
SBK |
б). SCC2 (адрес $0014)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
R8 |
T8 |
DMARE |
DMATE |
ORIE |
NEIE |
FEIE |
PEIE |
в). SCC3 (адрес $0015)
Рис.6.2. Формат содержимого регистров управления модуля SCI08.
Регистр управления SCC1 (рис.6.2,а) содержит биты, имеющие следующее назначение:
LOOPS – установка значения LOOPS=1 переводит модуль SCI08 в режим кольцевого обмена, когда вход приемника отключается от вывода RxD/PTE1 и соединяется с выходом передатчика; при этом передаваемые данные поступают в приемник, если в регистре SCC2 значения битов RE=TE=1, т.е. одновременно разрешены прием и передача; данный режим используется для проверки работоспособности SCI08;
ENSCI – установка значения ENSCI=1 разрешает работу модуля SCI08;
TXINV – установка значения TXINV=1 задает передачу значений всех битов (включая старт-биты и стоп-биты) в инверсном виде;
M – определяет формат пересылаемого кадра: 10 бит при M=0, 11 бит при M=1;
WAKE – определяет способ выхода приемника из режима ожидания: прием символа IDLE (10 или 11 единичных битов) в случае WAKE=0 и единичное значение старшего принятого бита данных D7 (при M=0) или D8 (при M=1) в случае WAKE=1;
ILTY – указывает начало отсчета единичных битов, представляющих символ ожидания IDLE: начиная с очередного старт-бита при ILTY=0 или с очередного стоп-бита при ILTY=1;
PEN – разрешает при установке значения PEN=1 контроль четности при передаче и приеме данных;
PTY – определяет вид контроля: если PTY=0, то контрольный бит равен 1 при четном числе единичных информационных битов (контроль четности), если PTY=1, то контрольный бит равен 1 при нечетном числе единичных информационных битов (контроль нечетности).
Управляющий код, записываемый в регистр SCC2 (рис.6.2,б), разрешает или запрещает формирование запросов прерывания, производит запуск и отключение приемника и передатчика, устанавливает режим ожидания приемника и выдачу сигнала прекращения обмена передатчиком. Отдельные биты содержимого SCC2 имеют следующее назначение:
SCTIE – разрешает при значении SCTIE=1 формирование запроса прерывания в режиме передачи при установке признака освобождения регистра SCDR (SCTE=1 в регистре SCS1);
TCIE – разрешает при значении TCIE=1 формирование запроса прерывания при установке признака завершения передачи (TC=1 в регистре SCS1);
SCRIE – разрешает при значении SCRIE=1 формирование запроса прерывания в режиме приема при заполнении регистра SCDR (SCRF=1 в регистре SCS1);
ILIE – разрешает при значении ILIE=1 формирование запроса прерывания при поступлении на вход RxD символа ожидания IDLE (IDLE=1 в регистре SCS1);
TE – включает (при TE=1) и отключает (при TE=0) передатчик;
RE – включает (при RE=1) и отключает (при RE=0) приемник;
RWU – переводит при RWU=1 приемник в режим ожидания, дальнейшая активизация которого осуществляется в соответствии со значением бита WAKE в регистре SCC1;
SBK – вызывает при установке SBK=1 выдачу на выход TxD передатчика символа прекращения обмена BREAK (последовательности нулей).
Регистр управления SCC3 (рис.6.2,в) содержит контрольные биты и биты разрешения прерываний при возникновении ошибок приема:
R8 – принимает значение 9-го (контрольного) бита, поступающего на вход RxD приемника при 11-битном кадре пересылаемых данных (M = 1);
T8 – содержит значение 9-го (контрольного) бита, выдаваемого на выход TxD передатчика при 11-битном кадре пересылаемых данных (M = 1);
DMARE, DMATE – используются для совместной работы с модулем DMA, который не включен в состав MC68HC908GP32 и являются зарезервированными;
ORIE – разрешает при значении ORIE=1 формирование запроса прерывания при переполнении приемника (OR=1 в регистре SCS1);
NEIE – разрешает при значении NEIE=1 формирование запроса прерывания при обнаружении шумов в режиме приема (NE=1 в регистре SCS1);
FEIE – разрешает при значении FEIE=1 формирование запроса прерывания при ошибке кадра в режиме приема (FE=1 в регистре SCS1);
PEIE – разрешает при значении PEIE=1 формирование запроса прерывания при ошибке четности в режиме приема (PE=1 в регистре SCS1).
Содержимое регистров SCS1, SCS2, которое доступно только для чтения, указывает на текущее состояние модуля SCI08. Эти регистры содержат признаки, которые устанавливаются в процессе приема и передачи данных. При запуске микроконтроллера все признаки принимают значение 0. В регистре состояния SCS1 (рис.6.3,а) устанавливаются следующие признаки:
SCTE – признак готовности передатчика к приему новых данных; принимает значение SCTE=1 после того, как содержимое регистра SCDR переписывается в сдвиговый регистр передатчика для последовательной выдачи на выход TxD;
TC – признак окончания передачи; принимает значение TC=1 после выдачи последнего бита данных из сдвигового регистра передатчика на выход TxD;
SCRF – признак заполнения приемника; принимает значение SCRF=1 после того, как данные, поступившие в сдвиговый регистр приемника, переписываются в регистр SCDR;
IDLE – признак поступления символа ожидания IDLE; принимает значение IDLE=1, если состояние 1 на входе RxD поддерживается более 10 (при M=0) или 11 (при M=1) тактов Ts;
OR – признак переполнения приемника; принимает значение OR=1 в случае, когда очередной символ поступает в сдвиговый регистр приемника до считывания из регистра SCDR предыдущего символа; при этом содержимое SCDR сохраняется, а очередной поступивший символ теряется;
NF – признак наличия шумов на линии приема; устанавливается в состояние NF=1, если в процессе приема какого-либо бита, зафиксированы изменения уровня сигнала на входе RxD;
FE – признак нарушения кадра; принимает значение FE=1, если в принятом кадре длительность стоп-бита оказывается меньше, чем Ts.
Признаки SCTE, TC, SCRF, IDLE, OR, NF, FE, PE вызывают формирование запроса прерывания, если это разрешено соответствующими битами в регистрах SCCR2, SCCR3. Запросы, вызванные признаками SCTE, TC, SCRF обычно вызывают процедуры записи в регистр SCDR новых данных для передачи или считывания из него принятых данных. Если соответствующие запросы запрещены установкой значения 0 в битах SCTIE, TCIE, SCRIE, то прием и передача данных через SCI выполняется программно с помощью периодического считывания и анализа содержимого SCS1.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SCTE |
TC |
SCRF |
IDLE |
OR |
NF |
FE |
PE |
а). SCS1 (адрес $0016)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
- |
- |
- |
- |
|
- |
BKF |
RPF |
б). SCS2 (адрес $0017)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
- |
- |
SCP1 |
SCP0 |
- |
SCR2 |
SCR1 |
SCR0 |
в). SCBR (адрес $0019)
Рис.6.3. Формат содержимого регистров состояния модуля SCI08 и регистра управления ГСС.
Регистр состояния SCS2 (рис.6.3,б) содержит только два признака:
BKF – признак поступления символа окончания обмена BREAK; принимает значение BREAK=1, если состояние 0 на входе RxD поддерживается более 10 (при M=0) или 11 (при M=1) тактов Ts;
RPF – признак начала приема данных; принимает значение RPF=1, когда приемник определяет поступление на вход RxD старт-бита, значение RPF=0 устанавливается после приема символа IDLE.
Установка в 0 значений признаков в регистрах SCS1, SCS2 (кроме признака RPF) производится путем выполнения следующих операций:
чтение содержимого регистра SCS1 или SCS2,
чтение содержимого регистра данных SCDR.
Длительность такта обмена Ts = 1/Fs определяется частотой Fs импульсов, формируемых ГСС, которая задается содержимым регистра SCBR (рис.6.3,в). Значение этой частоты определяется выражением Fs = Ft/(64 х Kd x Ks), где Kd, Ks - коэффициенты деления, которые задаются содержимым полей SCP1-0 и SCR2-0 в регистре SCBR микроконтроллера (табл.6.1). При запуске микроконтроллера все биты регистра SCBR принимают значение 0, то есть обеспечивается скорость обмена Fs = Ft/64. Путем выбора различных значений коэффициентов Kd, Ks реализуются скорости последовательного обмена данными в диапазоне от десятков бит/c до 76.800 Кбит/c при частоте внешнего кварцевого резонатора 4.9152 МГц.
Таблица 6.1. Значения коэффициентов Kd и Ks.
а) Значения Kd. |
б) Значения Ks. |
||||
SCP1-0 |
Значение Kd |
|
SCR2-0 |
Значение Ks |
|
0 0 |
1 |
|
0 0 0 |
1 |
|
0 1 |
3 |
|
0 0 1 |
2 |
|
1 0 |
4 |
|
0 1 0 |
4 |
|
1 1 |
13 |
|
0 1 1 |
8 |
|
|
|
1 0 0 |
16 |
||
|
1 0 1 |
32 |
|||
|
1 1 0 |
64 |
|||
|
1 1 1 |
128 |
|||
В режиме передачи данные, предварительно записанные в SCDR с помощью команд STA или STX, переписываются в сдвиговый регистр передатчика и последовательно выдаются на выход TxD с частотой Fs. Для инициализации передатчика следует выполнить следующие операции:
установить необходимую скорость обмена путем загрузки соответствующего содержимого в регистр SCBR;
разрешить работу модуля SCI08 путем установки значения бита ENSCI=1 в регистре управления SCC1;
разрешить работу передатчика путем установки значения бита TE = 1 в регистре управления SCC2;
установить значение признака SCTE=0 путем чтения регистра SCS1 и запустить процесс передачи путем записи передаваемых данных в регистр SCDR с последующим контролем содержимого регистра состояния SCS1.
Если задан режим передачи 11-битных кадров, то в качестве бита D8 на выход TxD выдается бит T8 из регистра SCC3. Если D8 должен быть контрольным битом четности или нечетности, то этот бит необходимо предварительно сформировать и записать как T8 в регистр SCC3.
Последующий контроль работы передатчика осуществляется с помощью признаков SCTE, TE в регистре SCS1, которые либо вызывают выполнение подпрограммы обслуживания прерываний, если в регистре управления SCC2 установлены биты SCTIE=1, TCIE=1, либо должны опрашиваться программно, если биты SCTIE=0, TCIE=0. Передатчик выдает на выход TxD символы прекращения обмена BREAK (кадры из 10 или 11 нулей) при установке в регистре SCC2 значения бита SBK=1.
В режиме приема данные, поступающие на вход RxD, последовательно вводятся в сдвиговый регистр модуля SCI08 с частотой Fs. После ввода 8 бит данных они переписываются в регистр SCDR, откуда могут быть считаны в регистр A или X командами LDA, LDX. При 11-битном кадре обмена 9-й бит принятых данных D8 заносится в регистр SCC3 в качестве бита R8, который может считываться и анализироваться отдельно. После приема данных в регистре SCS1 устанавливается в 1 признак завершения приема SCRF, а при обнаружении соответствующих ошибок также признаки OR, NF, FE, PE. Установка этих признаков в 1 вызывает выполнение подпрограммы обслуживания прерываний, если в регистрах SCC2, SCC3 соответствующие биты разрешения SCRIE, ORIE, NEIE, FEIE, PEIE имеют значение 1. В противном случае эти признаки должны опрашиваться программно.
Приемник может переводиться в режим ожидания путем установки бита RWU=1 в регистре SCC2. В этом режиме приемник не записывает поступающие данные в регистр SCDR, но проверяет их содержание, ожидая прихода символа активизации. Признаки ошибок и запросы прерывания в режиме ожидания не формируются. При этом данные, передаваемые по линии, подключенной к входу RxD модуля SCI08, могут приниматься другими устройствами в системе. Последующая активизация приемника производится в соответствии со значением бита WAKE в регистре SCC1. При WAKE=0 активизация происходит после поступления на вход RxD символа IDLE – последовательности из 10 (при M=0) или 11 (при M=1) единиц. Следующий за этой последовательностью кадр данных будет приниматься модулем SCI08. В качестве начала отсчета последовательности единиц принимается старт-бит (при установке в регистре SCC1 значения бита ILTY=0) или стоп-бит предыдущего кадра (при значении бита ILTY=1). При WAKE=1 приемник активизируется при значении 1 старшего бита D7 (при 10-битном кадре) или D8 (при 11-битном кадре) поступающих данных, который служит идентификатором адреса. В этом случае после активизации принятые данные поступают в регистр SCDR. Процессор анализирует младшие семь или восемь принятых битов, которые указывают адрес приемного устройства. Если этот адрес совпадает с адресом, программно установленным для данного модуля SCI08, то он принимает данные, поступающие в последующих кадрах. Если адрес не совпадает, то модуль снова переводится в режим ожидания путем установки бита RWU=1.
Обнаружение шумов на линии приема производится путем троекратной проверки значения сигнала на входе RxD в течение периода передачи каждого бита Ts. Если проверка дает разные значения уровня, то принимается то значение (0 или 1), которое поступило дважды (принцип мажоритирования), а однократное поступление другого значения воспринимается как помеха. В этом случае устанавливается признак наличия шумов NF=1.
В процессе приема проверяется также поступление на вход RxD символов IDLE и BREAK. Прием символа IDLE вызывает установку признака IDLE=1 в регистре SCS1 и реализацию прерывания, если в регистре управления SCC2 бит ILIE=1. Прием символа BREAK вызывает установку признака BKF=1 в регистре SCS2, а также установку признаков SCRF=1 и FE=1 в регистре SCS1. В этом случае прерывания реализуются, если установлено значение бита SCRIE=1 в регистре SCC2 или бита FEIE=1 в регистре SCC3.
Для обслуживания модуля SCI08 выделены три вектора прерываний, которые обеспечивают обращение к соответствующим подпрограммам обработки:
Vt ($FFE2 - $FFE3) – вектор прерывания по запросу передатчика; обеспечивает обработку запроса при установке в 1 признаков SCTE или TE в регистре SCS1, если прерывания предварительно разрешены битами SCTIE, TCIE в регистре SCC2;
Vr ($FFE4 - $FFE5) – вектор прерывания по запросу приемника; обеспечивает обработку запроса при установке в 1 признаков SCRF или IDLE в регистре SCS1, если прерывания предварительно разрешены битами SCRIE, ILIE в регистре SCC2;
Ve ($FFE6 - $FFE7) – вектор прерывания при обнаружении ошибки приема; обеспечивает обработку запроса при установке в 1 признаков OR, NF, FE или PE в регистре SCS1, если прерывания предварительно разрешены битами ORIE, NFIE, FEIE, PEIE в регистре SCC3.
Векторы Vt, Vr, Ve размещаются в таблице векторов прерываний. Обращение к каждому из них может быть вызвано различными причинами, поэтому вызванный обработчик прерываний должен произвести анализ состояния соответствующих признаков в регистре SCS1, чтобы определить причину прерывания и обеспечить выполнение необходимой процедуры обслуживания поступившего запроса.
Синхронный последовательный порт SPI08. Обмен данными по интерфейсу SPI производится между двумя устройствами, одно из которых является ведущим (master), а другое ведомым (slave). В SPI используются четыре сигнальных линии, которые выполняют следующие функции:
SPSCK - выход синхросигнала ведущего и вход синхросигнала ведомого модуля;
MOSI - выход данных для ведущего и вход данных для ведомого модуля;
MISO - вход данных для ведущего и выход данных для ведомого модуля;
SS# - вход сигнала выбора ведомого модуля: на этот вход для ведомого модуля необходимо подать сигнал SS#=0, для ведущего модуля – сигнал SS#=1.
В микроконтроллере MC68HC908GP32 выводы модуля SPI08 совмещены с выводами PTD0-PTD3 порта D.
Модуль SPI08 содержит два отдельных регистра данных, которые имеют общее имя SPDR и адрес $0012. Один из этих регистров доступен только для записи и является буфером данных передатчика. Второй регистр доступен только для чтения и служит буфером данных приемника. Контроль работы модуля SPI08 осуществляется с помощью регистра управления SPCR и регистра состояния-управления SPSCR, форматы содержимого которых приведены на рис.6.4.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SPRIE |
0 |
SPMSTR |
CPOL |
CPHA |
SPWOM |
SPE |
SPTIE |
а) SPCR (адрес $0010)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
SPCRF |
ERRIE |
VRF |
MODF |
SPTE |
MODFEN |
SPR1 |
SPR0 |
б) SPSCR (адрес $0011)
Рис.6.4. Форматы содержимого регистров управления и состояния модуля SPI08.
Биты содержимого регистра SPCR (рис. 6.4,а) имеют следующее назначение:
SPRIE – разрешает при значении SPRIE=1 формирование запроса прерывания после окончания приема данных (в регистре SPSCR признак SPRF=1);
SPMSTR – устанавливает режим работы модуля: в качестве ведущего при значении SPMSTR=1 или в качестве ведомого при значении SPMSTR=0;
CPOL, CPHA – определяют полярность и фазу синхросигналов обмена;
SPWOM – задают режим работы выходных буферных каскадов на выводах SPSCK, MOSI, MISO: обычный двухфазный выходной каскад при значении SPWOM=0, выход с «открытым стоком» при SPWOM=1;
SPE – разрешает при SPE=1 или запрещает при SPE=0 работу модуля SPI08;
SPTIE – разрешает при значении SPTIE=1 формирование запроса прерывания, когда буфер передатчика готов к приему данных (в регистре SPSCR признак SPTE=1).
Регистр SPSCR (рис.6.4,б) содержит четыре признака состояния, которые доступны только для чтения:
SPCRF – признак завершения приема данных, принимает значение SPCRF=1 после ввода последнего бита данных и их перезаписи в буферный регистр приемника;
OVRF – признак переполнения, принимает значение OVRF=1, если в сдвиговый регистр поступают новые данные в то время, как ранее принятые данные еще не считаны из буферного регистра приемника;
MODF – признак ошибки режима, принимает значение MODF=1, если на ведущий модуль подан сигнал SS#=0, или на ведомый модуль в процессе передачи поступает сигнал SS#=1;
SPTE – признак освобождения буфера передатчика, принимает значение SPTE=1, когда данные из буфера передатчика переписываются в сдвиговый регистр для реализации обмена.
В регистре SPSCR содержатся также управляющие биты, доступные для записи-чтения:
ERRIE – разрешает при значении EERIE=1 формирование запроса прерывания при установке признаков OVRF=1 или MODF=1;
MODFEN – разрешает при значении MODFEN=1 контроль режима работы модуля SPI08 путем установки признака MODF;
SPR1-0 – задают значения коэффициента деления Kd, определяющего частоту синхросигналов обмена (табл.6.2).
Функционирование модуля SPI08 определяется управляющим кодом, который записывается в регистр SPCR (рис.6.4,а). При этом модуль программируется для работы в качестве ведущего (в регистре SPCR устанавливается значение бита SPMSTR=1) или ведомого (значение бита SPMSTR=0). Ведущий модуль выдает на выход SPSCK синхросигналы обмена, частота которых равна Fs = Ft/Kd, где коэффициент деления Kd определяется значениями поля SPR1,0 в регистре SPSCR (табл.6.2). Включение модуля SPI08 происходит при установке в регистре SPCR значения бита SPE=1.
Таблица 6.2. Значения коэффициента деления частоты Kd для модуля SPI08
-
SPR1-0
Kd
00
2
01
8
10
32
11
128
В процессе обмена сдвиговые регистры ведущего и ведомого модулей соединяются в кольцо. При этом в каждом такте обмена производится ввод бита в младший разряд сдвигового регистра ведущего и ведомого модулей и вывод старшего бита из этого регистра. После окончания передачи символа (8 бит) в регистре SPSСR (рис.6.4,б). устанавливается признак завершения обмена SPCRF=1. При этом формируется запрос прерывания, если в регистре SPCR установлен бит разрешения прерывания SPRIE=1.
В исходном состоянии на выходе SPSCK ведущего SPI поддерживается постоянный уровень 0, если в регистре SPCR установлено значение бита полярности синхросигналов CPOL=0, или уровень 1, если CPOL=1. Обмен производится 8-разрядными символами, которые поступают в сдвиговый регистр после записи данных в регистр SPDR ведущего модуля SPI08. При этом на выход SPSCK ведущего модуля поступают синхросигналы, положительный или отрицательный фронт которых определяет начало передачи очередного бита и момент его ввода в принимающий регистр. Выбор активного фронта синхросигнала определяется значением бита фазы синхронизации CPHA, который задает формат передачи данных.
В процессе работы модуля SPI08 в регистре SPSCR (рис.6.4,б) устанавливаются признаки SPCRF, SPTE, OVRF, MODF, которые вызывают формирование запроса прерывания, если соответствующие управляющие биты SPRIE, SPTIE, ERRIE имеют значение 1. Сброс в 0 значения признаков SPCRF, OVRF происходит после считывания содержимого регистра SPSCR и последующего чтения регистра SPDR. Для сброса в 0 признака MODF необходимо после считывания SPSCR произвести запись в регистр SPDR. Признак SPTE автоматически сбрасывается в 0 после каждой записи в регистр SPDR новых данных для следующего обмена.
Для обслуживания модуля SPI08 выделены два вектора прерываний, которые обеспечивают обращение к соответствующим подпрограммам обработки:
Vt – вектор прерывания по запросу передатчика, обеспечивает обработку запроса при установке в 1 признака SPTE в регистре SPSCR, если прерывание разрешено битом SPTIE в регистре SPSCR;
Vr – вектор прерывания по запросу приемника или при обнаружении ошибки, обеспечивает обработку запроса при установке в 1 признаков SPRF, OVRF или MODF в регистре SPSCR, если прерывания разрешены битом SPTIE в регистре SPSCR или битом ERRIE в регистре SPSCR.
Вектора Vt (адрес $FFE8-E9), Vr (адрес $FFEA-EB) занимают две позиции в таблице векторов прерываний. Обращение к вектору Vr может быть вызвано различными причинами (прием данных, переполнение или ошибка режима), если биты разрешения прерываний SPRIE=ERRIE=1. В этом случае вызванный обработчик прерываний должен произвести анализ состояния признаков SPRF, OVRF, MODF в регистре SPSCR, чтобы определить причину прерывания и обеспечить выполнение необходимой процедуры обслуживания.
Цифровой термометр. На плате лабораторного макета расположен цифровой термометр DS1722, который поддерживает обмен данными по интерфейсу SPI в режиме ведомого. Это устройство способно принимать команды и передавать данные о температуре окружающей среды в микроконтроллер MC68HC908GP32.
После включения питания DS1722 находится в режиме ожидания. Для того чтобы активировать термометр, необходимо дать команду на выполнение одного цикла преобразования температуры или разрешить непрерывную работу термометра. В последнем случае внутренняя схема DS1722 начинает непрерывный цикл определения температуры, результат которого сохраняется во внутренних регистрах устройства. Результат преобразования представляется в виде 8- (точность 1 С), 9-, 10-, 11- или 12-разрядного (точность 0.0625 С) числа. Чем точнее результат, тем больше времени требуется на преобразование температуры в цифровой код.
Табл.6.3. Примеры кодирования значений измеряемой температуры в DS1722.
Температура, С |
Двоичный код |
Шестнадцатеричный код |
+120 |
01111000 00000000 |
7800h |
+25.0625 |
00011001 00010000 |
1910h |
+0.5 |
00000000 10000000 |
0080h |
0 |
00000000 00000000 |
0000h |
-0.5 |
11111111 10000000 |
FF80h |
-25.0625 |
11100110 11110000 |
E6F0h |
-55 |
11001001 00000000 |
C900h |
Два байта, содержащие код температуры (табл.6.3) расположены во внутренних регистрах DS1722 с адресами $01 для младшего и $02 для старшего байтов. Следует отметить, что значение температуры дается в дополнительном коде, при этом старший байт содержит целую часть значения температуры, а младший – дробную.
Слово конфигурации, определяющее режим работы термометра и точность преобразования также находится во внутреннем регистре DS1722. Этот регистр имеет адрес $00 для считывания и $80 для записи. Формат регистра представлен на рис.6.5.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
1 |
1SHOT |
R2 |
R1 |
R0 |
SD |
Рис.6.5. Формат регистра конфигурации микросхемы DS1722.
Отдельные биты слова конфигурации имеют следующие значения:
1SHOT – если бит SD = 1, то установка данного бита в 1, приведет к выполнению одного цикла преобразования, после чего бит 1SHOT будет сброшен в 0.
R0-R2 – данные биты определяют точность преобразования в соответствии с таблицей 6.4.
SD – данный бит определяет режим работы DS1722 по окончании очередного цикла преобразования. Если SD = 0, то термометр находится в режиме непрерывного преобразования, если SD = 1, то после текущего цикла преобразования DS1722 перейдет в режим ожидания.
Таблица 6.4. Значения точности преобразования для DS1722.
R2 |
R1 |
R0 |
Точность преобразования, бит |
Время преобразования, с |
0 |
0 |
0 |
8 |
0.075 |
0 |
0 |
1 |
9 |
0.15 |
0 |
1 |
0 |
10 |
0.3 |
0 |
1 |
1 |
11 |
0.6 |
1 |
х |
х |
12 |
1.2 |
Для получения данных о температуре окружающей среды необходимо сконфигурировать DS1722 на работу в режиме непрерывного преобразования, или дать команду на выполнение одного цикла преобразования, для чего следует прописать правильный код в регистр конфигурации (т.е. сначала передать адрес регистра - $80, а затем код конфигурации). После этого, следует передать адрес регистра, в котором содержится младший байт кода температуры (т.е число $01), а затем последовательно принять два байта с кодом температуры (сначала младший, потом старший).
Первоначально, термометр настроен на работу в режиме 9-разрядного представления температуры, что позволяет получить значение температуры окружающей среды с точностью 0.5 С.
