Есть некое устройство (МАСТЕР) которое каждые 20 мс по SPI (частота SCK = 50кГц) посылает команду состоящую из 4-х байт:
[HEADER = 0x69] [СОСТОЯНИЕ 1] [СОСТОЯНИЕ 2] [КОНТРОЛЬНАЯ СУММА]
В моем устройстве, выполненном на LPC2366, эта команда поступает на интерфейс SSP0, который я настроил на режим SLAVE.
Код
SSP0CPSR = ...;
SSP0CR0 = 0x107; //8bit, SPI, CPOL=CPHA=0, SCR=1
install_irq(SSP0_INT, (void*)SSP0Handler, HIGHEST_PRIORITY);
SSP0CR1 = SSP0CR1_SSE|SSP0CR1_MS; //SSP enabled in slave mode
SSP0IMSC = 0x04; // Enable Receive Interrupt (RXIM only)
Прерывания от SSP срабатывают, однако сколько бы я не вычитывал SSP0DR, вычитывается только байт HEADER = 0x69, т.е весь массив bySpiData заполняется значениями 0x69
Код
volatile BYTE bySpiData[256];
volatile BYTE bySpiIndex = 0;
volatile DWORD dwSpiReceived = 0;
void SSP0Handler (void) __irq
{
while (SSP0MIS_RXMIS & SSP0MIS)
{
bySpiData[bySpiIndex++] = m_SSP0.Read() & 0xFF;
dwSpiReceived++;
}
VICVectAddr = 0; // Acknowledge Interrupt
}
Что я делаю не так?