Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Применение > Микроконтроллеров > AVR

реклама

 




Мероприятия:




AVR320

Программный интерфейс SPI в режиме мастера

Отличительные особенности:

  • Производительность до 444 кбайт/сек. при тактовой частоте 10 МГц
  • Прямая поддержка записей больших блоков
  • Легко расширяется для нескольких подчиненных SPI-интерфейсов
  • Работает в режиме 0 SPI-интерфейса
  • 16-разрядные данные, легко преобразуемые к 8-разрядному формату
  • Не требует использования прерываний
  • Малое число задействованных регистров: всего необходимо три регистра (два в 8-разрядном режиме)
  • Малый размер кода: 35 слов, в т.ч. инициализация
  • Поддержка последовательных ЭСППЗУ AT25xxx производства Atmel

Введение

Стандарт синхронного периферийного интерфейса (SPI) наращивает свою популярность за счет возможности организации более быстродействующей связи по сравнению с двухпроводными интерфейсами, а также за счет использования меньшего числа элементов для реализации на кристалле полупроводника. Хотя многие мощные представители семейства AVR содержат полнофункциональный интерфейс SPI, в недорогие версии он не входит. В связи с этим, в данном документе описывается набор процедур, написанных на языке низкого уровня, реализующих программно протокол SPI в режиме мастера (связь под управлением AVR-микроконтроллера). Данная разработка может использоваться для организации доступа к последовательной памяти ЭСППЗУ семейства 25XXX производства Atmel, а также для связи с другими починенными интегральными схемами, например, с драйверами индикатора.

Пример подключения к AVR-микроконтроллера  подчиненного устройства (последовательное ЭСППЗУ)
Рисунок 1 – Пример подключения к AVR-микроконтроллера подчиненного устройства (последовательное ЭСППЗУ)

 Временная диаграмма интерфейса  SPI
Рисунок 2 – Временная диаграмма интерфейса SPI

Принцип действия SPI в режиме 0 подразумевает выполнение следующих условий:

  1. SCK = 0 в режиме холостого хода (Idle).
  2. Выход данных MOSI (из AVR) должен быть стабильным в течение определенного промежутка времени (tSETUP) перед нарастающим фронтом тактового сигнала SCK.
  3. Выход данных MISO (из подчиненного устройства) действительный после некоторого времени (tVALID) после падающего фронта тактового сигнала SCK.
  4. Первым всегда передается старший бит (MSB).

Рассматриваемые ниже процедуры написаны с учетом выполнения этих требований, а также особое внимание уделено граничным условиям, таким как tVALID и tSETUP. Данные временные параметры рассмотрены ниже.

Блок-схема интерфейса SPI в режиме мастера
Рисунок 3 – Блок-схема интерфейса SPI в режиме мастера

Описание подпрограмм

    init_spi: Данная процедура инициализирует линии SPI-порта. Используемые в процедуре макросы необходимо отредактировать, если используется не порт B. При необходимости также можно изменить линии SPI-порта в разделе программы Port Definition, задавая значения EQU для SCK, MOSI, MISO и NSS (нет выбора подчиненного устройства). Данная процедура не имеет ни входных, ни выходных данных.
    ena_spi: Данная процедура формирует SCK=0 перед установкой SS в активное состояние. Данная процедура не имеет ни входных, ни выходных данных.
    disa_spi: Данная процедура устанавливает SS=1 (неактивное состояние). Вызывается после завершения передачи последовательности для предотвращения сбоев в работе связи. Также не имеет ни входных, ни выходных данных.
    rw_spi: Данная процедура отправляет/принимает 8- или 16-разрядное слово данных в зависимости от изменения пользователем настроек в тексте программы. Она оставляет SCK=0 при выходе и не изменяет сигнал SS. Поэтому, при передаче посылок, состоящих из нескольких слов, допускается неоднократно вызвать эту процедура. Входные требования- данные для передачи spi_lo (и spi_hi в 16-разрядном формате) этой процедурой. При выходе из процедуры в этих же регистрах хранятся данные, принятые из подчиненного SPI-порта.

Преобразование к 8-разрядному формату

При необходимости использования 8-разрядного формата передаваемых слов требуется изменить всего 2 строки программы. Оба изменения касаются процедуры rw_spi. Первое – начальное значение счетчика бит необходимо изменить с 16 на 8, второе – строку “rol spi_hi” необходимо отделить в комментарий. Следует отметить, что в этом случае регистр spi_hi не нужен и в дальнейшем этой программой не используется и может быть задействован для других нужд.

Для повышения читабельности в код программы включены макросы. Принято, что линии порта В используются в качестве интерфейса SPI. Если используется другой порт, то в макросе в наименовании служебных регистров необходимо указать используемый порт. Используемые линии для 4 сигналов SPI-порта перечислены в разделе “PORT DEFINITIONS” как значения EQU и могут быть легко изменены.

Макрокоманда функции задержки требует дополнительного разъяснения. Для исключения необходимости применения дополнительных регистров данная процедура определяет второе назначение регистра TEMP, хранящего значение 5-разрядного счетчика, - измерение длительности SCK с высоким и низким уровнями. Последние данные хранятся в старших разрядах. За счет простого увеличения старших трех разрядов и определения переполнения можно задавать временные интервалы, не влияя на младшие 5 разрядов. Обратите внимание, что фактически выполняется операция вычитания вместо сложения. Конечный результат тот же, за исключением того, что флаг переноса C сброшен (чаще всего он установлен), когда значение старших трех бит изменяется из 7 в 0.

Временная диаграмма установки  и удержания данных
Рисунок 4 – Временная диаграмма установки и удержания данных

Задержка от обновления MOSI до нарастающего фронта SCK

Период задержки от обновления MOSI до нарастающего фронта SCK – критичный параметр, т.к. фактически это время установления данных (tSETUP) для подключенного периферийного устройства. В данной процедуре длительность времени установки – 2 цикла при изменении MOSI к низкому уровню и 3 цикла при изменении к высокому уровню. При тактовой частоте 10 МГц это время составляет 200-300 нс. Если требуются более длительные временные интервалы необходимо добавить NOPы непосредственно перед макрокомандой sck_hi.

Коэффициент заполнения импульса SCK

Выход SCK большинство времени цикла генерации сообщения находится в низком состоянии за счет пауз на установление уровней, при которых этот выход имеет низкий уровень. Для связи с периферийным устройством, способного работать на более высокой скорости, длительность верхнего уровня (tHILO) может быть уменьшена в соответствии с требованиями по минимальной длительности высокого уровня SCK.

При установке единичного значения на выполнение процедуры затрачивается приблизительно 22.5 цикла на каждый бит данных, а на генерацию высокого уровня SCK – ровно 4 цикла. При тактовой частоте микроконтроллера 10 МГц этим значениям соответствуют длительность высокого уровня SCK 400 нс и общая скорость связи до 444 кбайт/сек.

Длительность нахождения в низком состоянии определяется требованием периферийного устройства к параметру “Длительность подготовки данных на MISO после падающего фронта SCK“ (задержка на вывод данных подчиненным устройством) (tVALID). Если значение этой задержки установить равное 1, то в процедуре перед защелкиванием данных на MISO будет выполнено три такта задержки. По аналогии тактовой частоте 10 МГц соответствует период 300 нс, который может быть изменен для увеличения длительности задержки.

Документация:

  3 Kb Пример программы
  76 Kb Engl Исходный фаил

оказание юридических услуг




 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники