Argon (08.09.2007 18:06, просмотров: 170) ответил Argon на Новый результат: при группировке паузы между байтами сократились до 106 нс (длительность 2х бит)! Делаю опрос только флага опустошения TxFIFO на всю группу байт.
Глюкодром, блин... Фраза об SPI из даташита на LPC2103 "8-frame FIFOs for both transmit and receive" явно говорит о двух раздельных 8-элементных FIFO для приемника и передатчика.
В регистре статуса SSPSR есть бит RNE: Receive FIFO Not Empty. This bit is 0 if the Receive FIFO is empty, 1 if not.
Делаю:
<c>
SSP_RxFIFO_Clear(); //очистка буфера приема SSP, Здесь просто 8 чтений SSPDR
//отправляю 8 байт наружу
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
SSPDR = 0xff;
while(!(SSPSR & BIT0)); //ожидание опустошения FIFO передатчика
while(SSPSR & BIT4); //на всякий случай ожидание флага занятости
//чтение FIFO приемника
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
r1 = SSPDR;
</c>
Фокус в том, что бит RNE обнуляется как только считывается количество байт, равное половине количества отправленных байт. Т.е. в данном случае, как только считаю 4 байта. Остальные 4 чтения, получается, пустые чтоли? Это было проверено и при передаче меньшего количества байт. Т.е. посылаю 2 байта - в приемнике (судя по снятию RNE) 1, посылаю 4 байта - в приемнике - 2!
Что-то, видимо, недогоняю...