![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Функциональная схема интерфейса SPI
Внешнее соединение ведущего (мастера) и подчиненного SPI
Если работа SPI разрешена, то разрешается альтернативное направление выводов MOSI, MISO, SCK и SS (см. таблицу А).
Таблица А. – Направление выводов SPI
Вывод | Направление для ведущего SPI | Направление для подчиненного SPI |
MOSI | Определяется пользователем | Вход |
MISO | Вход | Определяется пользователем |
SCK | Определяется пользователем | Вход |
SS | Определяется пользователем | Вход |
Примечание:
В следующих примерах показаны инициализация 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 как подчиненного и как выполнить простой прием данных.
Дата публикования: 2015-09-18; Прочитано: 261 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!