Последовательный периферийный интерфейс - SPI
Функциональная схема интерфейса SPI
Внешнее соединение ведущего (мастера) и подчиненного SPI
Если работа SPI разрешена, то разрешается альтернативное направление выводов MOSI, MISO, SCK и SS (см. таблицу А). Таблица А. – Направление выводов 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; }
Электрические характеристики (напряжение питания: +5V ±5%; частота выборки – 75 кГц, тактовая частота – 4 МГц (половина рабочего цикла); MAX187 – опорное напряжение - 4.096V (обеспечивается конденсатором 4,7 МкФ на ножку REF) )
[1] В примере предполагается, что подключен файл специфических заголовков. [2] В примере предполагается, что подключен файл специфических заголовков.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (777)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |