Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опять про SPI для ATmega
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Vladimir_T
Перечел документацию и ранние посты на данную тему и уяснил:
1) Что приемник SPI в процессоре не формирует прерывание после приема символа;
2) Активизируются по SS только интерфесные линии;
3) Пусть для генерирования внешнего прерывания для MCU сигнал SS заведу еще и на INTx, тогда по заднему фронту SS будет вырабатываться вн. прерывание и смогу вычитывать содержимое из SPDR.

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

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

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

Видимо нужно конфигурировать SPI мастером, а когда по SS появляется сигнал, то мастер принимая это как обращение к себе самому переключается в Slave и устанавливается флаг прерывания SPIF. И тогда это прерывание уже будет от приемника !!! А это, то что и нужно. Это в документации нашел при ее перечитывании. Должно получиться?
WHALE
– 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лэйв.
Vladimir_T
Одинаково прерывание возникает как в мастере,так и в слэйве по окончании операции приёма/передачи байта. Одинаково возникает как в мастере,так и в слэйве по окончании операции приёма/передачи байта.
Я ведь с Вами согласен и считал, что именно так и должно работать, но от мастера есть прерывание, а от приемника нет?! Что может быть??
=GM=
Цитата(Vladimir_T @ Oct 6 2006, 08:25) *
Нет в ATmega прерывания от приемника SPI !!!

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

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

Должно. Этот режим используется, если инициатором передачи может быть любой МК. Не забывайте поставить опять режим мастера, поскольку мастер переключается в слейв и там и остается.
Vladimir_T
Спасибо за содействие, удалось справиться. Конечно, же все работает как описано в документации и пояснено выше. Проблема была в том, что мастер слал байты без задержек, быстрым потоком, видимо приемник не успевал принять. С короткими посылками нормализовалось.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.