Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Глава 14

.pdf
Скачиваний:
26
Добавлен:
18.02.2016
Размер:
1.11 Mб
Скачать

чения модуля тактовый сигнал FOSC поступает на программируемый делитель частоты, коэффициент деления которого предварительно устанавливается битами SSPM0 – SPM3 регистра SSPCON в одно из значений: 4,16,64. Это позволяет регулировать скорость обмена данными, например, при частоте кварцевого генератора 4 МГц, в диапазоне 1МГц, 250 кГц, 62,5 кГц. Перед тем, как этот сигнал поступит на выход SCK (разряд RC3 порта С) микроконтроллера, он проходит через «блок выбора исходного (пассивного) уровня сигнала SCK и выбора его фронта» по которому впоследствии будет осуществляться сдвиг битов в специальном сдвиговом регистре SSPSR. Механизмы сдвига будут рассмотрены ниже, а выбор исходного (пассивного) уровня, который установится на выходе SCK при отсутствии генерации синхроимпульсов, осуществляется путем соответствующей установки бита СКР регистра SSPCON. Режим имеет две особенности:

-генерация импульсов SCK на контакте SCK автоматически начинается только после записи передаваемого байта из W в регистр SSPBUF (на рис. 140 пачки по 8 импульсов начинают проходить через ключ), т.е. фактически после начала режима передачи;

-после передачи всех 8-ми бит на выход SDO ключ автоматически закрывается до следующей передачи (приема) байта в SSPBUF. Таким образом, генерация синхроимпульсов происходит пачками по 8 синхроимпульсов. При отсутствии этого сигнала SCK на выходном контакте RC3 микроконтроллера подчиненное устройство автоматически переходит в ждущий режим работы до следующего появления синхроимпульсов на линии SCK в SPI сети.

Рассмотрим назначение элементов схемы модуля, использующихся в режиме передачи и приема данных в последовательном коде при работе контроллера в ведущем режиме. В SPI модуле эти режимы реализованы ТОЛЬКО ОДНОВРЕМЕННО. Для этого используется 8-разрядный регистр сдвига SSPSR в сторону старших разрядов, последовательный вход (младшего 0-го разряда) которого соединен с входом SDI (разряд RC4 порта С), а выход старшего (7-го разряда) – с выходом SDO (разряд RC5 порта С). Однако кроме этого этот регистр имеет и некоторые дополнительные особенности:

-не имеет физического адреса (т.е. непосредственно недоступен для записи и чтения) и доступ к нему (запись и чтение) осуществляется через другой специальный адресуемый параллельный регистр памяти SSPBUF (0х13), таким образом, что обращение к регистру SSPBUF автоматически приводит к обращению

кSSPSR, но процессы записи и чтения происходят по разному;

-кроме последовательного сдвига, регистр SSPSR допускает параллельную запись в себя (через W и SSPBUF) и чтение записанной в нем информации (через

SSPBUF и W);

-последовательный вывод ранее записанных бит в регистре SSPSR на выход SDO и ввод (запись или отсчет значений) на их место битов с входа SDI осуществляется путем их сдвига, но по РАЗНЫМ фронтам тактового сигнала SCK, т.е. фактически одновременно. При этом, если например, передним фронтом первого тактового импульса старший 7-ой бит из регистра SSPSR появляется на выходе (на его место сдвигается бывший 6-ой), то на место бывшего 0-го но уже по заднему фронту этого же импульса SCK записывается первый (фактиче-

ски старший 7-ой) бит, имеющийся в этот момент времени на входе SDI. Вторым тактовым импульсом сдвиг и запись происходят со следующими битами и т.д. Т.е. за 8 импульсов SCK из регистра SSPSR будут выведены все 8 ранее туда записанных бит, а на их место помещены принятие 8 бит с входа SDI. Все процессы сдвига осуществляются СТАРШИМ БИТОМ ВПЕРЕД.

Рассмотрим режим передачи данных в SPI интерфейсе. Работа начинается записью в W байта, значение которого в последовательном коде требуется передать на выход SDO. После этого осуществляется его перезапись в регистр SSPBUF, при этом фактически выполняется три операции:

-хотя формально перезапись производится в регистр SSPBUF, фактически байт из W попадает в регистр сдвига SSPSR и СРАЗУ ЖЕ НАЧИНАЕТСЯ (автоматически без участия ПО) его сдвиг и выдача на выход SDO. Сдвиг происходит либо по переднему (первое изменение сигнала) при бите CKE = 0 (в регистре SSPSTAT), либо – по заднему (второе изменение сигнала) фронту сигнала SCK при бите CKE = 1:

-модуль SPI автоматически (без участия программиста) контролирует попытку повторной записи в SSPBUF до тех пор, пока не закончится передача (а фактически и прием) предыдущего байта. Если попытка записи предпринимается, например, при ошибке в ПО, до окончания передачи предыдущего байта, то модуль устанавливает бит WCOL (в регистре SSPCON) = 1, а записываемый байт игнорируется. Индикатором окончания передачи предыдущего байта является установка бита BF (в регистре SSPSTAT) =1, осуществляемая самим модулем автоматически.

Примечание: строго говоря, установка бита BF в «1» является признаком окончания не передачи, а приема очередного байта, но т.к. эти два события происходят в течение одного тактового импульса SCK, можно считать, что установка BF=1 говорит об окончании именно передачи предыдущего байта.

-начинается генерация пачки из 8-ми синхроимпульсов SCK на выходе

RC3.

Другими словами, «блок CONTROL WRITE» запрещает повторную запись нового байта в SSPBUF, до тех пор пока BF = «0». Операция повторной записи игнорируется, в SSPBUF остается предыдущее значение, а бит WCOL =1 индицирует о попытке такой записи. Следует также иметь в виду, что сам бит WCOL

висходное нулевое значение после этого не сбрасывается, поэтому в Вашем ПО должен быть предусмотрен принудительный контроль такого события и соответственно последующий сброс WCOL в «0» для возможности проведения аналогичного контроля в дальнейшем.

Таким образом, за 8 импульсов SCK произойдет передача в последовательном коде байта, записанного в регистре SSPBUF, а не его место, пока еще в регистре SSPSR, окажется записан принятый по входу SDI байт от устройства-slave (хотя, опять же строго говоря, при передаче первой команды оно еще никакого ответа не передавало). На этом режим передачи заканчивается (заканчивается также и генерация импульсов SCK) и будет продолжен только после записи Вашим ПО следующего байта в регистр SSPBUF.

Режим приема данных в SPI интерфейсе реализован за счет приема и

25С04

25С04

возможные фронты передачи бит SDO

возможные моменты отсчета бит SDI

Рис. 141 Управление моментами передачи и приема SPI магистрали

сдвига бит по входу SDI каждые 8 тактовых импульсов SCK в регистре сдвига SSPSR. Учитывая, что для приема используется механизм сдвига в том же регистре, что и для передачи (SSPSR) в контроллере было реализовано разделение по времени процессов передачи и процесса приема каждого бита. Это достигается за счет возможности управления моментом сдвига (передачи) и моментом отсчета бита на входе SDI (т.е. приема) с помощью бит CKE и SMP (Рис. 141). На этом рисунке приведены осциллограммы синхросигнала SCK при различных комбинациях управляющих бит CKP, CKE и относительного взаимного положения бит на выходе SDO. Жирной линией отмечены выбираемые фронты синхросигнала по которым осуществляется сдвиг (передача) очередного бита на выходе SDO. Например, при CKP=0, CKE=0 сдвиг осуществляется по переднему фронту SCK при пассивном низком уровне этого сигнала.

Штриховой линией показаны два возможных момента отсчета битов на входе SDI, располагаемых в середине (SMP=0) или в конце (SMP=1) периода тактового сигнала. Таким образом, вначале происходит сдвиг сигнала на выходе SDO, а затем (в середине или конце периода, см. Рис. 140) – отсчет и запись в освободившийся разряд регистра SSPSR, бита имеющегося в текущий момент времени на входе SDI.

Например, при отправке пакета на микросхему 25С04, требуемые для нее параметры синхросигнала SCK таковы, что обеспечиваются следующей комбинацией бит: CKP=1, CKE=0, SMP=1. Т.е. при отсутствии синхроимпульсов сигнал на SDO имеет высокий уровень, сдвиг осуществляется по переднему фронту синхроимпульсов, а отсчет сигнала на входе SDO происходит в конце тактового интервала.

Режим приема начинается с повторной записи байта в регистр SSPBUF. При этом мастер-контроллер автоматически начнет генерировать импульсы SCK, которые поступая на slave-устройство, инициируют его «ответ» на ранее полученную команду. Строго говоря, повторная передача команды мастером подчиненному устройству уже не нужна, но таков механизм SPI интерфейса: принимать мастер может, только что-нибудь передавая. Как только восемь бит со входа SDI будут приняты в регистр SSPSR, модуль SPI автоматически (без участия Вашего ПО) переписывает этот байт в регистр SSPBUF и устанавливает бит BF=1, сигнализируя об окончании приема очередного входного байта (а кроме этого и об окончании передачи). После этого полученный байт через W (рис. 140) становится доступным по шине данных микроконтроллера. Для сохранения полученного байта необходимо прочитать его из SSPBUF в W, при этом автоматически сбросится бит BF=0, подготавливая SSPBUF к приему следующего входного байта или к записи следующего передаваемого байта и обеспечивая возможность контроля этого события при помощи бита BF.

Такая двойная буферизация принятых данных (когда данные принимаются в один регистр, а хранятся в другом) позволяет принимать следующий байт во время обработки (чтения) предыдущего, повышая скорость обработки данных в целом. Если к моменту приема в SSPSR следующего входного байта ПО не «прочитало» предыдущий байт из SSPBUF возникает переполнение, о котором индицирует бит SSPOV=1 регистра SSPCON. При этом происходит потеря предыдущего байта, а вновь принятый байт переписывается из SSPSR в SSPBUF и процесс чтения продолжается. Поэтому для корректной работы ПО необходимо до окончания приема следующего байта прочитать из SSPBUF значение предыдущего принятого байта.

Таким образом, учитывая, что режим приема у мастер-контроллера «совмещен» с режимом передачи, в теле ПО необходимо четко определить момент, когда надо «обращать внимание» на принятый байт. Этот момент зависит от типа slave-устройства, т.к. команду «ответить» ему дает ВСЕГДА мастерконтроллер, само оно «начать отвечать» не может, поэтому «обращать внимание» на принятый байт из регистра SSPBUF надо только ПОСЛЕ ОКОНЧАНИЯ ЗАПРОСА мастер-контроллера. До этого «принимаемые данные» нужно считывать, но можно игнорировать. Настройка битов CKP, CKE, SMP должна осуществляться таким образом, чтобы полученный сигнал SCK «понимало» slaveустройство, т.е. реагировало на «свой» перепад при приеме данных от мастерконтроллера, передавало бы данные по «нужному» для мастер-контроллеру перепаду. Эта информация приводится в описании каждого конкретного slaveустройства, но в любом случае процессы передачи/приема данных мастерконтроллера и slave-устройством должны быть разделены по времени.

В. Управляющие регистры модуля SPI

Работой модуля SPI (как и любого встроенного в микроконтроллер модуля) управляет и контролирует его работу группа специальных управляющих регистров (Рис. 142). В этих регистрах определенные биты либо играют роль

 

 

 

 

Модуль SPI

 

 

 

Регистр состояний SSPSTAT

 

 

Управляющий регистр SSPCON

 

 

(0x94)

 

 

 

(0x14)

 

 

момент отсчета сигнала SDI

выбор фронта передачи сигнала SDO

состояние приемного буфера SSPBUF

контроль попытки записи в

SSPBUF до окончания передачи предыдущего байта

контроль события «уже принят следующий байт, а предыдущий еще не прочитан из SSPBUF»

Включение/выключение модуля и конфигурирование контактов SDO, SDI, SCK

Выбор исходного (пассивного) уровня SCK

Выбор частоты SCK

 

Рис. 142 Состав и функции управляющих регистров модуля SPI

 

 

 

 

SSPSTAT

(0x94)

 

 

 

 

 

 

 

 

 

 

 

 

7

6

5

4

 

3

2

1

0

 

 

 

 

 

 

 

 

 

SMP

CKE

х

х

 

х

х

х

BF

 

 

 

 

 

 

 

 

 

Разряды регистра SSPSTAT, отмеченные значком «х» на работу мо-

дуля в контроллере TTF НЕ ВЛИЯЮТ

SMP – момент отсчета значения входного бита на входе SDI

0 - входное значение отсчитывается (принимается) в середине такта вывода бита на выходе SDO;

1 - входное значение отсчитывается (принимается) в конце такта вывода бита на выходе SDO

CKE – выбор фронта сигнала SCK по которому происходит сдвиг (передача) выходного бита на выходе SDО

0 - сдвиг (передача) бита осуществляется по первому изменению сигнала SCK (по переднему фронту);

1 - сдвиг (передача) бита осуществляется по второму изменению сигнала SCK (по заднему фронту)

BF – флаг состояния приемного буфера SSPBUF

0 - прием не закончен, регистр SSPBUF пуст;

1 - прием закончен, регистр SSPBUF полон и содержит принятый в регистр SSPSR байт

Рис. 143 Назначение бит управляющего регистра SSPSTAT

флагов, сигнализирующих о наступлении какого-то события, либо включа-

ют/выключают некоторую функцию модуля. Виды событий и реализуемые функции приведены на рис. 142, в соответствующие биты и допустимые их значения для контроллера PIC 16F877 приведены на рис. 143, 144. Ограничения

 

 

 

SSPCON

(0x14)

 

 

 

 

 

 

 

 

 

 

 

 

7

6

5

4

 

3

2

1

0

 

 

 

 

 

 

 

 

 

WCOL

SSPOV

SSPEN

CKP

 

SSPM3

SSPM2

SSPM1

SSPM0

 

 

 

 

 

 

 

 

 

WCOL – индикатор попытки записи Вашим ПО следующего байта в SSPBUF (для передачи) до окончания передачи из SSPSR на выход SDO предыдущего байта, так называемый конфликт записи;

0 – конфликта записи нет, передача на выходе SDO идет нормально

1 – была предпринята попытка записи в SSPBUF, при этом содержимое SSPBUF не изменится, а операция записи будет проигнорирована модулем SPI автоматически, передача предыдущего байта не будет нарушена. После этого бит WCOL надо принудительно в теле ПО сбросить в

«0» !

SSPOV – индикатор переполнения приемного буфера - регистра SSPBUF

0 – переполнения нет, прием идет нормально, потери принятого байт нет;

1 – по входу SDI принят следующий байт, а предыдущий еще Вашим ПО не считан, при этом предыдущий байт из SSPBUF будет потерян, а на его место перепишется вновь принятый байт, это явление называется переполнением приемного буфера

SSPEN – включение/выключение модуля SPI

0 – модуль SPI выключен, контакты RC3-RC5 выполняют роль обычных цифровых двунаправленных контактов порта С;

1 – модуль SPI включен, контакты RC3-RC5 автоматически конфигурируются как контакты SPI интерфейса: т.е. SCK, SDI, SDO соответственно

CKP – выбор исходного (пассивного при отсутствии генерации импульсов) уровня сигнала на выходе SCK

0 – пассивный уровень низкий, т.е. «0»; 1 – пассивный уровень высокий, т.е. «1»

SSPM3 – SSPM0 – выбор частоты тактового сигнала SCK, фактически это скорость обмена данными между мастер-контроллером и подчиненными устройствами

0000 – скорость обмена FOSC /4 = 1МГц;

0001 – скорость обмена FOSC /16 = 250 кГц;

0010 – скорость обмена FOSC /64 = 62,5 кГц;

Остальные комбинации битов SSPM3SSPM0 - ЗАПРЕЩЕНЫ !

Рис. 144 Назначение бит управляющего регистра SSPCON

(либо безразличные состояния) значений некоторых бит этих регистров связаны с уже имеющейся аппаратной структурой контроллера TTF. Так, например, режим I2C, конфигурируемый регистром SSPSTAT, в контроллере TTF не реализован. В связи с этим, значения части бит регистра SSPSTAT – при работе в режиме SPI безразличны и т.д.

Г. Алгоритм программирования модуля SPI в master-режиме

При рассмотрении алгоритма программирования модуля SPI будем предполагать, что мастер-контроллер PIC 16F877 включен по схеме, приведенной на Рис. 138. В [14] приводится следующий ОБЯЗАТЕЛЬНЫЙ алгоритм программирования.

1. Инициализация SPI модуля заключается в его настройке в соответствие с требованиями конкретного slave-устройства и включает в себя следующие шаги:

- конфигурирование контактов порта С (регистр TRISC) в соответствие с требованиями SPI интерфейса: SDO (RC5) – выход, SDI (RC4) – вход, SCK (RC3)

– выход; - конфигурирование порта, контакт которого является выходом выбора

подчиненного устройства, для контроллера TTF 5.0 это RB2 (регистр TRISB) в соответствие с требованиями SPI интерфейса: CS (RB2) – выход;

- выключение подчиненного устройства, CS = 1;

- выключение SPI модуля, путем установки SSPEN = 0 для его настрой-

ки;

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

- включение SPI модуля, путем установки SSPEN = 1, выбор скорости обмена интерфейса путем установки битов SSPM3-SSPM0 регистра SSPCON (0x14) в соответствие с требованиями slave-устройств. В случае микросхемы памяти 25С04 рекомендуемая скорость обмена равна FOSC/16 (при частоте кварца в контроллере TTF – 4 МГц), а значения битов таковы:

SSPM3

SSPM2

SSPM1

SSPM0

0

0

0

1

- выбор пассивного уровня сигнала SCK, в соответствие с требованиями конкретного slave-устройствами, путем установки бита CKP регистра SSPCON (0x14). В случае микросхемы памяти 25С04 требуемый уровень должен быть высоким, а значение бита CKP = 1;

- выбор момента отсчета входного бита на входе SDI, в соответствие с требованиями конкретного slave-устройствами, путем установки бита SMP регистра SSPSTAT (0x94). В случае микросхемы памяти 25С04 требуемый момент отсчета должен быть в конце тактового интервала, а значение бита SMP = 1;

- выбор фронта, по которому осуществляется передача битов по выходу SDO, в соответствие с требованиями конкретного slave-устройствами, путем установки бита CKE регистра SSPSTAT (0x94). В случае микросхемы памяти

25С04 передача должна осуществляться по переднему фронту импульсов SCK, а значение бита CKE = 0.

2. Передача мастер-контроллером команды подчиненному устройству. Этот этап уже больше относится к протоколу обмена данными между ними (не регламентируемому спецификацией SPI интерфейса) и определяется типом подчиненного устройства. Но в любом случае этап содержит следующие шаги:

-активизация выбранного подчиненного устройства путем установки CS

=0, на соответствующем выходе контроллера, для контроллера TTF 5.0 это RB2;

-помещение в регистр SSPBUF байта команды, которую надо передать подчиненному устройству. При этом автоматически начнется генерация импульсов SCK и передача байта команды в последовательном коде на выходе SDO. Значение байта определяется документацией на подчиненное устройство;

-ожидание конца передачи по моменту, когда флаг BF = 1, в этот момент автоматически прекратится генерация импульсов SCK и оба устройства «остановятся»;

-чтение в W содержимого регистра SSPBUF только для того чтобы сбросить BF в «0». Строго говоря, содержимое SSPBUF, принятое в этом случае по входу SDI никакого смысла не имеет, т.к. подчиненное устройство еще НИЧЕГО не передавало, просто модуль SPI, отсчитав 8 импульсов SCK, автоматически установит BF в 1. Slave-устройство начнет передачу, только приняв соответствующую команду от мастер-контроллера. Сброс бита BF необходим для корректности реализации следующего пункта, когда по значению BF = 1, контроллер будет судить об окончании «настоящего» ответа подчиненного устройства.

3. Прием данных от подчиненного устройства. В соответствие с полученной командой slave-устройство СРАЗУ же (по следующему импульсу SCK) может начать автоматически отвечать мастер-контроллеру, формируя последовательный код байта на своем выходе SDO. Для его приема мастер-контроллер вновь перейти в режим передачи, т.к. SPI интерфейс предусматривает прием (да и генерацию синхроимпульсов, необходимых slave-устройству) только одновременно с передачей. Этап содержит следующие шаги:

-помещение в регистр SSPBUF байта команды, которую надо передать подчиненному устройству;

Примечание: этот этап является обязательным, хотя с аппаратной точки зрения такая повторная передача команды игнорируется подчиненным устройством, т.к. в данный момент оно уже получило эту команду и выполняет ее, «не обращая внимания» на свой вход SDI. Но для того чтобы микроконтроллер корректно принял ответ slave-устройства, его необходимо фактически включить в режим передачи, хотя, строго говоря, передавать сейчас можно уже что угодно. Для упрощения ПО обычно передают ту же самую команду. Кроме тог, синхроимпульсы, необходимые подчиненному устройству для передачи ответа, генерируются мастером только после записи байта в SSPBUF.

-дождавшись BF = 1, прочитать содержимое регистра SSPBUF в регистр

W, при этом бит BF сбросится в «0»;

-отключить ведомое устройство, установив CS = 1.

4.Обработать полученный байт, например, поместив его в свободный регистр ОЗУ.

5.Дальнейший алгоритм зависит от стоящей задачи. Если требуется периодическая работа с подчиненным устройство, то на этом этапе можно «зациклить» ПО. Если – нет, то подчиненному устройству передается следующая команда и т.д., но здесь уже необходимо учитывать протокол обмена конкретного подчиненного устройства, приводимый в его описании и являющийся фактически дополнением к спецификации SPI интерфеса.

Примечание: если в процессе работы ПО требуется перенастроить модуль SPI, например, изменить скорость обмена и т.д., то перед этим ОБЯЗАТЕЛЬНО необходимо ВЫКЛЮЧИТЬ модуль, установив бит SSPEN = 0.

Д. Особенности моделирования работы модуля SPI в среде MPLAB 4.0

При моделировании процессов и режимов работы SPI модуля в среде MPLAB 4.0 необходимо учитывать тот факт, что модуль является встроенным в микроконтроллер. Т.о. если он правильно сконфигурирован и включен, то после записи данных в регистр SSPBUF автоматически начнется их передача на выход SDO и прием соответствующих данных с входа SDI (с последующей автоматической записью в SSPBUF). Другими словами, моделирование его работы как модуля приема-передачи не требуется. В то же время при работе микроконтроллера с периферийными устройствами в теле ПО необходимо управлять моментом считывания данных, моментами передачи, их чередования, моментами переконфигурирования и т.д. В этих случаях необходимо учитывать некоторые осо-

бенности среды моделирования.

Во-первых, в конце окна специальных регистров присутствует не адресуемый регистр SSPSR, его состояние отображается также как и других аналогов, типа W, FSR и т.д.

Во-вторых, моделирование сигнала SCK на выходе RC 3 невозможно,

т.е. наблюдение изменения этого сигнала в процессе работы модуля SPI не происходит.

В-третьих, MPLAB не отслеживает (и не выдает сообщения об ошибке)

соответствия выбранного банка памяти и принадлежности к нему регистра в Вашем ПО. При этом если в теле ПО выбран банк и далее следует команда, обращающаяся к регистру, не принадлежащему этому банку, среда обращается к регистру, расположенному в выбранном банке и «лежащему на одной горизонтали» в карте памяти (рис. 128) с используемым в команде.

Пример.

 

bcf STATUS, RP0

Установка нулевого банка

bcf STATUS, RP1

 

btfss SSPSTAT, BF

Обращение к регистру из банка 1, с ад-

 

ресом 0х94

В этом случае MPLAB не выдаст сообщения об ошибке, но обращаться будет к регистру SSPCON, расположенному в банке 0 и имеющему адрес 0х14. Более того, в окне «Program Memory Window» MPLAB всегда отображает регистры 0-го банка независимо от выбранного банка памяти.

В-четвертых, при моделировании передачи, этот процесс начинается с записи байта в регистр SSPBUF. А вот сдвиг начинает происходить при выполнении ЛЮБОЙ следующей команды, размещенной за командой записи передаваемого байта в SSPBUF. При этом старший бит появляется на выходе RC5 и т.д. Сдвиг на один разряд на выходе RC5 в среде происходит при выполнении эмуля-

тором одной команды в теле ПО. Все выполняемые команды соответствуют одному сдвигу (на один такт) за исключением команд goto, call, retlw,return

(при их выполнении сдвиг осуществляется на 2 бита). Таким образом, для моделирования сдвига можно после команды movwf SSPBUF ввести в тело ПО 8 пустых команд nop, что при их «выполнении» проанализировать состояние RC5. Другими словами, выполнение команды movwf SSPBUF не приводит к началу сдвига. Если при моделировании передачи на вход RC4 (SDI) ничего не подавать, регистр SSPSR будет заполняться нулями, имитируя прием данных и вызывая соответствующую реакцию BF=1.

В-пятых, при моделировании приема нужно учитывать два фактора:

- прием данных (даже при их отсутствии на входе RC4) начнется только после записи передаваемого байта в регистр в SSPBUF;

- «появление» сигналов на входе SDI (RC4) осуществляется тоже только после выполнения 1-2 команд (обычно nop) в теле ПО (по обычным правилам эмуляции сигналов на входах портов: Debug-Simulator StimulusAsynchronous Stimulus...), только тогда ПО «увидит» это сигнал на контакте RC4.

Поэтому ввод сигнала на RC4 надо осуществлять ДО начала приема данных

модуле SPI и, оставляя его постоянным, анализировать его сдвиг в регистре

SSPSR. При необходимости изменения битов на входе RC4 приходиться мириться с тем, что неминуемо произойдет 1-2 «ненужных» сдвига (а соответственно и приема старых сигналов с входа RC4, пока эмулятор не «увидит» новые значения сигналов на этом контакте) во время внесения изменений на RC4.

В заключение напомним, что правильно сконфигурированный и вовремя включаемый модуль SPI в моделировании не нуждается.

14.3.1.2 Пример ПО для взаимодействия микроконтроллера PIC 16F877 с микросхемой EEPROM типа 25C04

А. Особенности архитектуры микросхемы 25C04

Как уже отмечалось выше, при взаимодействие мастер-контроллера с подчиненным устройством по SPI интерфейсу, некоторые элементы логического протокола (рис. 139) обмена данными заложены в формате управляющих сигналов самого аппаратного интерфейса. Однако, битовая структура команд, данных, временных интервалов и т.д. определяется типом подчиненного устройства. Причем, поскольку эти форматы несовместимы между собой, к SPI магистрали

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]