Казалось бы все просто. При чтении данных из FSL при установленном control бите командой get в регистре MSR флаг FSL Error устанавливается в 1, а при чтении командой cget этот же флаг устанавливается в 0. И в SDK даже команда специальная есть для проверки этого флага - fsl_iserror. Написал простейший код: принимаем данные по FSL, если control бит установлен - гасим светодиод, не установлен - зажигаем. Так вот переменная flag никогда не становится равной 1, не зависимо от того был установлен control бит или нет.
u32 TempFSLData; u16 flag;
getfslx(TempFSLData,0,FSL_NONBLOCKING); fsl_iserror(flag); if ( flag == 1) XGpio_DiscreteClear(&Gpio, GPIO_CHANNEL, 0x03); else XGpio_DiscreteSet(&Gpio, GPIO_CHANNEL, 0x03);
Тогда я пошел дальше и начал читать непосредственно бит FSL Error в регистре MSR. И результат еще более интересный - пока control бит не установлен, не устанавливается и FSL Error, как только установили control бит первый раз в 1, то и FSL Error устанавливается в 1. И после этого в 0 никогда не возвращается не за висимо от значения control бита.
getfslx(TempFSLData,0,FSL_NONBLOCKING);
flag=mfmsr( ); if ( (flag & 0x0010) == 0x0010) XGpio_DiscreteClear(&Gpio, GPIO_CHANNEL, 0x03); else XGpio_DiscreteSet(&Gpio, GPIO_CHANNEL, 0x03);
Вот такие чудеса. Что я не правильно делаю? Камрады, покажите как правильно нужно использовать control бит
|