23:59
Стой там, иди сюда
Посылаю данные через последовательный интерфейс (SPI) из контроллера. Для тестовых целей посылаю по очереди 0xFFFFFF и 0xAAAAAA. По системе:
Но на осциллографе вижу какую-то хрень: вроде данные видны, но через несколько тактовых импульсов (а там есть вторая линия, где вместо данных -- тактовые импульсы) происходит сбивка длительности импульса (т.е. они все должны быть одинаковой длины, а очередной импульс оказывается другой длины). И данные совсем не те. А число импульсов... ОДИННАДЦАТЬ (а должно быть 24, я так задал). Вообще ни в какие ворота не лезет.
ОКАЗАЛОСЬ, что блок контроллера, отвечающий за SPI занимается посылкой данных независимо, т.е. как только я данные ему отправил, он сразу возвращает управление. А функция SendData не ждёт, пока завершится передача. А 11 импульсов проходит за время паузы как раз. И блок SPI бросает все дела и начинает посылать следующие данные, недопослав предыдущие.
for( ; ; )
{
SendData(0xFFFFFF);
Pause(1);//us
SendData(0xAAAAAA);
Pause(1);//us
}
Но на осциллографе вижу какую-то хрень: вроде данные видны, но через несколько тактовых импульсов (а там есть вторая линия, где вместо данных -- тактовые импульсы) происходит сбивка длительности импульса (т.е. они все должны быть одинаковой длины, а очередной импульс оказывается другой длины). И данные совсем не те. А число импульсов... ОДИННАДЦАТЬ (а должно быть 24, я так задал). Вообще ни в какие ворота не лезет.
ОКАЗАЛОСЬ, что блок контроллера, отвечающий за SPI занимается посылкой данных независимо, т.е. как только я данные ему отправил, он сразу возвращает управление. А функция SendData не ждёт, пока завершится передача. А 11 импульсов проходит за время паузы как раз. И блок SPI бросает все дела и начинает посылать следующие данные, недопослав предыдущие.
19.01.2017 в 10:01
19.01.2017 в 12:18
19.01.2017 в 14:27
довольно печальное решение в итоге вышло.
может создатели забили и предлагают сами в лоб вешать обработчик в клиенстком коде? всё лучше, чем в бесконечном цикле крутиться.
19.01.2017 в 14:54