Перейти к содержанию
    

SPI мега8- подглючивает

Снова я иду дальше, и наступаю на очередные грабли ;) Поэтому, обращаюсь к вам за помощью)

 

подключаю по SPI мегу 8 к Wiznet 5100.

 

вот две ф-ии, инициализацию сразу вызываю, а сам байт передаю во второй ф-ии

void WIZ_SPIInit() {      
  SPCR = (0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<< CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
  SPSR = (0<<SPI2X); // проинициализировал SPI в меге
}

uint8_t SPI_Exchg(uint8_t out) { // эту ф-ю вызываю для передачи и приема данных в SPI
      SPDR = out;
      while(!(SPSR &(1 << SPIF))); // ждем пока флаг окончания передачи встанет 
      
    return SPDR;
}

сама w5100 ведет себя не стабильно- то откликается, то нет. В общем, подглючивает.

подключил уже логич. анализатор на 3 ноги (MISO MOSI SCK), пытаюсь хотя бы просто послать байт в SPI, и смотрю его ЛА

for (;;) {
     uint8_t g = 37;
     SPI_Exchg (g);
     Delay (1000000);
   } // тест SPI

 

ЛА даже не дергается ??? Разве не должно на выходе MOSI, да и SCK быть дерготни? Когда прошиваю проц, то вижу импульсы, а потом через паузу шлю число в SPI - и глухо ???

 

На какие гарбли я на этот раз встал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На какие гарбли я на этот раз встал?

Трудно сказать (вы бы проект выкладывали, а то гадай что у вас забыто).

 

 

 

 

Порты SS, MOSI и SCK настроены как выходы?

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://files.mail.ru/3908264C4C254F048F8D47C221CB6F83

вот проект под IAR, если не затруднит, гляньте пож-ста.

 

ноги были как выходы настроены, но уже изменил на вход MISO- тоже не помогло.

 

А вообще, должно же просто в воздух выводиться значение по SPI?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#define WIZ_SCS                    PORTC, 3, H

        PORTC = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);            
        DDRC =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);

 

т.е. да

 

добавил вывод в консольку

   for (;;) {
     putString ("for   \r\n");
     uint8_t g = 37;
     SPI_Exchg (g);
     Delay (100000);
   } // тест SPI -удалить потом

так вот- вывело один раз for и все... т.е. где-то потерялось в ф-ии SPI.

 

пошел банально тестером контакты прозванивать...

прозвонил- все верно. я стою осциллом на 3-х ногах SPI

 

тупанул- забыл инициализацию вызвать WIZ_SPIInit ();

теперь шлет байт на выход.

 

только w5100 по-прежнему глючит ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы не используете свой SPI в режиме SLAVE, то SS должен быть сконфигурирован, как выход. Если SS вход, то в режиме MASTER необходимо обеспечить ему постоянно лог.1 Если SS-вход, подтяжка на плюс не установлена, то имеем на SS плавающий потенциал со всеми вытекающими. Отсюда глюки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...