klasa ExtInt – konfiguriranje U/I pinova za prekid na vanjskim događajima

STM32 MCU-i dijele kontroler vanjskih prekida (EXTI) u dva raspona: linije 0-15 pokreću se s GPIO pinova, a linije iznad 15 vezane su za interne izvore (RTC alarm, RTC buđenje, USB buđenje itd.). Ukupan broj linija i mapiranje internih linija iznad 15 specifični su za MCU; za točne dodjele pogledajte odjeljak EXTI u referentnom priručniku za MCU vaše OpenMV Cam kamere.

Svaku GPIO liniju N može pokretati pin PxN na bilo kojem GPIO portu u danom trenutku – na primjer, linija 0 može se mapirati na PA0, PB0, PC0 ili bilo koji drugi pin 0 od porta A do porta K, ali samo jedan istovremeno.

Primjer:

def callback(line):
    print("line =", line)

extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)

Svaki silazni brid na pin zatim poziva callback. ExtInt automatski konfigurira GPIO liniju kao ulaz; to ne morate raditi sami.

Napomena

Mehaničke tipkala „poskakuju” pa jedan pritisak ili otpuštanje često generira više bridova. Vidi na primjer ovaj uvod u uklanjanje poskakivanja za tehnike.

Registriranje dvaju povratnih poziva na istom pinu izaziva iznimku.

Ako se pin proslijedi kao cijeli broj, pretpostavlja se da identificira jednu od internih linija prekida i mora biti >= 16 te ispod ukupnog broja EXTI linija MCU-a. Svaka druga vrijednost pina razrješava se kroz standardni mapirač pinova.

Uz načine rada IRQ_* postoje i načini događaja EVT_RISING, EVT_FALLING i EVT_RISING_FALLING koji usmjeravaju prijelaz na ulaz događaja procesora (koristi se s instrukcijom WFE za čekanje uz nisku potrošnju). Načini EVT_* ne pozivaju Python povratni poziv i namijenjeni su za spavanje / upravljanje napajanjem; uobičajeni aplikacijski kod trebao bi koristiti načine IRQ_*.

Konstruktori

class pyb.ExtInt(pin: int | str | Pin, mode: int, pull: int, callback: Callable[[int], None])

Stvara ExtInt objekt.

  • pin – pin na kojem se omogućuje prekid. Može biti Pin objekt, niz s nazivom pina ili cijeli broj u rasponu 16-21 za odabir internog izvora prekida.

  • mode – način okidanja. Jedan od:

    Konstanta

    Okidanje

    ExtInt.IRQ_RISING

    Uzlazni brid.

    ExtInt.IRQ_FALLING

    Silazni brid.

    ExtInt.IRQ_RISING_FALLING

    Bilo uzlazni bilo silazni brid.

  • pull – konfiguracija povlačenja pina. Jedan od pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP ili pyb.Pin.PULL_DOWN.

  • callback – pozivljivi objekt koji se poziva pri okidanju. Mora prihvatiti točno jedan argument: broj EXTI linije koja se aktivirala.

Klasne metode

classmethod regs() None

Ispisuje sadržaj registara EXTI periferije (za otklanjanje pogrešaka).

Metode

disable() None

Onemogućuje prekid povezan s ovim ExtInt objektom. Korisno za softversko uklanjanje poskakivanja.

enable() None

Ponovno omogućuje prekid prethodno onemogućen pomoću disable().

line() int

Vraća broj EXTI linije na koju je ovaj objekt mapiran.

swint() None

Okida povratni poziv iz softvera (kao da se na liniji dogodio konfigurirani brid).

Konstante

IRQ_RISING: int

Okida prekid na uzlaznom bridu. Pokreće se Python povratni poziv.

IRQ_FALLING: int

Okida prekid na silaznom bridu. Pokreće se Python povratni poziv.

IRQ_RISING_FALLING: int

Okida prekid na bilo kojem bridu. Pokreće se Python povratni poziv.

EVT_RISING: int

Usmjerava uzlazni brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv; namijenjeno za upotrebu s instrukcijom WFE u kodu niske potrošnje.

EVT_FALLING: int

Usmjerava silazni brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv.

EVT_RISING_FALLING: int

Usmjerava bilo koji brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv.