Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
17.09.2011, 20:44
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Мистическая проблема с SPI в atmega32
atmega32 сконфигурирована как мастер. эмулирую в proteus 7.5sp3, при первой же попытке записи вываливается с ошибкой на spdr write collision, хотя с виду всё должно работать. в железе соответственно тоже не работает.
логика следующая - по прерывания на int0 программа конфигурирует порт на выход spi, потом выплёвывает байт, ловит прерывание по передаче, передаёт следующий.. и так 7 байт, потом порт обратно на вход.. и всё
компилятор CVAVR, в аттаче исходник
что скажете?
|
|
|
|
17.09.2011, 21:01
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: мистическая проблема с SPI в atmega32
в железе clock есть, но на mosi висит 0 уровень
|
|
|
|
17.09.2011, 21:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: мистическая проблема с SPI в atmega32
Сразу навскидку.
В прерывании SPI перед чтением SPDR надо сбросить флаг SPIF чтением SPSR. Автоматом он сбрасывается по выходу из прерывания.
Эта конструкция что-то не нравится...
ЛУТше CASE...
PHP код:
|
// SPI interrupt service routine interrupt [SPI_STC] void spi_isr(void) { unsigned char data; //PORTB.4=1; data=SPDR; if(counter==0) { Ar=data; counter++; SPDR = Bw; return; } if(counter==1) { ........ if(counter==6) { Gr=data; counter=0; spi_master_off(); return; } }
|
Также не понял необходимости жестко задавать регистр.
CV очень любит эти регистры, а Вы их заняли...
PHP код:
|
// Clear the SPI interrupt flag #asm in r30,spsr in r30,spdr #endasm
|
Последний раз редактировалось omercury; 17.09.2011 в 21:25.
|
|
|
|
17.09.2011, 22:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Ногу SS на выход и записать в нее 0
|
|
|
|
18.09.2011, 08:15
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
На конструкции switch/case переделал, нога SS уже была выходом(и судя по даташиту нет разницы в мастере в 0 или в 1). регистр r30 в сбрасывании прерывания мне предложил сам CVAVR в конструкторе кода.
в протеусе также SPDR write collision, в железе опробую чуть позже.
|
|
|
|
18.09.2011, 10:58
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от niXto
|
Ногу SS на выход и записать в нее 0
|
Если контроллер в режиме мастера, зачем это делать?
|
|
|
|
18.09.2011, 14:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от Easyrider83
|
Если контроллер в режиме мастера, зачем это делать?
|
Если этот вывод будет сконфигурирован как вход и на нём появится низкий уровень, то блок SPI переключится в режим "ведомый". Если как выход - SPI будет только "ведущим".
|
|
|
|
18.09.2011, 14:56
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от ForcePoint
|
Если этот вывод будет сконфигурирован как вход и на нём появится низкий уровень, то блок SPI переключится в режим "ведомый". Если как выход - SPI будет только "ведущим".
|
Какое расточительство пинов.
|
|
|
|
18.09.2011, 15:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Не совсем так. В некоторых чипах (мега48ра, несколько десятков чипов из 1000-ной партии) даже если нога SS как выход и на ней чип устанавливает 1 - в некоторых случаях мастер может перепрыгнуть на слэйв. С чем это связано не ковырял, программа довольно сложная, переключения направления ноги или всего порта нет точно, но факт что на остальных 900 с лишним чипов это не вылазит
|
|
|
|
18.09.2011, 16:25
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Да, нелегко вам с AVR живется. Понимаю.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:23.
|
|