Последовательный периферийный интерфейс - SPI

Функциональная схема интерфейса SPI

Последовательный периферийный интерфейс - SPI - student2.ru

Внешнее соединение ведущего (мастера) и подчиненного SPI

Последовательный периферийный интерфейс - SPI - student2.ru

Если работа SPI разрешена, то разрешается альтернативное направление выводов MOSI, MISO, SCK и SS (см. таблицу А).

Таблица А. – Направление выводов SPI

Вывод Направление для ведущего SPI Направление для подчиненного SPI
MOSI Определяется пользователем Вход
MISO Вход Определяется пользователем
SCK Определяется пользователем Вход
SS Определяется пользователем Вход

Примечание:

  1. См. "Альтернативные функции порта B", где подробно описано как установить направление на выводах порта SPI.

В следующих примерах показаны инициализация SPI как мастера и организация простой передачи данных. В данных примерах DDR_SPI должен быть заменен на имя фактического регистра направления данных, управляющий выводами интерфейса SPI (для ATmega128 DDRB). DD_MOSI, DD_MISO и DD_SCK также должны быть заменены на имена соответствующих бит регистров направления данных, связанных с этими выводами. Например, если MOSI размещен на выв. PB5, то DD_MOSI необходимо заменить на DDB5, а DDR_SPI на DDRB.

Пример кода на Ассемблере[1]

SPI_MasterInit:

; Установка MOSI и SCK на вывод, все остальные на ввод

ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)out DDR_SPI,r17

; Разрешение SPI в режиме мастера, установка скорости связи fck/16

ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)

out SPCR,r17

ret

SPI_MasterTransmit:

; Запуск передачи данных (r16)

out SPDR,r16

Wait_Transmit:

; Ожидание завершения передачи данных

sbis SPSR,SPIF

rjmp Wait_Transmit

ret

Пример кода на Си[2]

void SPI_MasterInit(void)

{

/* Установка MOSI и SCK на вывод, все остальные на ввод */

DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);

/* Разрешение SPI в режиме мастера, установка скорости связи fck/16

*/SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

}

void SPI_MasterTransmit(char cData)

{

/* Запуск передачи данных */

SPDR = cData;

/* Ожидание завершения передачи данных */

while(!(SPSR & (1<<SPIF)))

;

}

В следующем примере показано как инициализировать SPI как подчиненного и как выполнить простой прием данных.

Пример кода на Ассемблере

SPI_SlaveInit:

; Установка MISO на вывод и всех ост. на ввод

ldi r17,(1<<DD_MISO)

out DDR_SPI,r17

; Разрешение SPI

ldi r17,(1<<SPE)

out SPCR,r17

ret

SPI_SlaveReceive:

; Ожидание завершения передачи

sbis SPSR,SPIF

rjmp SPI_SlaveReceive

; Чтение принятых данных и выход из процедуры

in r16,SPDR

ret

Пример кода на Си

void SPI_SlaveInit(void)

{

/* Установка MISO на вывод и всех ост. на ввод */

DDR_SPI = (1<<DD_MISO);

/* Разрешение SPI */

SPCR = (1<<SPE);

}

char SPI_SlaveReceive(void)

{

/* Ожидание завершения передачи */

while(!(SPSR & (1<<SPIF)));

/* Чтение принятых данных и выход из процедуры */

return SPDR;

} Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Max187 – аналого-цифровой преобразователь Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Электрические характеристики

(напряжение питания: +5V ±5%; частота выборки – 75 кГц, тактовая частота – 4 МГц (половина рабочего цикла); MAX187 – опорное напряжение - 4.096V (обеспечивается конденсатором 4,7 МкФ на ножку REF) )

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru
Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

Последовательный периферийный интерфейс - SPI - student2.ru Последовательный периферийный интерфейс - SPI - student2.ru

[1] В примере предполагается, что подключен файл специфических заголовков.

[2] В примере предполагается, что подключен файл специфических заголовков.

Наши рекомендации