ARDUINO Прерывания и SPI

Mefest

✩✩✩✩✩✩✩
10 Дек 2019
2
0
Такой вопрос - Как влияют прерывания, например по таймеру или АЦП на работу по шине SPI, в частности на работу с SD. К примеру В основном коде программы loop() у меня началась отправка блока данных на SD карту, поскольку данные на карту записываются по 512 байт, то сделан буфер и отправка начинается по его заполнению. И вот cmd отправлена ответ получен в Цикле начинаю отправку побайтно. И допустим после отправки 4 байтов сработало прерывание по таймеру. Что тогда будет? Как продолжится отправка, отправятся ли 0 за прерывание или будет нормально продолжено с 5 байта? Спрашиваю поскольку программа по чтению с анлогового входа перестает работать при включении передачи.
 
Изменено:

Marik

✩✩✩✩✩✩✩
11 Ноя 2019
29
4
Я так понял что Вы хотите в прерываниях передавать данные? для начала определитесь что для Вас важнее, передать данные или замерять АЦП. Правило №1 в прерываниях "не засиживаться".
Правило №2 при считывании АЦП отключать прерывания, чтобы не мешали измерению.
Попробуйте в прерываниях читать Аналог, собрать в массив данных, отключить прерывание и передать их. Я бы так сделал?

P.S. Сильно "ногами не пинай" я сам новичок.
 

Mefest

✩✩✩✩✩✩✩
10 Дек 2019
2
0
Нет, данные я передаю в цикле loop(), в прерывании у меня заполняется 2 буфера значениями с АЦП попеременно. Двойная буферизации, пока один заполняется, с другого передаю на SD и так по кругу, пока нажата кнопка.
Главная задача осуществить потоковую передачу с АЦП на SD на высокой частоте обработки.

Почти получилось, отладил до уровня - "Какие-то показания снимаются, какие-то данные отправляются". Расставил маркеры в начале буферов ( они из 512 байтов состоят), смена буферов работает корректно. Вот только теперь каике-то проблемы со снятием показаний в буфер. Весь блок заполняется одним значением. Когда отключаю передачу на SD и включаю вывод значений буфера в консоль, нет такого, что все значение одинаковое. Вот вопрос и повторяется, как внешние прерывания, или от таймера, или от АЦП влияют на поток по SPI. По SPI, что бы отправить 1 байт, нужно подать 8 импульсов. Импульс в данном случае это есть или нет сигнал за время обратное частоте условно шины SPI. Наглядно | | | | | | | | либо 0000000. А когда происходит прерывание, я вклиниваюсь в этот текущий байт
-> | прерывание ||| прерывание ||| прерывание | например так. Как теперь SD карта воспримет этот сигнал?2.jpg