|
SPI - непонянные моменты |
|
|
|
Nov 2 2006, 14:14
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Вот такая незадача: 1. Мега32 2. SPI, работающий по прерыванию в Slave режиме и только на прием 3. на порту В (там же где и SPI) висит ЖКИ, т.е. порт В перенастраивается на вывод. 4. Данные по SPI идут пакетами с интервалом в 40 мс. Алгоритм работы таков: Принимаем пакет, как только пакет принят, ждем паузу. Если пауза достигла 1 мс, выводис принятую информацию на ЖКИ. 1 мс пауза означает, что началась пауза между посылками не менее 40 мс. Процедура вывода на ЖКИ занимает 15 мс. Начинается функция записи данных в ЖКИ так: char DDRBx = DDRB; char PORTBx = PORTB; Далее идет переопределение направления портов, вывод данных, всякая муть... Заканчивается PORTB = PORTBx; DDRB = DDRBx;
После первого же вывода на ЖКИ SPI перестает работать - т.е. прерывания по приему не генерятся. В АВР СТУДИО отлаживаю при помощи JTAG ICE. После приема первого пакета, после вывода на дисплей, когда SPI затыкается, останавливаю программу, и вижу, что настройки SPI (регистры) в порядке, Порт В - DDRB - все как и должно быть - (РВ7 - SCK- прием, РВ6 - MISO - передача, РВ5 - MOSI - прием, РВ4 - SS - прием), а вот PINB4 (он же SS) видится, как "1". Т.е. как будто кто то SS перевел в "1". Но, тестер на ноге микросхемы видит "0"!!! Сто это может означать? Бред Студио? Что то засело в PINB регистре, хотя на физическом контакте ничего нет? Но при этом связь не идет! Поделитесь своими соображениями ПЛЗ!
|
|
|
|
|
 |
Ответов
|
Nov 2 2006, 14:45
|
Местный
  
Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788

|
Цитата(Sergio66 @ Nov 2 2006, 17:14)  Что то засело в PINB регистре, хотя на физическом контакте ничего нет? Ну положим физически регистра PINB просто нет. Там сначала (от пина) идет Latch а потом тригер (ресинхронизатор однако). То есть там ничего застрять не может.
|
|
|
|
|
Nov 2 2006, 15:04
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Цитата(klop @ Nov 2 2006, 18:45)  Цитата(Sergio66 @ Nov 2 2006, 17:14)  Что то засело в PINB регистре, хотя на физическом контакте ничего нет?
Ну положим физически регистра PINB просто нет. Там сначала (от пина) идет Latch а потом тригер (ресинхронизатор однако). То есть там ничего застрять не может. Вот и я так думаю, однако, как объяснить тот факт, что тестер видит "0", а СТУДИО - "1". Да и связь по SPI прекращается
|
|
|
|
|
Nov 2 2006, 15:37
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Sergio66 @ Nov 2 2006, 15:04)  Вот и я так думаю, однако, как объяснить тот факт, что тестер видит "0", а СТУДИО - "1". Да и связь по SPI прекращается Объяснение такое. В слейве у вас SS=0, чтобы можно было принимать данные. Когда вы переводите SPI из режима слейв в режим, SS должен быть 1, чтобы правильно работал мастер, он и выставляет 1. Если же SS у вас остается нулём, то мастер воспринимает это, как если бы другой мастер собирается что-то передать, возникает коллизия(:-(. На с.134 документа doc2503 описано, что надо сделать, чтобы избежать коллизии.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 2 2006, 15:45
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Цитата(=GM= @ Nov 2 2006, 19:37)  Цитата(Sergio66 @ Nov 2 2006, 15:04)  Вот и я так думаю, однако, как объяснить тот факт, что тестер видит "0", а СТУДИО - "1". Да и связь по SPI прекращается
Объяснение такое. В слейве у вас SS=0, чтобы можно было принимать данные. Когда вы переводите SPI из режима слейв в режим, SS должен быть 1, чтобы правильно работал мастер, он и выставляет 1. Если же SS у вас остается нулём, то мастер воспринимает это, как если бы другой мастер собирается что-то передать, возникает коллизия(:-(. На с.134 документа doc2503 описано, что надо сделать, чтобы избежать коллизии. Нет! нет никакого мастера! В качестве источника данных выступает просто сдвиговый регистр. Есть только СПИ слейв.
|
|
|
|
Сообщений в этой теме
Sergio66 SPI - непонянные моменты Nov 2 2006, 14:14   klop Цитата(=GM= @ Nov 2 2006, 18:37) Цитата(S... Nov 2 2006, 15:44    =GM= Цитата(Sergio66 @ Nov 2 2006, 15:45) Цита... Nov 2 2006, 17:24     Sergio66 Чудак-человек. Я ж не говорю, что на другой сторон... Nov 3 2006, 08:03 slog Читай http://www.gaw.ru/html.cgi/txt/doc/micros/av... Nov 2 2006, 15:19 $ilent А вы SPI выключаете после приёма, если нет - то от... Nov 3 2006, 07:42 Sergio66 Цитата($ilent @ Nov 3 2006, 11:42) А... Nov 3 2006, 11:26  $ilent Цитата(Sergio66 @ Nov 3 2006, 14:26) Есть... Nov 3 2006, 12:55   Sergio66 Цитата($ilent @ Nov 3 2006, 16:55) Е... Nov 3 2006, 13:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|