Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛП_ЛС1.doc
Скачиваний:
24
Добавлен:
21.08.2019
Размер:
9.68 Mб
Скачать

Порядок выполнения работы

1. Ознакомиться с функционированием параллельных портов ввода-вывода в микроконтроллере MC68HC908GP32.

2. Реализовать процедуру записи данных в параллельный порт A. Правильность работы процедуры проконтролировать с помощью симулятора.

3. Написать подпрограмму, реализующую опрос состояния клавиатуры с сохранением номера нажатой клавиши в регистре A микроконтроллера. Проверить правильность работы подпрограммы с помощью симулятора.

4. Ознакомиться с функционированием ЖКИ.

5. Написать подпрограммы, обеспечивающие инициализацию ЖКИ и вывод заданного в регистре A символа на экран ЖКИ.

  1. Составить программу, реализующую вывод номера нажатой клавиши в первой позиции экрана ЖКИ. Проверить правильность выполнения программы сначала с помощью симулятора, а затем на лабораторном макете.

Работа №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 С.