ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
18275
alex_m (09.12.2004 08:40, просмотров: 3500)
SPI-slave, передача данных Приветствую. Упорно продолжаю воевать с SPI :) Пытаюсь последовательно передать 8 байт (в непрерывном режиме). В симуляторе все обкатал досконально, прошелся дебаггером, глядя на регистры. Все должно работать, IMHO :) А на самом чипе - ни хрена :) Мастер, принимая от меня данные выводит их на экран, и там получается ерунда, то есть совсем не то что ожидалось. Байты приходят, но какие-то неправильные.. Чип atmega162, частота 8МГц. Вроде бы логика кода правильная, так мне думается. В чем же тогда может быть дело?

char *data = "123456780";
...

/*
	SPI init
	Mode: slave
	MISO: output
	MOSI: input
	SS: input
	SCK: input
*/
void SPI_SlaveInit(void)
{
	DDRB = (1 << PB6);
	SPCR = (1 << SPIE) | (1 << SPE); // slave and enable SPI
	
	PORTB |= (1 << PB6);
}

void SPI_SendByte(unsigned cЕhar *data)
{
	SPDR = *data;
	while ( !(SPSR & (1 << SPIF)) )
		;
}

SIGNAL(SIG_SPI)
{
	char *t;

	t = data;
	while ( *data != 0 ) {
		SPI_SendByte(data);
		data++;
	}
	
	data = t;

	LED0_blink();
}


int main(void)
{
   sei();
   SPI_SlaveInit();
........
   return 1;
}