реклама на сайте
подробности

 
 
> Опять про SPI для ATmega, Подскажите как реализовать Slave...
Vladimir_T
сообщение Oct 6 2006, 08:44
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Перечел документацию и ранние посты на данную тему и уяснил:
1) Что приемник SPI в процессоре не формирует прерывание после приема символа;
2) Активизируются по SS только интерфесные линии;
3) Пусть для генерирования внешнего прерывания для MCU сигнал SS заведу еще и на INTx, тогда по заднему фронту SS будет вырабатываться вн. прерывание и смогу вычитывать содержимое из SPDR.

Это будет работать?
Может есть более красивые решение организации прерывания по приему от SPI в ATmega?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
WHALE
сообщение Oct 6 2006, 09:08
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Vladimir_T @ Oct 6 2006, 12:44) *
Перечел документацию и ранние посты на данную тему и уяснил:
1) Что приемник SPI в процессоре не формирует прерывание после приема символа;
2) Активизируются по SS только интерфесные линии;
3) Пусть для генерирования внешнего прерывания для MCU сигнал SS заведу еще и на INTx, тогда по заднему фронту SS будет вырабатываться вн. прерывание и смогу вычитывать содержимое из SPDR.

Это будет работать?
Может есть более красивые решение организации прерывания по приему от SPI в ATmega?

Прием и передача идут в обе стороны,только инициатором является мастер,он-же выдает CLK.В мастере
по окончанию передачи символа,а в слэйве по приему формируется прерывание(если разрешены).
SS в слэйве нулем разрешена работа SPI,1 запрещается и сбрасывается счетчик битов.В мастере SS
на усмотрение программера.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Oct 6 2006, 09:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Нет в ATmega прерывания от приемника SPI !!!

Видимо нужно конфигурировать SPI мастером, а когда по SS появляется сигнал, то мастер принимая это как обращение к себе самому переключается в Slave и устанавливается флаг прерывания SPIF. И тогда это прерывание уже будет от приемника !!! А это, то что и нужно. Это в документации нашел при ее перечитывании. Должно получиться?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 6 2006, 10:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



– SPIF: SPI Interrupt Flag
When a serial transfer is complete, the SPIF Flag is set. An interrupt is generated if
SPIE in SPCR is set and global interrupts are enabled.
Одинаково возникает как в мастере,так и в слэйве по окончании операции приёма/передачи байта.
В слэйве по прерыванию читаем SPDR,мастер по прерывании может тоже читать SPDR и грузить в него
новое значение.
Это один вектор,работа отличается устанокой бита мастер/cлэйв.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Oct 6 2006, 10:32
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Одинаково прерывание возникает как в мастере,так и в слэйве по окончании операции приёма/передачи байта. Одинаково возникает как в мастере,так и в слэйве по окончании операции приёма/передачи байта.
Я ведь с Вами согласен и считал, что именно так и должно работать, но от мастера есть прерывание, а от приемника нет?! Что может быть??
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 6 2006, 10:46
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Vladimir_T @ Oct 6 2006, 08:25) *
Нет в ATmega прерывания от приемника SPI !!!

Если ATmega - ведущий (мастер), то нет прерывания от приемника, а если ATmega - ведомый (слейв), то будет прерывание после приема байта. Вам же КИТ-WHALE(:-) подробно ответил.

Цитата(Vladimir_T @ Oct 6 2006, 08:25) *
Видимо нужно конфигурировать SPI мастером, а когда по SS появляется сигнал, то мастер принимая это как обращение к себе самому переключается в Slave и устанавливается флаг прерывания SPIF. И тогда это прерывание уже будет от приемника !!! А это, то что и нужно. Это в документации нашел при ее перечитывании. Должно получиться?

Должно. Этот режим используется, если инициатором передачи может быть любой МК. Не забывайте поставить опять режим мастера, поскольку мастер переключается в слейв и там и остается.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Oct 6 2006, 14:05
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Спасибо за содействие, удалось справиться. Конечно, же все работает как описано в документации и пояснено выше. Проблема была в том, что мастер слал байты без задержек, быстрым потоком, видимо приемник не успевал принять. С короткими посылками нормализовалось.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016