Мегаобучалка Главная | О нас | Обратная связь


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



2015-11-20 767 Обсуждений (0)
Последовательный периферийный интерфейс - SPI 0.00 из 5.00 0 оценок




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

 

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

 

Если работа 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;

}

 

Max187 – аналого-цифровой преобразователь

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

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




 


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

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



2015-11-20 767 Обсуждений (0)
Последовательный периферийный интерфейс - SPI 0.00 из 5.00 0 оценок









Обсуждение в статье: Последовательный периферийный интерфейс - SPI

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (767)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)