Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Модуль синхронного последовательного интерфейса SPI08



Синхронный последовательный обмен в микроконтроллерах семейства 68HC08/908 реализуется с помощью модуля SPI08 (Serial Peripheral Interface – 08). Обмен данными производится между двумя модулями SPI08, один из которых является ведущим (master), а другой ведомым (slave). Реализация обмена показана на рис.22.

       
 
 
   
Рис. 22. Реализация синхронного последовательного с помощью модулей SPI08


В процессе обмена используются четыре вывода модуля SPI08, которые выполняют следующие функции (рис.22):

- SPSCK - выход синхросигнала ведущего и вход синхросигнала ведомого модуля;

- MOSI - выход данных для ведущего и вход данных для ведомого модуля;

- MISO - вход данных для ведущего и выход данных для ведомого модуля;

- SS# - вход сигнала выбора ведомого модуля: на этот вход для ведомого модуля необходимо подать сигнал SS#=0, для ведущего модуля – сигнал SS#=1.

Эти выводы совмещены с выводами PTD3-0 порта D.

Модуль SPI08 содержит два отдельных регистра данных, которые имеют общее имя SPDR и адрес $0012. Один из этих регистров доступен только для записи и является буфером данных передатчика. Второй регистр доступен только для чтения и служит буфером данных приемника. Контроль работы модуля SPI08 осуществляется с помощью регистра управления SPCR и регистра состояния-управления SPSCR, формат содержимого которых показан на рис.23.

               
SPRIE   SPMSTR CPOL CPHA SPWOM SPE SPTIE

а) SPCR (адрес $0010)

               
SPRF ERRIE OVRF MODF SPTE MODFEN SPR1 SPR0

б) SPSCR (адрес $0011)

Рис.23. Формат содержимого регистров управления и состояния модуля SPI08.

Отдельные биты содержимого регистра SPCR (рис. 23,а) имеют следующее назначение:

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 (рис.23,б) содержит четыре признака состояния, которые доступны только для чтения:

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, определяющего частоту синхросигналов обмена (табл.18).

Функционирование модуля SPI08 определяется управляющим кодом, который записывается в регистр SPCR (рис.23,а). При этом модуль программируется для работы в качестве ведущего (в регистре SPCR устанавливается значение бита SPMSTR=1) или ведомого (значение бита SPMSTR=0). Ведущий модуль выдает на выход SPSCK синхросигналы обмена, частота которых равна Fs = Ft/Kd, где коэффициент деления Kd определяется значениями поля SPR1,0 в регистре SPSCR (табл.19). Включение модуля SPI08 происходит при установке в регистре SPCR значения бита SPE=1.

Таблица 19. Значения коэффициента

деления частоты Kd для модуля SPI08

SPR1-0 Kd
   
   
   
   

В процессе обмена сдвиговые регистры ведущего и ведомого модулей соединяются в кольцо (рис.22). При этом в каждом такте обмена производится ввод бита в младший разряд сдвигового регистра ведущего и ведомого модулей и вывод старшего бита из этого регистра. После окончания передачи символа (8 бит) в регистре SPSСR (рис.23,б). устанавливается признак завершения обмена SPCRF=1 При этом формируется запрос прерывания, если в регистре SPCR бит разрешения прерывания SPRIE=1.

В исходном состоянии на выходе SPSCK ведущего SPI поддерживается постоянный уровень 0, если в регистре SPCR установлено значение бита полярности синхросигналов CPOL=0, или уровень 1, если CPOL=1. Обмен производится 8-разрядными символами, которые поступают в сдвиговый регистр после записи данных в регистр SPDR ведущего модуля SPI08. При этом на выход SPSCK ведущего модуля поступают синхросигналы, положительный или отрицательный фронт которых определяет начало передачи очередного бита и момент его ввода в принимающий регистр. Выбор активного фронта синхросигнала определяется значением бита фазы синхронизации CPHA, который задает формат передачи данных.

В исходном состоянии на выходе SCK ведущего SPI поддерживается постоянный уровень 0, если в регистре SPCR установлено значение бита полярности синхросигналов CPOL=0, или уровень 1, если CPOL=1. Обмен начинается после записи данных в регистр SPDR ведущего SPI. При этом на выход SCK ведущего порта поступают синхросигналы, положительный или отрицательный фронт которых определяет начало передачи очередного бита и момент его ввода в принимающий регистр. Данные передаются, начиная со старшего бита b7. Выбор активного фронта синхросигнала определяется значением бита фазы синхронизации CPHA, который задает формат передачи данных (рис.24).

Формат 0 (рис.24,а). При значении CPHA=0 ведомый SPI выдает на линию MISO старший бит данных из сдвигового регистра после поступления сигнала SS#=0. Если бит CPOL=0, то после начала обмена (записи данных в регистр SPDR ведущего SPI) выдача данных из ведущего и ведомого SPI производится при установке на выходе SCK уровня 0, а ввод поступающих данных в сдвиговые регистры при установке на выходе SCK уровня 1 (положительный фронт синхросигнала). Если бит CPOL=1, то выдача данных производится при установке уровня 1 на выходе SCK, а ввод при установке уровня 0 (отрицательный фронт синхросигнала). После передачи символа на вход SS# ведомого SPI необходимо подать уровень 1, а перед началом передачи следующего символа снова установить уровень 0.

Формат 1 (рис.24,б). При значении CPHA=1 ведущий и ведомый SPI начинают и продолжают выдачу битов одновременно - при поступлении положительного фронта синхросигнала, если бит CPOL=0, или отрицательного фронта, если CPOL=1. Ввод поступающих данных производится при поступлении отрицательного фронта синхросигнала, если бит CPOL = 0, или положительного фронта, если CPOL=1. При этом сигнал SS# на входе ведомого SPI может сохранять постоянный уровень 0 между передачами различных символов.

Рис.24. Форматы передачи данных при синхронном обмене через порт SPI

В процессе работы модуля SPI08 в регистре SPSCR (рис.23,б) устанавливаются признаки SPСRF, 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) занимают две позиции tв таблице векторов (см. табл. 10). Обращение к вектору Vr может быть вызвано различными причинами (прием данных, переполнение или ошибка режима), если биты разрешения прерываний SPRIE=ERRIE=1. В этом случае вызванный обработчик прерываний должен произвести анализ состояния признаков SPRF, OVRF, MODF в регистре SPSCR, чтобы определить причину прерывания и обеспечить выполнение необходимой процедуры обслуживания.





Дата публикования: 2014-11-02; Прочитано: 579 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...