zHz00 Untitled

среда, 18 января 2017
23:59 Стой там, иди сюда
Посылаю данные через последовательный интерфейс (SPI) из контроллера. Для тестовых целей посылаю по очереди 0xFFFFFF и 0xAAAAAA. По системе:

for( ; ; )
{
SendData(0xFFFFFF);
Pause(1);//us
SendData(0xAAAAAA);
Pause(1);//us
}


Но на осциллографе вижу какую-то хрень: вроде данные видны, но через несколько тактовых импульсов (а там есть вторая линия, где вместо данных -- тактовые импульсы) происходит сбивка длительности импульса (т.е. они все должны быть одинаковой длины, а очередной импульс оказывается другой длины). И данные совсем не те. А число импульсов... ОДИННАДЦАТЬ (а должно быть 24, я так задал). Вообще ни в какие ворота не лезет.

ОКАЗАЛОСЬ, что блок контроллера, отвечающий за SPI занимается посылкой данных независимо, т.е. как только я данные ему отправил, он сразу возвращает управление. А функция SendData не ждёт, пока завершится передача. А 11 импульсов проходит за время паузы как раз. И блок SPI бросает все дела и начинает посылать следующие данные, недопослав предыдущие.

@темы: Программирование, Борьба с техникой

URL
Слепые наткнулись на слона. Один взялся за хобот и решил,...
Яркое солнце, живое, весенее, дразняшее, слепяшее глаза. ...
Среди прочих конфессий сушествует в Корее и православие. ...
А поддержку правой кнопки когда сделаете? А то когда я ст...
Алекс, а можешь сделать мне вот так? http://mylife.yuga...
ыыыы... зачем мы сегодня учимся?? все отдыхают, все как п...

19.01.2017 в 10:01

19.01.2017 в 10:01
и в API нет коллбека, который дёргается по завершении передачи? это было бы особенное уличное трололо от авторов библиотеки.
URL

19.01.2017 в 12:18

19.01.2017 в 12:18
korrshun, в микроконтроллерах с коллбеками тяжело. Вместо них -- прерывания. Блок SPI поддерживает вызов прерываний при завершении передачи, однако способов задания обработчика этого самого прерывания в библиотеке действительно нет. Есть функция isSPIReady(), которую я теперь вызываю в бесконечном цикле, пока не получу true.
URL

19.01.2017 в 14:27

19.01.2017 в 14:27
ну ладно хоть это не состояние какого-то регистра, на которое нельзя повесить прерывание и не приходится время от времени по таймеру в него лазить.
довольно печальное решение в итоге вышло.
может создатели забили и предлагают сами в лоб вешать обработчик в клиенстком коде? всё лучше, чем в бесконечном цикле крутиться.
URL

19.01.2017 в 14:54

19.01.2017 в 14:54
Проблем с бесконечным циклом никаких -- мне всё равно в это время делать нечего. Другие программы на процессоре не крутятся, я один. Единственная потенциальная проблема -- излишнее потребление мощности из-за кручения цикла. Но прибор будет питаться от розетки, так что для нас это неактуально.
URL