Пишу SPI master для ATTINY26, делаю, прямо как написано в примере из даташита:
void write_spi(unsigned char data)
{
unsigned char tmp;
USIDR = data;
USISR |= 0x40; // clear interrupt flag
tmp = USICR | (1 << USITC) | (1 << USICLK) | (1 << USIOIE);
while ((USISR & 0x40) != 0x40) {
USICR = tmp;
}
}
SLK вижу, а DO - всякая фигня не соответствующая действительности. вернее, если data = 1 или 5, то ворде как нормально, а все остальное - прыгает и скачет как хочет. в чем проблема?
USICR изначально сконфигурен так:
// Universal Serial Interface initialization
// Mode: Three Wire (SPI)
// Clock source: Register & Counter=USICLK
// USI Counter Overflow Interrupt: Off
USICR=0x12;