Аналог __builtin_avr_delay_cycles () для Arduino DUE
- Войдите на сайт для отправки комментариев
Чт, 08/04/2021 - 20:31
Имею Arduino DUE и общаюсь с помощью неё с устройством по SPI.
Мне необходимо делать задержку в 0.5мкс без остановки кода, т.е. через цикл с использованием micros() не получится, нужна задержка в количествах циклов.
До этого мой скетч был для Atmega328p и для неё работала функция __builtin_avr_delay_cycles(8) и всё было замечательно, на DUE она конечно не работает. Есть ли какой-то ее аналог? Весь день гуглю и не могу нагуглить решение.
Сколько это циклов займет придется измерить
for(volatile int i = 0; i < x; i++) {}
Сколько это циклов займет придется измерить
for(volatile int i = 0; i < x; i++) {}
Измерить не проблема, примерно 44 цикла. Вопрос в том, как это сделать частью кода.
Сколько это циклов займет придется измерить
for(volatile int i = 0; i < x; i++) {}
Не будет ли проблем с дополнительной задержкой при таком синтаксисе?
Так можно прямо кусок из функции delayMicroseconds взять
1
uint32_t n = usec * (VARIANT_MCK / 3000000);
2
3
asm volatile(
4
"L_%=_delayMicroseconds:"
"\n\t"
5
"subs %0, #1"
"\n\t"
6
"bne L_%=_delayMicroseconds"
"\n"
7
:
"+r"
(n) :
8
);
Для половины микросекунды n=14
Не будет ли проблем с дополнительной задержкой при таком синтаксисе?
В предыдущем сообщении было "измерить не проблема". Теперь уже проблема?