Устройство .NET Micro Framework (в данном случае ChipworkX) отправляет байт через интерфейс SPI в PIC18F. При включенном PIE1bits.SSPIE
при прерывании выполняется следующий код:
void high_isr (void)
{
PIE1bits.SSPIE = 0;
PIR1bits.SSPIF = 0; //Clear interrupt flag.
LATDbits.LATD5 = 1; //Enables LED for high interrupt activity.
while ( !SSPSTATbits.BF ); //Wait until cycle complete
red_byte_array[1] = SSPBUF;
SSPBUF = 0x00;
LATDbits.LATD5 = 0;
PIE1bits.SSPIE = 1;
}
При отправке одного и того же байта несколько раз данные не читаются последовательно. И ведущий, и подчиненный настроены на низкий уровень простоя часов и синхронизацию данных по переднему фронту. Я не использую линию выбора чипа, потому что это прямая связь. Наконец, мастер отправляет данные на частоте 100 кГц, в то время как PIC работает на частоте 8 МГц.
Как улучшить и/или исправить этот код?