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

 
 
> [MEGA8] Проблема с SPI slave
dW2005
сообщение Nov 16 2016, 07:36
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 4-10-06
Пользователь №: 20 960



Доброго времени суток, возникла необходимость допилить уже существующий девайс на восьмой меге, добавив туда измерение времени с выдачей результата мастеру на ADUC836.
Проблема в том, что постоянно возникают коллизии при записи ответа в SPDR, пробовал добавлять на мастере задержки между отправляемыми байтами - безрезультатно.

Кусок кода мастера (с51) выглядит так:

CODE
set_spi_ss(1);
delay_ms(1);

// signature
cs = 'F';
EA = 0;
SPIDAT = cs;
while(ISPI == 0);
ISPI = 0;
b = SPIDAT;
EA=1;
spi_test[0] = b;
//mode
cs += 5;
EA=0;
SPIDAT = 5;
while(ISPI == 0);
ISPI = 0;
b = SPIDAT;
EA = 1;
spi_test[0] = b;

... (тут остальные байты пакета данных)

set_spi_ss(0);
delay_ms(1);


Код мастера отлажен и работает с данным девайсом (только на передачу), ЦАПом, флешкой. Полярность/фаза у обоих естественно те же самые.

Код slave'a (avrgcc) покамест вообще обрезал до безобразия, убрав запись в буфер/проверку SPCR на коллизии, оставив только "голый" ответ:

CODE
void SPI_SlaveInit(void)
{
DDRB=(1<<PINB4) | (BIT(0)) | (BIT(1)); //MISO as OUTPUT
SPCR=(1<<SPE)|(1<<SPIE); //Enable SPI && interrupt enable bit
SPDR=0x88;
}

ISR (SPI_STC_vect)
{
UCHAR c = SPDR;
SPDR = 0x55; // that's what i'm trying to send back
}



В свое время делал подобный обмен по SPI на 8051-совместимых и STM32, подобных проблем не вылезало sad.gif.
Буду премного благодарен за любой пинок в нужном направлении.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dW2005
сообщение Nov 18 2016, 11:33
Сообщение #2





Группа: Участник
Сообщений: 5
Регистрация: 4-10-06
Пользователь №: 20 960



@ivn ->Чип менять пробовал (есть 2 идентичные платы)

@k155la3 -> 1) буферизация есть, во всяком случае если верить даташиту:

Цитата
The system is single buffered in the transmit direction and double buffered in the receive direction.
This means that bytes to be transmitted cannot be written to the SPI Data Register before
the entire shift cycle is completed. When receiving data, however, a received character must be
read from the SPI Data Register before the next character has been completely shifted in. Otherwise,
the first byte is lost.


Другой вопрос что если верить тому же даташиту, можно пихать данные в SPDR даже перед чтением очередного пришедшего байта, на практике этого как-то не видно.

(2) До прихода 2 недели назад некоего студиозуса для прохождения практики ассортимент всякой измерительно-аналитической техники был побольше. К сожалению сей талантливый индивид за неделю каким-то образом ухайдохал осциллограф цифровой обычный - одна штука, старенький осциллограф-примочка к РС Disco - одна штука и мультиметр - одна штука. Судя по выгоревшему в последнем предохранителю, не обошлось без ~220v.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dW2005   [MEGA8] Проблема с SPI slave   Nov 16 2016, 07:36
- - Genadi Zawidowski   А почему в мастере дожидаетесь передачи не после в...   Nov 16 2016, 07:50
|- - dW2005   Цитата(Genadi Zawidowski @ Nov 16 2016, 10...   Nov 16 2016, 08:12
- - aiwa   Полярность сигнала SS "наоборот". Провер...   Nov 16 2016, 17:49
|- - dW2005   Цитата(aiwa @ Nov 16 2016, 20:49) Полярно...   Nov 17 2016, 09:26
- - aiwa   Частота SPI не должна превышать четверть частоты м...   Nov 17 2016, 13:35
- - k155la3   Проверьте соответствие кол-во байт в запросе масте...   Nov 17 2016, 15:36
- - dW2005   В меге SPI interrupt у слейва возникает после прие...   Nov 17 2016, 17:02
|- - k155la3   Цитата(dW2005 @ Nov 17 2016, 20:02) (1) В...   Nov 18 2016, 07:20
- - ivn   Попробуйте поменять чип. У меня был случай в гото...   Nov 18 2016, 06:37
- - ILYAUL   Вам бы почитать как Mega работает как слейв и Вы б...   Nov 18 2016, 18:47
- - aiwa   Цитата(dW2005 @ Nov 18 2016, 14:33) Друго...   Nov 20 2016, 01:12
- - ivn   По моему мнению, если с железом все ОК, то ошибка ...   Nov 21 2016, 08:52


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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 13:30
Рейтинг@Mail.ru


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