Atmega8, частота 500 кГц, аппаратный SPI, драйвер светодиодов MAX7219ENG, подключены линии MOSI, SCK, -SS, режим SPI - 0, прерывания не используются.
Код (IAR):
Код
void Init_Master (void)
{
volatile char IOReg;
// set PB2(/SS), PB3(MOSI), PB5(SCK) as output
DDRB = (1<<PB2)|(1<<PB3)|(1<<PB5);
PORTB = (1 << PB2);
// enable SPI in Master Mode with SCK = CK/4
SPCR = (1<<SPE)|(1<<MSTR);
IOReg = SPSR; // clear SPIF bit in SPSR А зачем вообще его
IOReg = SPDR; // сбрасывать, если я не использую прерывания?
}
/********************************/
void Master_Send (unsigned char Data)
{
SPDR = Data; // send Character
while (!(SPSR & (1<<SPIF))); // wait until Char is sent
Data = SPDR;
}
/********************************/
int main (void)
{
Init_Master (); // Initialization (polling)
while (1)
{
PORTB = (0 << 2);
Master_Send (0x0f); //команда "тест"
Master_Send (0x01);
PORTB = (1 << 2);
delay_ms(750);
PORTB = (0 << 2);
Master_Send (0x0f); //закончить тест
Master_Send (0x00);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x09); //выключить декодирование
Master_Send (0x00);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x0a); //яркость - на максимум
Master_Send (0xff);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x0b); //сканируем только 6 разрядов
Master_Send (0x05);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x01); //зажигаем 2-ю и 6-ю лампочку в первом октете
Master_Send (0x22);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x02); // ... 1-ю и 5-ю во втором
Master_Send (0x11);
PORTB = (1 << 2);
delay_ms(250);
PORTB = (0 << 2);
Master_Send (0x03); // все в третьем
Master_Send (0xff);
PORTB = (1 << 2);
delay_ms(750);
}
}
/*********************************/
Результат:
Тест светодиодов работает, команда 0x0f01 зажигает всю линейку на максимальной яркости и 0x0f00 гасит ее, на остальные команды реакции нет.
Картинка на выводах вроде идеальная: приведена для 0x0f01, но для остальных тоже красивая

Вопрос - почему не работают другие команды?
В даташите на MAX (объединенном на 7219 и 7221) указано, что отличие 7221 от 7219 в наличии полноценной поддержки SPI. То есть в 7219 SPI урезан? Интересно, в чем? может быть в этом :
Цитата
For the MAX7219, serial data at DIN, sent in 16-bit
packets, is shifted into the internal 16-bit shift register
with each rising edge of CLK regardless of the state of
LOAD.
Пробовал я этот LOAD не выключать после команды - вообще тогда MAX молчит.
Подскажите, где лажа?
Спасибо.