Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Нужна помощь по SPI |
Автор: msreds 13.5.2014, 07:54 |
Здравствуйте! Нужна помощь по SPI, не могу реализовать передачу хотя бы одного бита хоть ты тресни:( Работаю в AtmelStudio 6.1, МК Atmega328p 2шт.... |
Автор: Romikgy 13.5.2014, 08:34 |
без исходных кодов никто не поможет ... и немного не в той теме пост |
Автор: Toyamatokanava 13.5.2014, 09:39 |
Если расскажите по подробней, томожно будет помочь. |
Автор: msreds 13.5.2014, 09:56 |
Toyamatokanava, #include <pololu/3pi.h> #define SPI_PORTX PORTB #define SPI_DDRX DDRB #define SPI_MISO 4 #define SPI_MOSI 3 #define SPI_SCK 5 #define SPI_SS 2 void SPI_MasterInit(void) { /* Установка MOSI и SCK на вывод, все остальные на ввод */ DDRB = (1«DDB3)|(1«DDB5); /* Разрешение SPI в режиме мастера, установка скорости связи fck/16 */SPCR = (1«SPE)|(1«MSTR)|(1«SPR0); } void atata() { } void SPI_MasterTransmit(char cData) { /* Запуск передачи данных */ SPDR = cData; /* Ожидание завершения передачи данных */ while(!(SPSR & (1«SPIF))); } /*инициализация SPI модуля в режиме master*/ int main() { atata(); //SPI_MasterInit(); } из этого надо сделать рабочую передачу байта/бита/чего угодно |
Автор: bsa 13.5.2014, 10:58 | ||
Я использую следующий код:
Сессия выглядит следующим образом: spiOpen(); spiSend(); spiRecv(); ... ; spiClose(); |
Автор: borisbn 13.5.2014, 13:28 | ||
Господа, а разве для SPI я не должен сам "махать" clock'ом, защёлкой и данными ? Как-то доводилось работать с SPI через плату на PCI, которая тупо транслировала мои данные в SPI. Там мне нужно было делать как-то так:
Если этот ваш SPDR такой умный, что сам всё это делает, то тогда простите, что влез )) |
Автор: LeonidPr 13.5.2014, 13:33 |
не, сейчас не нужно махать. кидаете данные в регистр передачи, а дальше модуль SPI сам все разрулит. если прерывания настроены еще и обрабочик дернет, давай мол че там дальше? ![]() |
Автор: bsa 13.5.2014, 14:02 |
Он не умный. Это всего лишь SPi Data Register. ![]() |
Автор: msreds 14.5.2014, 09:31 |
bsa, что такое "&= ~" в 10 строке? моя программа совсем не катит? мне в итоге надо нажать кнопку на одном устройстве, а работу должно начать другое)) |
Автор: Toyamatokanava 14.5.2014, 09:54 | ||
|
Автор: msreds 14.5.2014, 10:03 |
передача ведь идёт через B3, почему его нет вообще?) |
Автор: msreds 15.5.2014, 05:44 |
Не мог бы ты поделиться ещё приёмом?)) |
Автор: bsa 15.5.2014, 10:24 |
каким? |
Автор: bsa 19.5.2014, 09:56 |
msreds, ты уверен, что у тебя проблема именно в spi, а не в устройствах к нему подключенных. Осциллографом проверь. |