MicroPython:Библиотеки/pyb/Класс ExtInt: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[]</ref>= | =Класс ExtInt – настройка I/O-контактов для прерываний на внешних событиях<ref>[http://docs.micropython.org/en/latest/library/pyb.ExtInt.html docs.micropython.org - class ExtInt – configure I/O pins to interrupt on external events]</ref>= | ||
Всего на [[PyBoard]] есть ''22 линии'' с прерываниями. ''16'' из них относятся к [[GPIO-контакт]]ам, а оставшиеся ''6'' – к компонентам внутри платы. | |||
Таким образом, линии ''с 0 по 15'' можно привязать к любому [[GPIO-порт]]у. То есть линию ''0'' можно привязать к ''Px0'', где ''«x»'' – это порт ''A, B, C'' и т.д., а линию ''1'' можно привязать к ''Px1'', где ''«x»'' – это тоже порт ''A, B, C'' и т.д. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
def callback(line): | |||
print("line =", line) | |||
</syntaxhighlight> | |||
{{Спойлер|'''Примечание:''' ''ExtInt'' автоматически настраивает GPIO-линию в режим вывода данных.}} | |||
<syntaxhighlight lang="python" enclose="div"> | |||
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback) | |||
</syntaxhighlight> | |||
Теперь на контакте ''X1'' на заднем фронте каждый раз будет вызываться функция обратного вызова. | |||
'''Внимание:''' на механических кнопках присутствует так называемый ''«дребезг»'' – явление, при котором нажатие или отпускание кнопки вызывают несколько ложных срабатываний. Более подробно о дребезге, а также о способах его устранения читайте [http://www.eng.utah.edu/~cs5780/debouncing.pdf тут]. | |||
Попытка зарегистрировать две функции обратного вызова на одном и том же контакте возбудит исключение. | |||
Если контакт будет передан как целое число, то это значит, что его нужно привязать к одному из внутренних источников прерываний – он должен быть в диапазоне ''между «16» и «22»''. | |||
Все прочие объекты ''Pin'' привязываются к [[GPIO-контакт]]ам через привязывающую функцию. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
extint = pyb.ExtInt(pin, mode, pull, callback) | |||
</syntaxhighlight> | |||
Значения, которые можно использовать в аргументе mode: pyb.ExtInt.IRQ_RISING, pyb.ExtInt.IRQ_FALLING, pyb.ExtInt.IRQ_RISING_FALLING, pyb.ExtInt.EVT_RISING, pyb.ExtInt.EVT_FALLING и pyb.ExtInt.EVT_RISING_FALLING. | |||
По словам разработчиков, они тестировали только режимы типа IRQ_xxx. Режимы типа EVT_xxx каким-то образом связаны с режимом сна и командой WFE. | |||
Значения, которые можно использовать в аргументе pull: pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN, pyb.Pin.PULL_NONE. | |||
Кроме того, у этого класса есть ''API'' для языка [[C]], чтобы этот код также могли использовать драйверы, которым требуются линии прерываний ''EXTI''. О функциях этого [[API]] читайте в ''«extint.h»'', а о примерах их использования – в ''«usrsw.h»''. | |||
== Конструкторы == | |||
* Класс pyb.ExtInt(pin, mode, pull, callback) – создает объект ExtInt: | |||
** pin – это контакт, на котором нужно включить прерывание. Здесь может быть объект Pin или любое другое корректное название контакта). | |||
** mode – здесь может быть ExtInt.IRQ_RISING (запуск на переднем фронте), ExtInt.IRQ_FALLING (запуск на заднем фронте), ExtInt.IRQ_RISING_FALLING (запуск на переднем или заднем фронтах). | |||
** pull – здесь может быть pyb.Pin.PULL_NONE (не включать ни подтягивающий, ни стягивающий резистор), pyb.Pin.PULL_UP (включить подтягивающий резистор), pyb.Pin.PULL_DOWN (включить стягивающий резистор). | |||
** callback – это функция, вызываемая при срабатывании прерывания. Она может принимать только один аргумент (линию, запустившую прерывание). | |||
== Методы класса == | |||
* ExtInt.regs() – выполняет дамп EXTI-регистров. | |||
== Методы == | |||
* ExtInt.disable() – отключает прерывание, связанное с объектом ExtInt. Может быть полезен для устранения дребезга. | |||
* ExtInt.enable() – включает выключенное прерывание. | |||
* ExtInt.line() – возвращает номер линии, к которой привязан контакт. | |||
* ExtInt.swint() – запускает функцию обратного вызова из программы. | |||
== Константы == | |||
* ExtInt.IRQ_FALLING – срабатывание прерывания на заднем фронте. | |||
* ExtInt.IRQ_RISING – срабатывание прерывания на переднем фронте. | |||
* ExtInt.IRQ_RISING_FALLING – срабатывание прерывания на переднем или заднем фронтах. | |||
Версия от 09:57, 6 октября 2020
Класс ExtInt – настройка I/O-контактов для прерываний на внешних событиях[1]
Всего на PyBoard есть 22 линии с прерываниями. 16 из них относятся к GPIO-контактам, а оставшиеся 6 – к компонентам внутри платы.
Таким образом, линии с 0 по 15 можно привязать к любому GPIO-порту. То есть линию 0 можно привязать к Px0, где «x» – это порт A, B, C и т.д., а линию 1 можно привязать к Px1, где «x» – это тоже порт A, B, C и т.д.
def callback(line):
print("line =", line)
Примечание: ExtInt автоматически настраивает GPIO-линию в режим вывода данных. |
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)
Теперь на контакте X1 на заднем фронте каждый раз будет вызываться функция обратного вызова.
Внимание: на механических кнопках присутствует так называемый «дребезг» – явление, при котором нажатие или отпускание кнопки вызывают несколько ложных срабатываний. Более подробно о дребезге, а также о способах его устранения читайте тут.
Попытка зарегистрировать две функции обратного вызова на одном и том же контакте возбудит исключение.
Если контакт будет передан как целое число, то это значит, что его нужно привязать к одному из внутренних источников прерываний – он должен быть в диапазоне между «16» и «22».
Все прочие объекты Pin привязываются к GPIO-контактам через привязывающую функцию.
extint = pyb.ExtInt(pin, mode, pull, callback)
Значения, которые можно использовать в аргументе mode: pyb.ExtInt.IRQ_RISING, pyb.ExtInt.IRQ_FALLING, pyb.ExtInt.IRQ_RISING_FALLING, pyb.ExtInt.EVT_RISING, pyb.ExtInt.EVT_FALLING и pyb.ExtInt.EVT_RISING_FALLING. По словам разработчиков, они тестировали только режимы типа IRQ_xxx. Режимы типа EVT_xxx каким-то образом связаны с режимом сна и командой WFE. Значения, которые можно использовать в аргументе pull: pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN, pyb.Pin.PULL_NONE.
Кроме того, у этого класса есть API для языка C, чтобы этот код также могли использовать драйверы, которым требуются линии прерываний EXTI. О функциях этого API читайте в «extint.h», а о примерах их использования – в «usrsw.h».
Конструкторы
- Класс pyb.ExtInt(pin, mode, pull, callback) – создает объект ExtInt:
- pin – это контакт, на котором нужно включить прерывание. Здесь может быть объект Pin или любое другое корректное название контакта).
- mode – здесь может быть ExtInt.IRQ_RISING (запуск на переднем фронте), ExtInt.IRQ_FALLING (запуск на заднем фронте), ExtInt.IRQ_RISING_FALLING (запуск на переднем или заднем фронтах).
- pull – здесь может быть pyb.Pin.PULL_NONE (не включать ни подтягивающий, ни стягивающий резистор), pyb.Pin.PULL_UP (включить подтягивающий резистор), pyb.Pin.PULL_DOWN (включить стягивающий резистор).
- callback – это функция, вызываемая при срабатывании прерывания. Она может принимать только один аргумент (линию, запустившую прерывание).
Методы класса
- ExtInt.regs() – выполняет дамп EXTI-регистров.
Методы
- ExtInt.disable() – отключает прерывание, связанное с объектом ExtInt. Может быть полезен для устранения дребезга.
- ExtInt.enable() – включает выключенное прерывание.
- ExtInt.line() – возвращает номер линии, к которой привязан контакт.
- ExtInt.swint() – запускает функцию обратного вызова из программы.
Константы
- ExtInt.IRQ_FALLING – срабатывание прерывания на заднем фронте.
- ExtInt.IRQ_RISING – срабатывание прерывания на переднем фронте.
- ExtInt.IRQ_RISING_FALLING – срабатывание прерывания на переднем или заднем фронтах.
<syntaxhighlight lang="python" enclose="div">