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

Глава 14

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

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

Микросхема репрограммируемого ПЗУ с электрическим стиранием типа

25С040 имеет:

-общий объем памяти 4 Кбита с байтовой организацией выборки и соот-

ветственно содержит 512 байт;

-страничную организацию памяти в виде 32 страниц по 16 байт каждая, однако, выбора номера страницы при адресации конкретной ячейки НЕ требуется. Адресация при записи и чтении автоматически осуществляется в пределах одной страницы, начиная с выбранного начального адреса (см. описание команд записи и чтения);

STATUS

 

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

X

X

X

X

BP1

BP0

WEL

WIP

 

 

 

 

 

 

 

 

 

 

 

Управляющие биты выбора областей памяти защищенных от записи

 

BP1

BP0

Запрещена запись

 

 

 

 

 

 

 

0

0

Разрешена везде

 

 

 

 

Выше ¼ адресного про-

 

 

 

 

 

 

0

1

странства

 

 

(0х 180 - 0х 1FF)

 

 

 

 

 

 

 

 

Выше ½ адресного про-

 

 

 

 

 

 

1

0

странства

 

 

(0х 100 - 0х 1FF)

 

 

 

 

 

 

 

 

 

 

 

1

1

Запрещена везде

 

 

 

 

 

 

бит состояния «замка защиты»: WEL = 1, разрешена запись как в микросхему памяти (в ее незащищенные области), так и в регистр статуса, осуществляемая командой WRSR (см. ниже);

WEL = 0, ЛЮБАЯ запись запрещена

индикатор состояния микросхемы: WIP = 1, микросхема находится в процессе записи;

WIP = 0, запись окончена, микросхема в режиме хранения

Рис. 145 Структура и назначение битов регистра статуса микросхемы 25C04

-разрядность шины адреса – 9 разрядов: А8 – А0 (29 = 512), диапазон адресов 0х 000 – 0х 1FF;

-стандартный (рис. 138) 4-х проводной SPI интерфейс с возможностью только ведомого (slave) режима для связи с мастер-контроллером с низким активным уровнем включения/выключения микросхемы. При этом, прием данных

по своему входу SDI микросхема осуществляет при CS=0 по ПОЛОЖИТЕЛЬНОМУ (из «0» в «1») перепаду сигнала SCK, а передачу – по ОТРИЦАТЕЛЬНОМУ (из «1» в «0») перепаду сигнала SCK). При отсутствии передачи (т.е. в режиме ожидания или приема) выход SDO переходит в высокоимпедансное состояние. Рекомендуемая частота импульсов SCK – 250 кГц;

-специальный встроенный механизм защиты от случайной записи, называемый «замком записи» и соответственно специальный регистр статуса, отображающий текущее состояние «замка» и управляющий объемом разрешенной для записи области памяти микросхемы;

-как и любое другое программируемое цифровое устройство, микросхема памяти имеет свой набор команд, выполняя которые она взаимодействует с мас- тер-контроллером (и от которого она их получает). Фактически, можно сказать, что микросхема 25С04 имеет встроенный SPI модуль, но его работой управляет не только она сама, но и мастер-контроллер. Команды (см. сл. п.) представляют собой 8-ми разрядные слова, имеющие для удобства запоминания мнемонические имена.

Наличие в составе микросхемы специального управляющего регистра связано с сознательным усложнением механизма записи данных в РПЗУ, по сравнению с микросхемами ОЗУ, для исключения случайной или ошибочной записи. Структура регистра статуса представлена на рис. 145. Рассмотрим назначение его битов.

WIP – бит (доступен только для чтения) индикации текущего режима работы микросхемы памяти. При нахождении микросхемы в режиме записи байта (это так называемый цикл записи) она устанавливает этот бит в WIP=1. После окончания записи микросхема памяти автоматически устанавливает этот бит в

«0».

WEL – бит (доступен для чтения/записи) текущего состояния «замка защиты от записи»:

-при WEL=1 разрешены ВСЕ ВИДЫ ЗАПИСИ: как в микросхему (в незащищенные битами BP0-BP1 области памяти), так и в регистр статуса;

-при WEL=0 запись запрещена как во все области памяти микросхемы, так

ирегистр статуса. В защищенные битами BP0-BP1 области, запись даже при WEL=1 – запрещена!

Следует иметь в виду, что бит WEL является не только индикатором, но и управляющим битом. Но, учитывая, что он разрешает/запрещает запись в регистр где находится сам, устанавливается в «1» он ТОЛЬКО специальной командой WREN, сбрасывается в «0» также специальной командой WRDI (см. ниже). Он управляет (открывает, т.е. разрешает запись и закрывает, т.е. запрещает ее) состоянием «замка защиты от записи». Перед осуществлением любой операции записи необходимо установить WEL=1 (командой WREN).

BP1, BP0 – биты выбора размера защищенной ПРИ ЛЮБЫХ УСЛОВИЯХ от записи области памяти микросхемы. Биты устанавливаются командой записи в регистр STATUS-а: WRSR (при наличии разрешения WEL=1) и позволяют варьировать размер защищаемой области в соответствие с рис. 145. Особенностями этих разрядов является то, что они являются энергонезависимыми, т.е.

сохраняют ранее записанное в них значение в предыдущем цикле работы с микросхемой, поэтому перед началом нового цикла работы с микросхемой желательно прочитать их текущее состояние (командой RDSR) и при необходимости переустановить (команда WRSR). Состояния битов BP1-BP1 также необходимо установить ПЕРЕД осуществлением записи в микросхему памяти (как правило, BP1=BP0=0 для полного доступа ко всем 512 байтам микросхемы).

Б. Система команд и режимы работы микросхемы 25C04

Рассматриваемая микросхема РПЗУ кроме стандартных режимов работы (чтение, запись, свойственных микросхемам ОЗУ) имеет и некоторые дополнительные, не свойственные микросхемам ОЗУ. Учитывая, что управление и перевод микросхемы из одного режима в другой осуществляет мастер-контроллер, отправляя ей по SPI-шине команды, они часто называются инструкциями. В Таблице № 11 приведены команды-инструкции, получив которые микросхемы памяти 25С040 переходят из одного режима работы в другой.

 

 

 

 

Таблица № 11

 

 

 

Команды микросхемы 25С04

 

 

 

 

Команда

Формат

 

Описание

 

 

 

 

 

READ

0000

A8011

 

Чтение данных из памяти, начиная с выбранного на-

 

 

 

 

чального адреса

WRITE

0000

A8010

 

Запись данных в память, начиная с выбранного на-

 

 

 

 

чального адреса

WRDI

0000

0100

 

Сброс бита WEL в 0 (запись запрещена)

WREN

0000

0110

 

Установка бита WEL в 1 (запись разрешена)

RDSR

0000

0101

 

Чтение текущего состояния регистра статуса

WRSR

0000

0001

 

Запись битов BP1, BP0 в регистр статуса

Команда READ является стандартной командой для микросхем памяти, однако для микросхемы 25С040 данная команда имеет некоторые особенности. На рис. 146 приведены последовательности сигналов, которые должен сформировать мастер-контроллер на шине SPI, и ответы на них микросхемы памяти. Их взаимодействие должно осуществляться следующим образом:

-контроллер «выбирает» микросхему путем установки на своем выходе CS (точнее на соответствующем выходе порта, соединенном с входом CS микросхемы) уровня «0»;

-контроллер (путем записи в SSPBUF) формирует на своем выходе SCK, соединенном с входом SCK микросхемы памяти, синхроимпульсы, а на выходе

SDO байт 0000А8011 (являющийся командой чтения для микросхемы памяти), затем выдерживает ПАУЗУ, связанную с тем, что для передачи адреса этот байт мастеру надо записать в SSPBUF, на что «тратятся» команды (по 4 или 8 импульсов SCK). Этой «задержки» микросхема памяти «не замечает», т.к. на это

CS

SCK

SDI

SDO

команда

 

начальный адрес

 

 

 

определяется ПО контроллера

данные из ПЗУ

высокоимпедансное состояние

Рис. 146 Сигналы на SPI-шине в режиме чтения на контактах микросхемы

25C04 (команда READ)

время мастер «выключает» импульсы SCK, а без них slave ничего «делать не может». На рис. 146 эта пауза не показана. Затем мастер аналогично формирует байт начального адреса (начиная со СТАРШЕГО БИТА), начиная с которого требуется прочитать, записанный по этому адресу, байт данных. Особенностью является тот факт, что старшим 9-м битом этого адреса служит бит А8 (Рис. 146), расположенный в байте переданной ранее команды чтения и позволяющий адресовать все 512 ячеек ПЗУ;

-приняв эти два байта на своем входе SDI, микросхема памяти «перестает»

втечение 8 следующих импульсов SCK «обращать внимание» на сигналы по входу SDI и на своем выходе SDO (который до этого находился в высокоимпедансном состоянии) начинает формировать в последовательном коде (начиная со СТАРШЕГО БИТА) байт данных, который располагается в ней по указанному адресу. После этого микросхема автоматически переходит в режим ожидания следующих команд от контроллера;

-приняв этот байт по своему входу SDI мастер-контроллер помещает его в регистр SSPBUF для дальнейшей обработки;

-контроллер выключает микросхему памяти, путем формирования CS=1. Еще одной особенностью выполнения микросхемой памяти команды чте-

ния является тот факт, что если продолжать удерживать микросхему памяти в активном состоянии (CS=0 и продолжать подавать на нее синхроимпульсы SCK), то она автоматически продолжит выдавать на выход SDO байты данных, расположенные по следующим (за начальным) адресам. Внутренний счетчик адреса микросхемы будет увеличивать выбираемый адрес на единицу с каждым выданным байтом до достижения последнего адреса 1FF «не обращая внимания» на мастер-контроллер и без всякого запроса с его стороны. Поэтому адрес на рис.146 и называется начальным. При достижении счетчиком адреса максимального значения выдача данных из памяти будет продолжаться циклически, начиная с адреса 0000, фактически неуправляемо. Таким образом, для управления процессом остановки чтения (например, для того чтобы прочитать только один или несколько байт) необходимо использовать сигнал CS, выставляя его CS=1 в момент, когда нужно остановить процесс чтения. На практике это делается пу-

тем оформления алгоритма чтения (и записи) в виде отдельной вызываемой процедуры.

Команда WRITE также является стандартной командой микросхем памяти, однако для микросхемы 25С040 данная команда также имеет свои особенности. На рис. 147 приведены последовательности сигналов, которые должен сформировать контроллер на шине SPI, и ответ на них микросхемы памяти. Их взаимодействие должно осуществляться в следующей ОБЯЗАТЕЛЬНОЙ после-

СS

SCK

команда

 

начальный адрес

 

данные в ПЗУ

 

 

 

 

 

SDI

высокоимпедансное состояние

SDO

Рис. 147 Сигналы на SPI-шине в режиме записи на контактах микросхемы

25LC04 (команда WRITE)

довательности:

-сначала (перед выполнением команды записи) контроллер должен «открыть замок защиты от записи», путем отправки на микросхему памяти команды WREN (см. ниже описание команды на рис. 148) для установки бита WEL=1 в регистре статуса (эта процедура на рис. 147 не отражена);

-контроллер должен снять защиту с требуемых областей памяти, установив командой WRSR (см. ниже описание команды на рис. 151) требуемые значения битов BP1, BP0 в регистре статуса (эта процедура на рис. 147 также не отражена);

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

-контроллер «выбирает» микросхему путем установки на своем выходе CS (точнее на соответствующем выходе порта, соединенном с входом CS микросхемы) уровня «0»;

-контроллер (путем записи в SSPBUF) последовательно формирует на своем выходе SDO три байта (НЕ ВЫКЛЮЧАЯ по входу CS микросхему памяти):

сначала байт 0000А8010 (являющийся командой записи для микросхемы памяти), затем аналогично – байт начального адреса (начиная со СТАРШЕГО БИТА), начиная с которого требуется записать, отправляемый третьим, байт данных. Особенностью команды является тот факт, что старшим 9-м битом этого адреса яв-

ляется бит А8 (Рис. 147), расположенный в байте команды и позволяющий адресовать все 512 ячеек ПЗУ. Импульсы SCK как обычно начинают генерироваться пачками по 8 штук при записи в SSPBUF;

-приняв эти три байта на своем входе SDI, микросхема памяти ждет установки CS=1 для начала записи полученного байта данных по полученному ранее адресу;

-после этого контроллер должен ОБЯЗАТЕЛЬНО установить CS=1 и удерживать его в течении времени не меньшего чем время цикла записи. Это связано с существованием у микросхемы памяти так называемого внутреннего

времени цикла записи (обозначенного на рис. 147 как tWC ), т.е. интервала времени CS=1, в течение которого микросхема осуществляет физическую запись полученных байт в энергонезависимые ячейки. Между двумя последовательны-

ми командами записи должна быть пауза равная длительности цикла запи-

си CS=1 не менее 5мс. В течение этого времени микросхема памяти игнорирует все поступающие на нее команды, кроме команды чтения текущего состояния регистра статуса RDSR (разумеется, установив CS=0). Цикл записи должен

быть выдержан после любой операции записи WRITE, WRSR. Если не выполнить этих требований, операция записи осуществлена не будет. Прокон-

тролировать окончание цикла записи можно не только «просто ожидая» 5 мс, но

ипутем считывания (командой RDSR) и ожидания значения бита WIP=0 в регистре статуса. После установки CS=1 по окончании команды записи, бит WIP устанавливается в 1 (индицируя о начале процесса физической записи), а сбрасывается в 0 микросхемой памяти автоматически по окончании цикла записи.

Примечание: если перед этим этапом сохранить CS=0 (и продолжать подавать импульсы SCK), то можно аналогично осуществить запись еще 15 байт, но их адреса должны быть расположены в пределах одной и той же страницы памяти. Попытка записать 17-ый байт по адресу на следующей странице приведет к переполнению и сбросу в 0000 внутреннего счетчика адресов в микросхеме памяти и 17-й байт будет записан по нулевому адресу этой же страницы ПЗУ и т.д.

-После этого микросхема памяти автоматически переходит в режим ожидания следующих команд от контроллера. После осуществления цикла записи

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

Примечание: остальные при-

водимые ниже команды микросхемы памяти, формируются контролле- СS ром аналогично: инициализируется

микросхема памяти CS=0, байт ко-

SCK

 

 

манды записывается в регистр

 

 

 

 

SSPBUF, передается (принимается)

SDI

 

 

 

и т.д., поэтому в их описании при-

 

 

 

 

 

 

 

 

водятся лишь особенности, без опи-

 

 

 

SDO

 

высокоимпедансное состояние

 

сания последовательности действий

 

 

 

 

 

 

 

контроллера.

Рис. 148 Сигналы на SPI-шине в

Команда WREN устанавлива-

режиме WREN на контактах мик-

ет бит WEL в регистре статуса мик-

 

 

росхемы 25LC04

росхемы памяти в 1, «открывая за-

 

 

 

 

Рис. 149 Сигналы на SPI-шине в режиме WRDI на контактах микросхемы 25LC04
SDO
высокоимпедансное состояние
СS
SCK
SDI

мок защиты от записи» и разрешая ей выполнять команды записи в память WRITE, и в регистр статуса WRSR. Данная команда не является командой записи в регистр статуса, поэтому паузу tWC после выполнения команды выдерживать не надо. При включении питания WEL=0, по

окончании цикла записи бит также автоматически устанавливается в 0. Требуемые сигналы и последовательность их формирования контроллером, представлены на рис.

148.

Команда WRDI выполняет действия противоположные команде WREN. Она принудительно «закрывает замок защиты от записи», устанавливая WEL=0. На практике (несмотря на то, что «замок» после записи закрывается автоматически) эта команда обычно используется в конце работы с микросхемой памяти для корректности установки защиты от записи. Требуемые сигналы и последовательность их формирования контроллером, представлены на рис. 149. Данная команда также не является командой записи в регистр статуса, поэтому паузу tWC = 5 мс после ее вы-

полнения также вы-

 

 

 

 

 

 

 

 

держивать не надо.

 

 

 

 

 

 

 

 

 

Команда

SCK

 

 

 

 

RDSR осуществляет

 

 

 

 

 

 

 

 

 

 

 

команда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чтение текущего со-

 

 

 

 

 

 

 

 

SDI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стояния

 

регистра

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

байт текущего статуса

 

статуса

и передачу

 

 

высокоимпедансное состояние

 

 

 

 

 

 

 

 

 

 

 

SDO

 

 

 

 

 

 

 

 

 

 

 

его

в

 

мастер-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

контроллер.

Тре-

 

 

 

 

 

 

 

 

Рис. 150 Сигналы на SPI-шине в режиме RDSR на

буемые

сигналы и

последовательность

 

 

 

контактах микросхемы 25LC04

их

формирования

 

 

 

 

 

 

 

 

контроллером,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

представлены на рис. 150. Из него видно, что байт текущего состояния регистра статуса (в соответствие с рис. 145) начиная со СТАРШЕГО БИТА микросхема памяти возвращает, получив на своем входе SDI команду 00000101. Особенностью этой команды является то, что при ее использовании для контроля события WIP=0, (т.е. окончания цикла записи) микросхема памяти выполняет ее «не обращает внимания» на то, что цикл физической записи «внутри» микросхемы еще продолжается, т.е. фактически предыдущая команда еще не закончилась выполняться. RDSR - единственная «такая» команда.

Команда WRSR позволяет записать байт в регистр статуса, но изменяет только два его бита BP1 и BP0. Как и любая команда записи, она выполняется

только при наличии разрешения записи (WEL=1) и только с соблюдением вы-

держки

по-

 

 

 

 

 

 

 

 

 

 

 

 

СS

 

 

 

 

 

 

 

 

 

следующего

 

 

 

 

 

 

 

 

цикла

записи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tWC

(если

за

 

SCK

 

 

 

 

 

 

ней

 

следует

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

требуемый байт статуса

 

 

 

 

 

 

команда

 

еще

одна

ко-

 

 

 

 

 

 

 

 

 

 

SDI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

манда

записи,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

см.

описание

 

 

 

 

 

 

высокоимпедансное состояние

 

 

команды

 

 

SDO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WRITE). Тре-

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 151 Сигналы на SPI-шине в режиме WRSR на кон-

буемые сигна-

 

 

 

 

 

тактах микросхемы 25LC04

лы и последо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вательность

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

их формирования контроллером, представлены на рис. 151. Из него видно, что, выставив CS=0, контроллер последовательно формирует и отправляет на микросхему памяти байт команды и требуемый байт (значимыми в нем являются только 2-ой и 3-ий биты, см. рис. 145) состояния регистра статуса, который будет установлен в микросхеме по истечении времени цикла. После операции записи

WRSR должен быть выдержан цикл записи CS=1 в течение времени не менее 5 мс. Если не выполнить этих требований, операция записи осуществле-

на не будет. На рис. 151 это не отражено.

В. Блок-схема алгоритма и ПО для организации взаимодействия

PIC 16F877 и микросхемы 25C04

Постановка задачи: Разработать ПО для PIC контроллера 16F877, обеспечивающее циклическую (с частотой выполнения программы) реализацию:

 

 

 

 

 

 

 

 

- режима записи байта

 

 

 

 

 

 

 

 

0хАА в ячейку

с адресом

 

 

 

SDO (RC5)

 

SDI

 

 

 

16F877

 

 

 

 

0х55 РПЗУ типа 25C04;

 

 

 

 

 

 

 

- режима

считывания

 

 

SDI (RC4)

 

SDO

С04

 

 

 

 

 

записанной информации.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PIC

 

SCK (RC3)

 

SCK

25

 

Схема

соединения

 

 

 

 

 

 

контроллера с микросхемой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CS (RB2)

 

CS

 

 

приведена на рис. 152.

 

 

 

 

 

 

 

 

При разработке блок-

 

 

 

 

 

 

 

 

Рис. 152 Схема соединения PIC 16F877 c

схемы алгоритма необходи-

 

 

микросхемой памяти 25LC04

 

 

мо учесть следующие осо-

 

 

 

 

 

 

 

 

бенности:

 

 

 

 

 

 

 

 

 

 

- контроллер ВСЕГДА для управления микросхемой (в зависимости от ее режима работы) вначале отправляет по SPI интерфейсу 1-3 байта, а затем принимает ответный байт от микросхемы памяти;

- как для передачи, так и для приема в мастер-контроллере используется один и тот же регистр SSPBUF SPI интерфейса;

- генерация синхроимпульсов CSK осуществляется только во время передачи байта из регистра SSPSR.

Отсюда вытекает очевидный вывод, что целесообразно создать отдельную процедуру для передачи/приема одного байта, вызывая ее требуемое число раз для передачи сначала команды, затем адреса, и третий раз для приема, считывая содержимое регистра SSPBUF.

 

 

 

 

На рис. 153 приведена блок-схема

 

 

 

 

 

 

 

 

такой процедуры. Вначале

байт, кото-

 

Помещение передаваемого

 

 

 

рый требуется передать, через W поме-

 

байта через W в SSPBUF

 

 

 

щается в регистр SSPBUF. При этом ав-

 

 

 

 

 

 

 

 

томатически модуль SPI начинает его

 

 

 

 

передачу по выходу SDO. Если проце-

 

нет

 

 

дура используется только для передачи,

 

BF=1

то на этом ее функции заканчиваются и

 

 

 

 

 

 

по изменению бита BF, говорящего о

 

 

да

том, что процесс передачи закончен тре-

 

 

 

 

 

 

 

 

 

 

 

буется прочитать содержимое SSPBUF,

 

SSPBUF → W → РОН

 

 

 

но лишь для того чтобы сбросить бит BF

 

 

 

 

в 0 . Если же требуется принять байт от

 

 

 

 

 

Рис. 153 Блок-схема процеду-

микросхемы

он

может

поступить

 

только как

ответ

на

переданный кон-

 

ры передачи-приема одного

 

троллером байт команды), то процедура

 

байта c использованием SPI

 

вызывается еще один раз и, не обращая

 

 

магистрали

 

 

внимания на то, что повторно передает-

 

 

 

 

 

 

 

 

ся тот же самый байт, ожидается запол-

 

 

 

 

нение SSPSR по изменению бита BF, говорящее о приеме ответного байта от микросхемы. После этого принятый байт через W переписывается из SSPBUF в любой свободный РОН ОЗУ для хранения и дальнейшей обработки (бит BF при этом сбрасывается в 0 автоматически).

Ниже приведен исходный текст процедуры для передачи-приема одного байта (предварительно помещенного в регистр outbyte) c использованием SPI магистрали, имеющей имя output [15].

output

bсf STATUS, RP0 bсf STATUS, RP1 movf outbyte, W movwf SSPBUF

loop1

bsf STATUS, RP0 btfss SSPSTAT, BF

goto loop1

;имя процедуры передачи-приема одного байта по SPI интерфейсу

;выбор 0-го банка для обращения к расположенному там регистру outbyte, в котором хранится отправляемый байт

;пересылка содержимого регистра outbyte через W в SSPBUF (переключение банка памяти не требуется, т.к. SSPBUF также расположен в 0-м банке)

;метка начала передачи/приема, окончание которых контролируется по наступлению BF=1

;выбор 1-го банка для обращения к расположенному там регистру

SSPSTAT

;проверка окончены ли процессы приема передачи: если BF=1, то – да, и переходим чтению SSPBUF, если же BF=0, то продолжаем ожидать окончания передачи/приема

;передача/прием еще не закончены, поэтому возвращаемся для их продолжения

bcf STATUS, RP0

movf SSPBUF, W movwf rxdata

retlw 0

;выбор 0-го банка для обращения к расположенному там регистру

SSPBUF

;пересылка содержимого регистра SSPBUF через W в РОН rxdata для хранения и последующей обработки. Строго говоря, эти две команды нужны лишь в режиме приема, когда принятый и содержащийся в SSPBUF байт был отправлен микросхемой памяти. В режиме передачи они тоже выполняются, но только для сброса BF в 0 и корректности контроля передачи/приема следующего байта, но содержимое регистра rxdata в этом случае не используется.

;точка возврата из процедуры с записью константы в W

При анализе процедуры следует иметь в виду:

-перед ее выполнением модуль SPI должен быть предварительно сконфигурирован и включен;

-включение/выключение микросхемы памяти осуществляется выбором CS вне тела процедуры;

-предварительно в теле основной программы (см. ниже) приводятся директивы объявления имен используемых в процедуре регистров – outbyte, rxdata;

-в тело процедуры включены избыточные (т.к. они могут дублироваться в теле основной программы для включения/выключения других регистров из этих же банков) команды переключения страниц памяти для придания ей универсальности и возможности ее независимого использования в любом месте основной программы.

На рис. 154 приведена блок-схема ПО для реализации циклически повторяющихся режимов записи-чтения байта данных в и из РПЗУ. Учитывая, что алгоритм и соответственно блок-схема линейны, т.е. представляют совокупность последовательно выполняемых операций, приведем лишь особенности блок-

схемы:

-в теле блок-схемы не приводятся предварительные присваивания имен регистров и обязательные процедуры для выбора страниц памяти команд и сброса сторожевого таймера, необходимые при работе контроллера TTF (см. обязательную структуру ASM-файла для компиляции и исполнения в составе контроллера TTF 5.0 в «Методические указания к лаб. работам по курсу ПЦУ»). Работа блок-схемы начинается с метки start в исходном тексте);

-передача команд и прием данных от РПЗУ по SPI интерфейсу осуществляется путем вызова процедуры output (см. 153);

-передача команд в РПЗУ осуществляется в соответствие с их форматом (см. пункт Б настоящего параграфа);

-ожидание окончания цикла записи tWC (см. рис. 147) осуществляет двумя разными способами: после команды WRSR - путем формирования процедуры задержки 15 мс, а после команды WRITE - путем чтения командой RDSR бита WIP в регистре статуса РПЗУ и ожидания когда WIP станет равным 0.

Ниже приводится исходный текст ПО для организации чтения/записи одного байта данных из и в РПЗУ 25С04 с пошаговыми коммантариями.

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