MicroPython:Библиотеки/pyb/Класс ExtInt: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показано 7 промежуточных версий 1 участника) | |||
Строка 9: | Строка 9: | ||
Таким образом, линии ''с 0 по 15'' можно привязать к любому [[GPIO-порт]]у. То есть линию ''0'' можно привязать к ''Px0'', где ''«x»'' – это порт ''A, B, C'' и т.д., а линию ''1'' можно привязать к ''Px1'', где ''«x»'' – это тоже порт ''A, B, C'' и т.д. | Таким образом, линии ''с 0 по 15'' можно привязать к любому [[GPIO-порт]]у. То есть линию ''0'' можно привязать к ''Px0'', где ''«x»'' – это порт ''A, B, C'' и т.д., а линию ''1'' можно привязать к ''Px1'', где ''«x»'' – это тоже порт ''A, B, C'' и т.д. | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
def callback(line): | def callback(line): | ||
print("line =", line) | print("line =", line) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{ | {{Примечание1|''ExtInt'' автоматически настраивает GPIO-линию в режим вывода данных.}} | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback) | extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 22: | Строка 22: | ||
Теперь на контакте ''X1'' на заднем фронте каждый раз будет вызываться функция обратного вызова. | Теперь на контакте ''X1'' на заднем фронте каждый раз будет вызываться функция обратного вызова. | ||
{{Блок/Инфо4 | |||
|1=Внимание | |||
|2=На механических кнопках присутствует так называемый ''«дребезг»'' – явление, при котором нажатие или отпускание кнопки вызывают несколько ложных срабатываний. Более подробно о дребезге, а также о способах его устранения читайте [http://www.eng.utah.edu/~cs5780/debouncing.pdf тут]. | |||
}} | |||
Попытка зарегистрировать две функции обратного вызова на одном и том же контакте возбудит исключение. | Попытка зарегистрировать две функции обратного вызова на одном и том же контакте возбудит исключение. | ||
Строка 30: | Строка 33: | ||
Все прочие объекты ''Pin'' привязываются к [[GPIO-контакт]]ам через привязывающую функцию. | Все прочие объекты ''Pin'' привязываются к [[GPIO-контакт]]ам через привязывающую функцию. | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
extint = pyb.ExtInt(pin, mode, pull, callback) | extint = pyb.ExtInt(pin, mode, pull, callback) | ||
</syntaxhighlight> | </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. | Значения, которые можно использовать в аргументе 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. | По словам разработчиков, они тестировали только режимы типа IRQ_xxx. Режимы типа EVT_xxx каким-то образом связаны с режимом сна и командой WFE. | ||
Значения, которые можно использовать в аргументе pull: pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN, pyb.Pin.PULL_NONE. | Значения, которые можно использовать в аргументе pull: pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN, pyb.Pin.PULL_NONE. | ||
Строка 42: | Строка 47: | ||
== Конструкторы == | == Конструкторы == | ||
* Класс pyb.ExtInt( | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/pyb.ExtInt()|pyb.ExtInt(pin, mode, pull, callback)]] | ||
== Методы класса == | == Методы класса == | ||
* ExtInt.regs() | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.regs()|ExtInt.regs()]] | ||
== Методы == | == Методы == | ||
* ExtInt.disable() | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.disable()|ExtInt.disable()]] | ||
* ExtInt.enable() | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.enable()|ExtInt.enable()]] | ||
* ExtInt.line() | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.line()|ExtInt.line()]] | ||
* ExtInt.swint() | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.swint()|ExtInt.swint()]] | ||
== Константы == | == Константы == | ||
* ExtInt.IRQ_FALLING | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.IRQ_FALLING|ExtInt.IRQ_FALLING]] | ||
* ExtInt.IRQ_RISING | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.IRQ_RISING|ExtInt.IRQ_RISING]] | ||
* ExtInt.IRQ_RISING_FALLING | * [[MicroPython:Библиотеки/pyb/Класс ExtInt/ExtInt.IRQ_RISING_FALLING|ExtInt.IRQ_RISING_FALLING]] | ||
=См.также= | =См.также= |
Текущая версия от 18:16, 14 мая 2023
Класс 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 = 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».