Введение: Есть FIFO на 16 бит в которую по средствам SSP(pic) записывается и считывается информация. Запись по средствам pic осуществляется в два цикла отправка 1 байта отправка 2 байта (тк регистр SSPBUF 8битный). Порядок считывания приходящей информации соответственно такой. 1 байт отправили и значение SSPBUF присвоели переменной.
Проблема: Удаётся принять в SSPBUF только один байт из FIFO второй байт равен той информации которую я записываю в SSPBUF и пересылаю.
Описание: Например пусть в FIFO записано 0x11,0xEE.
Порядок считывания-->
{
while(!SSPIF);
SSPIF=0;
SSPBUF=0x00; //посылаем 0x00 для формирования CLK
while(!SSPIF); //Ожидаем флага полной отправки
data=SSPBUF; //Присваиваем переменной значения пришедших данных
Замечание: после первой отправки data будет равна 0x11.
повторная операция вместо того чтобы вернуть на 0xEE вернёт 0x00. Что соответствует записываемым данным в SSPBUF. Если соответствеенно записать в SSPBUF =0x22 то во время считывания второго байта он вернёт нам 0x22.
Код как он выглядит сейчас: ->
{
SSPBUF=0x00; //0x00
while(!SSPIF);
data[0]=SSPBUF; // данные из FIFO 0x11
SSPIF=0;
SSPBUF=0x00; // (1)
while(!SSPIF);
data[1]=SSPBUF; //Вот такое чувство что прислоенно значение (1)
}
Однако я допускаю что Возможно все это происходит в FIFO. Тоесть первый отправленный байт по SSP двигает первый байт записанный в FIFO, а второй байт сдвигает уже те данные которые только что туда задвинулись. тоесть первый пересланный SSPBUF.
И если вы считаете последнее утверждение верным - тогда как обеспечить формирование 16xCLK и считывание информации...
Заранее благодарен....