| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Мистическая проблема с SPI в atmega32
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.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
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.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
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,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от niXto
|
|
Ногу SS на выход и записать в нее 0
|
Если контроллер в режиме мастера, зачем это делать?
|
|
|
|
18.09.2011, 14:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,458
Сказал спасибо: 3,227
Сказали Спасибо 3,511 раз(а) в 2,392 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от Easyrider83
|
|
Если контроллер в режиме мастера, зачем это делать?
|
Если этот вывод будет сконфигурирован как вход и на нём появится низкий уровень, то блок SPI переключится в режим "ведомый". Если как выход - SPI будет только "ведущим".
|
|
|
|
18.09.2011, 14:56
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от ForcePoint
|
|
Если этот вывод будет сконфигурирован как вход и на нём появится низкий уровень, то блок SPI переключится в режим "ведомый". Если как выход - SPI будет только "ведущим".
|
Какое расточительство пинов.
|
|
|
|
18.09.2011, 15:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Не совсем так. В некоторых чипах (мега48ра, несколько десятков чипов из 1000-ной партии) даже если нога SS как выход и на ней чип устанавливает 1 - в некоторых случаях мастер может перепрыгнуть на слэйв. С чем это связано не ковырял, программа довольно сложная, переключения направления ноги или всего порта нет точно, но факт что на остальных 900 с лишним чипов это не вылазит
|
|
|
|
18.09.2011, 16:25
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Да, нелегко вам с AVR живется. Понимаю.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:58.
|
|