MicroPython:Библиотеки/pyb/Класс ExtInt: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Строка 46: Строка 46:
== Методы класса ==
== Методы класса ==


* ExtInt.regs() – выполняет дамп EXTI-регистров.
* [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.regs()|ExtInt.regs()]]


== Методы ==
== Методы ==

Версия от 10:01, 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».

Конструкторы

Методы класса

Методы

  • ExtInt.disable() – отключает прерывание, связанное с объектом ExtInt. Может быть полезен для устранения дребезга.
  • ExtInt.enable() – включает выключенное прерывание.
  • ExtInt.line() – возвращает номер линии, к которой привязан контакт.
  • ExtInt.swint() – запускает функцию обратного вызова из программы.

Константы

  • ExtInt.IRQ_FALLING – срабатывание прерывания на заднем фронте.
  • ExtInt.IRQ_RISING – срабатывание прерывания на переднем фронте.
  • ExtInt.IRQ_RISING_FALLING – срабатывание прерывания на переднем или заднем фронтах.


<syntaxhighlight lang="python" enclose="div">

См.также

Внешние ссылки