SPI-slave на atmega162: передача данных
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено grab 10 декабря 2004 г. 05:10

Приветствую.

Упорно продолжаю воевать с SPI :) Пытаюсь передать 1 байт. В симуляторе все обкатал досконально, прошелся дебаггером, глядя на регистры. Все должно работать, IMHO :) А на самом чипе - ни хрена :)

Мастер, принимая от меня данные выводит их на экран (простая тестовая
программка, которая выводит на консоль принимаемые байты), и там получается ерунда, то есть совсем не то что ожидалось. Байты приходят, но какие-то неправильные.. Мастер реализован под линуксом, процессор au1550 (mips), частота задаваемая мастором 500khz

Все параметры (полярность, порядок передачи битов) на обоих сторонах
совпадают.

Проверил осциллографом, и по нему явно видно, что данные идут вовсе не те, которые я посылаю.

Чип atmega162, частота 8МГц.

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


...
volatile char *t_data = "1"; //код символа 0x31

// ISR for SPI
SIGNAL(SIG_SPI)
{
SPDR = *t_data;
....
}

int main(void)
{
SPI_SlaveInit();
sei();

SPDR = *t_data;

while (1)
{
...
}
return 1;
}

При выполнении такого кода вот что мастер выводит:

Read spi data : 0x01
Read spi data : 0x01
Read spi data : 0x01
Read spi data : 0x01
Read spi data : 0x01
Read spi data : 0x01
Read spi data : 0x01

Причем если reset-нуть атмегу, то сначала идут 0x00 0x00, затем 0x01 0x00 и опять сплошные 0x01 :)

Заранее благодарю и очень рассчитываю на дельный совет!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru