Самый быстрый способ считывания состояния цифрового контакта в Arduino Due

Каков самый быстрый способ прочитать статус цифрового контакта в Arduino Due? Можно ли достичь скорости в области наносекунд?

С помощью какого типа кода я могу этого добиться?

Изменить: этот вопрос не является дубликатом, смотрите мой комментарий.

, 👍1

Обсуждение

Да, записывайте или читайте из правильных регистров GPIO/PORT напрямую. В лучшем случае для чтения потребуется всего несколько циклов процессора, то есть несколько наносекунд. Время обработки после этого неизвестно и зависит от того, что вы хотите сделать со считанными данными. Дубликат http://arduinoprosto.ru/q/9117/sam3x8e-arduino-due-pin-io-registers. Также прочитайте http://forum.arduino.cc/index.php?topic=260731.0., @Maximilian Gerhardt

Возможный дубликат регистров ввода-вывода SAM3X8E (Arduino Due), @James Waldby - jwpat7

Нет, это не дубликат. Там вы найдете ответ, как установить цифровой вывод в качестве выхода, но НЕ как установить его в качестве входа и прочитать состояние его контакта. Или, по крайней мере, это не объяснено достаточно подробно. Также вы не найдете подходящего ответа на вопрос «самый быстрый», а только, к сожалению, альтернативу digitalWrite. Вы не найдете ни одного примера кода для установки вывода в качестве входных данных и чтения с него, что на самом деле было бы очень важно для новичков, таких как я, если вы не забываете, что особенно «ненормальные» команды регистра очень загадочны для новичок., @William Roy

нс? нет. нас? ага., @dandavis

Его использует библиотека OneWire: https://github.com/PaulStoffregen/OneWire/blob/master/OneWire.h, @Jot

@Jot: Где именно? Не могли бы вы опубликовать как фрагмент?, @William Roy

@WilliamRoy все определения, функции DirectRead, DirectMode и т. д. представляют собой быструю прямую запись порта. OneWire.cpp показывает, как хранится битовая маска и используются определения DIRECT...., @Jot

@WilliamRoy Пожалуйста, ознакомьтесь с библиотекой GPIO для портативной высокоскоростной библиотеки Arduino. https://github.com/mikaelpatel/Arduino-GPIO, @Mikael Patel


2 ответа


2

Если контакт объявлен как входной, скажем, контакт 13:

uint32_t pin_status;
pin_status = PIOB->PIO_PDSR & PIO_PDSR_P27;

Если контакт объявлен как выходной, скажем, контакт 13:

uint32_t pin_status;
pin_status = PIOB->PIO_ODSR & PIO_ODSR_P27;
,

0

Считывание регистра входных данных будет самым быстрым.

,