| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Мистическая проблема с SPI в atmega32
18.09.2011, 18:34
|
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от niXto
|
|
Не совсем так. В некоторых чипах (мега48ра, несколько десятков чипов из 1000-ной партии) даже если нога SS как выход и на ней чип устанавливает 1 - в некоторых случаях мастер может перепрыгнуть на слэйв. С чем это связано не ковырял, программа довольно сложная, переключения направления ноги или всего порта нет точно, но факт что на остальных 900 с лишним чипов это не вылазит
|
хм, незнал, учту.
но, в протеусе с браком полегче
|
PHP код:
|
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// PORTB.4=1; //!!!!
GICR = 0; //disable INT0
spi_master_init();
SPDR = Aw; //на этой строке затыкается, SPDR write collision говорит
}
|
Последний раз редактировалось Solaris_M; 19.09.2011 в 05:18.
|
|
|
|
19.09.2011, 09:57
|
|
|
Гражданин KAZUS.RUN
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 611
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от Easyrider83
|
|
Да, нелегко вам с AVR живется. Понимаю.
|
У PICoв тоже полно похожих прелестей(не имею в виду конткретно SPI). Просто нужно в errate прописывать как особенность камня - и всё будет в ШОКОЛАДЕ
|
|
|
|
19.09.2011, 11:01
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от rubel
|
У PICoв тоже полно похожих прелестей(не имею в виду конткретно SPI). Просто нужно в errate прописывать как особенность камня - и всё будет в ШОКОЛАДЕ
|
Не встречал пока. С пиками пока придержал. Удалось урвать целую кучу камней STM32 в терраэлектронике.
Еще вот с LPC2xxx дело поимел. Работа с I2c мягко говоря заставила шевелиться волосы даже там, где их быть не может. Но в конце концов все получилось.
|
|
|
|
19.09.2011, 11:03
|
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
void spi_master_init()
{
DDRB = 0xB0;//sck,mosi,ss - output
SPCR=0x51;
#asm("cli")
SPCR = 0xFD;
#asm
in r30,spsr
in r30,spdr
#endasm
#asm("sei")
}
in r30,spsr
in r30,spdr
а зачем читать в один и тот же регистр ?
|
|
|
|
19.09.2011, 11:52
|
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от Solaris_M
|
хм, незнал, учту.
но, в протеусе с браком полегче
|
PHP код:
|
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// PORTB.4=1; //!!!!
GICR = 0; //disable INT0
spi_master_init();
SPDR = Aw; //на этой строке затыкается, SPDR write collision говорит
}
|
|
Это значит что вы записали в spdr что то и недождались передачи и опять туда записываете .
|
|
|
|
19.09.2011, 16:49
|
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от EugenPKH
|
|
Это значит что вы записали в spdr что то и недождались передачи и опять туда записываете .
|
Ну как бы да, но прежде ничего я туда не писал. Может с инициализацией проблема какая?
На пост выше, как я понял из даташита важна сама суть чтения регистра, данные интереса не представляют.
Последний раз редактировалось Solaris_M; 19.09.2011 в 17:05.
|
|
|
|
19.09.2011, 17:39
|
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Гм, вся мистика кончилась видимо тем, что протеус глючит, а в железе я выжег пин mosi, он же не должен звониться 150ом на землю в обе стороны?
Портировал =) проект на mega48, протеус опять ругается на spdr write collision, либо его глюк, либо есть какойто ньюанс.. В железе опробую завтра.
Последний раз редактировалось Solaris_M; 19.09.2011 в 20:36.
|
|
|
|
21.09.2011, 17:26
|
|
|
Частый гость
Регистрация: 19.07.2009
Сообщений: 39
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Код в железе работает. В протеусе также - spdr write collision.
Всем спасибо!
|
|
|
|
23.09.2011, 10:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от EugenPKH
|
in r30,spsr
in r30,spdr
а зачем читать в один и тот же регистр ?
|
Читаются два разных регистра. Если вы посмотрите описание SPI, то увидите. Что флаг принятого байта сбрасывается сначала чтением SPSR, а затем SPDR (статусного регистра, а затем регистра данных).
P.S. Это стандартный код, генерируемый CVAVR.
|
|
|
|
23.09.2011, 11:38
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Мистическая проблема с SPI в atmega32
Сообщение от Godzilla82
|
|
Читаются два разных регистра. Если вы посмотрите описание SPI, то увидите. Что флаг принятого байта сбрасывается сначала чтением SPSR, а затем SPDR (статусного регистра, а затем регистра данных).
|
Как-то интересно вы читаете документацию, этот флаг как и большинство остальных сбрасывается командой RETI обработчика прерывания. А с СПИ имеет смысл работать только на прерываниях
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:35.
|
|