С8051 - не могу одну фигню с SPI забороть... вот функция передачи байта
void spi_SendByte(BYTE b)
{
SFRPAGE = SPI0_PAGE;
SPI0CN &= 0x0F;
SPI0DAT = b;
while (!SPIF);
}
Накладные для подготовки передаваемого байта составляют порядка 50% от длительность передачи. Вот хорошо бы данные готовить пока предыдущий байт передаётся. Очевидное решение вот такое (флаг SPIF устанавливается только по окончании передачи либо по коллизии)
void spi_SendByte(BYTE b)
{
SFRPAGE = SPI0_PAGE;
while (!SPIF); // сюда переместил. перед передачей самого первого байта флаг взвожу ручками
SPI0CN &= 0x0F;
SPI0DAT = b;
}
И не работает! Сделал вдогонку обработку флага коллизий WCOL, флага занятости SPIBSY .. не работает и всё. Я в глаза долблюсь, что-то очевидное не замечаю?