machine — a hardverhez kapcsolódó függvények¶
A machine modul egy adott lap hardveréhez kapcsolódó specifikus függvényeket tartalmaz. A modul legtöbb függvénye lehetővé teszi a rendszer hardveres egységeihez (mint a CPU, időzítők, buszok stb.) való közvetlen és korlátlan hozzáférést és azok vezérlését.
Memóriahozzáférés¶
A modul három indexelhető objektumot tesz elérhetővé a nyers memóriahozzáféréshez. Mindegyik egy bájtcím szerint indexelt ritka tömbként viselkedik: a value = memN[addr] olvas, a memN[addr] = value ír. A cím mindig bájtcím, függetlenül a hozzáférés szélességétől.
- machine.mem8¶
Indexelhető 8 bites memória-hozzáférő. A
mem8[addr]egy 0-255 tartományba esőint-et olvas be azaddrcímen lévő bájtból; amem8[addr] = valueavaluealsó 8 bitjét írja ki. Azaddr-nak 1 bájtra kell igazodnia (bármely cím).
- machine.mem16¶
Indexelhető 16 bites (félszó) memória-hozzáférő. A
mem16[addr]egy 0-65535 tartományba esőint-et olvas be; amem16[addr] = valueaz alsó 16 bitet írja ki. Azaddr-nak 2 bájtra kell igazodnia.
- machine.mem32¶
Indexelhető 32 bites (szó) memória-hozzáférő. A
mem32[addr]egy 0-0xFFFFFFFF tartományba esőint-et olvas be; amem32[addr] = valueaz alsó 32 bitet írja ki. Azaddr-nak 4 bájtra kell igazodnia.
Példa használat (a regiszterek egy STM32H7 mikrovezérlőre specifikusak – az OpenMV Cam H7 / H7 Plus / Pure Thermal kameráknál a P0 fejlécláb a PB15-höz van bekötve):
import machine
from micropython import const
GPIOB = const(0x58020400)
GPIO_BSRR = const(0x18)
GPIO_IDR = const(0x10)
# set P0 (PB15) high via the GPIOB bit-set/reset register
machine.mem32[GPIOB + GPIO_BSRR] = 1 << 15
# read P0 (PB15) directly out of the GPIOB input-data register
value = (machine.mem32[GPIOB + GPIO_IDR] >> 15) & 1
Egyéb függvények¶
- machine.unique_id() bytes¶
Visszaad egy
bytesobjektumot, amely ennek a lapnak az egyedi azonosítóját tartalmazza. Az érték az MCU hardveréből kerül kiolvasásra (jellemzően a gyárilag beprogramozott eszköz-sorozatszám), így az újraindítások során állandó, és lapról lapra eltér.A hossz az MCU családtól függ – 12 bájt STM32-n, 8 bájt a mimxrt és alif portokon. Ha az alkalmazásodnak rögzített hosszúságú azonosítóra van szüksége, szeleteld vagy hash-eld a visszaadott értéket.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Megméri egyetlen impulzus szélességét a
pin-en, és visszaadja annak időtartamát mikroszekundumban.A
pin-t digitális bemenetként kell konfigurálni.A
pulse_levela mérendő impulzus polaritása:1magas impulzushoz,0alacsony impulzushoz.A függvény két fázisban működik. Először, ha a láb még nincs
pulse_level-en, megvárja, amíg a láb átváltpulse_level-re (az impulzus kezdete). Ezután megméri, mennyi ideig marad a lábpulse_level-en, mielőtt visszavált (az impulzus vége). A mért időt mikroszekundumban adja vissza.A
timeout_usminden fázist függetlenül korlátoz (így egy legrosszabb esetbeli hívás akár2 * timeout_usideig is tarthat). Időtúllépéskor a függvény negatív értéket ad vissza, amely azonosítja, melyik fázis lépett túl az időn:-2– időtúllépés a felfutó él várásakor (a láb soha nem érte el apulse_level-t).-1– időtúllépés a lefutó él várásakor (az impulzus hosszabb volt, mint atimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Átviszi a data-t a megadott pin bit-banging módszerével. Az encoding argumentum megadja, hogyan vannak a bitek kódolva, a timing pedig egy kódolás-specifikus időzítési specifikáció.
A támogatott kódolások:
0a „magas alacsony” impulzus-időtartam modulációhoz. Ez a 0 és 1 biteket időzített impulzusokként továbbítja, a legjelentősebb bittel kezdve. A timing-nak egy négyelemű, nanoszekundumokból álló tuple-nek kell lennie a(high_time_0, low_time_0, high_time_1, low_time_1)formátumban. Például a(400, 850, 800, 450)a WS2812 RGB LED-ek időzítési specifikációja 800kHz-en.
Az időzítés pontossága hardverfüggő; a gyorsabb MCU-k szorosabb impulzusokat állítanak elő (jellemzően tíz nanoszekundumos nagyságrendben).
Megjegyzés
A WS2812 / NeoPixel szalagok vezérléséhez lásd a
neopixelmodult a magasabb szintű API-ért.
Konstansok¶
Az alábbi konstansokat a reset_cause() adja vissza, és azonosítják, miért állt vissza utoljára az MCU. Elérhető az STM32 és mimxrt portokon; az alif port (OpenMV Cam AE3) jelenleg nem tesz elérhetővé visszaállítási-ok konstansokat, és a reset_cause() mindig 0-t ad vissza.
- machine.PWRON_RESET: int¶
A chipre kapcsolt tápfeszültség által okozott visszaállítás. STM32 és mimxrt portok.
- machine.WDT_RESET: int¶
A watchdog időzítő lejárta által okozott visszaállítás. STM32 és mimxrt portok.
- machine.SOFT_RESET: int¶
A
soft_reset()által okozott visszaállítás (a Python értelmező hardveres visszaállítás nélkül indult újra). STM32 és mimxrt portok.
Osztályok¶
- Pin osztály – I/O lábak vezérlése
- Signal osztály – külső I/O eszközök vezérlése és érzékelése
- LED osztály – hordozható, kártyán lévő LED-vezérlés
- ADC osztály – analóg-digitális átalakítás
- PWM osztály – impulzusszélesség-moduláció
- class UART – duplex soros kommunikációs busz
- SPI osztály – Serial Peripheral Interface buszprotokoll (vezérlő oldal)
- SoftSPI osztály – szoftveresen emulált SPI busz
- I2C osztály – kétvezetékes soros protokoll
- SoftI2C osztály – szoftveresen emulált I2C busz
- I2CTarget osztály – egy I2C céleszköz
- I2S osztály – Inter-IC Sound buszprotokoll
- class CAN – Controller Area Network protokoll
- RTC osztály – valós idejű óra
- Timer osztály – virtuális periodikus / egyszeri időzítő
- class WDT – watchdog időzítő
- SDCard osztály – SD / MMC kártyameghajtó
- Counter osztály – impulzusszámláló
- Encoder osztály – kvadratúra-dekóder