|
Приветствую.
Упорно продолжаю воевать с 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