machine — funkcije povezane s hardverom¶
Modul machine sadrži posebne funkcije povezane s hardverom na određenoj ploči. Većina funkcija u ovom modulu omogućuje izravan i neograničen pristup te upravljanje hardverskim blokovima na sustavu (poput CPU-a, mjerača vremena, sabirnica itd.).
Pristup memoriji¶
Modul izlaže tri indeksirajuća objekta koji se koriste za izravan pristup memoriji. Svaki se ponaša poput rijetkog polja indeksiranog adresom bajta: value = memN[addr] čita, memN[addr] = value zapisuje. Adresa je uvijek adresa bajta, neovisno o širini pristupa.
- machine.mem8¶
Indeksirajući 8-bitni pristupnik memoriji.
mem8[addr]čitaintu rasponu 0-255 iz bajta naaddr;mem8[addr] = valuezapisuje donjih 8 bitova vrijednostivalue.addrmora biti poravnat na 1 bajt (bilo koja adresa).
- machine.mem16¶
Indeksirajući 16-bitni (poluriječ) pristupnik memoriji.
mem16[addr]čitaintu rasponu 0-65535;mem16[addr] = valuezapisuje donjih 16 bitova.addrmora biti poravnat na 2 bajta.
- machine.mem32¶
Indeksirajući 32-bitni (riječ) pristupnik memoriji.
mem32[addr]čitaintu rasponu 0-0xFFFFFFFF;mem32[addr] = valuezapisuje donjih 32 bita.addrmora biti poravnat na 4 bajta.
Primjer upotrebe (registri su specifični za STM32H7 mikrokontroler – na OpenMV Cam H7 / H7 Plus / Pure Thermal header pin P0 spojen je na PB15):
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
Razne funkcije¶
- machine.unique_id() bytes¶
Vraća
bytesobjekt koji sadrži jedinstveni identifikator za ovu ploču. Vrijednost se očitava iz hardvera MCU-a (obično tvornički programirani serijski broj uređaja), pa je stabilna kroz ponovna pokretanja i razlikuje se od jedne ploče do druge.Duljina ovisi o porodici MCU-a – 12 bajtova na STM32, 8 bajtova na mimxrt i alif portovima. Ako vaša aplikacija treba ID fiksne duljine, izrežite ili hashirajte vraćenu vrijednost.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mjeri širinu jednog impulsa na
pini vraća njegovo trajanje u mikrosekundama.pinmora biti konfiguriran kao digitalni ulaz.pulse_levelje polaritet impulsa koji se mjeri:1za visoki impuls,0za niski impuls.Funkcija radi u dvije faze. Prvo, ako pin već nije na
pulse_level, čeka da pin prijeđe napulse_level(početak impulsa). Zatim mjeri vrijeme koliko pin ostaje napulse_levelprije nego što se vrati natrag (kraj impulsa). Izmjereno vrijeme vraća se u mikrosekundama.timeout_usograničava svaku fazu neovisno (pa poziv u najgorem slučaju traje do2 * timeout_us). Pri isteku vremena funkcija vraća negativnu vrijednost koja identificira koja je faza istekla:-2– isteklo vrijeme čekanja na vodeći rub (pin nikada nije dosegaopulse_level).-1– isteklo vrijeme čekanja na prateći rub (impuls je bio dulji odtimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Šalje data bit-bangingom navedenog pin. Argument encoding određuje kako su bitovi kodirani, a timing je specifikacija vremenskog rasporeda ovisna o kodiranju.
Podržana kodiranja su:
0za modulaciju trajanja impulsa „visoko nisko”. Ovo će prenijeti bitove 0 i 1 kao vremenski određene impulse, počevši od najznačajnijeg bita. timing mora biti četvorka nanosekundi u formatu(high_time_0, low_time_0, high_time_1, low_time_1). Na primjer,(400, 850, 800, 450)je specifikacija vremenskog rasporeda za WS2812 RGB LED-ice na 800kHz.
Točnost vremenskog rasporeda ovisi o hardveru; brži MCU-ovi proizvode preciznije impulse (obično desetke nanosekundi).
Napomena
Za upravljanje WS2812 / NeoPixel trakama vidjeti modul
neopixelza API više razine.
Konstante¶
Konstante u nastavku vraća reset_cause() i identificiraju zašto se MCU posljednji put resetirao. Dostupno na STM32 i mimxrt portovima; alif port (OpenMV Cam AE3) trenutno ne izlaže konstante uzroka resetiranja, a njegov reset_cause() uvijek vraća 0.
- machine.PWRON_RESET: int¶
Resetiranje uzrokovano dovođenjem napajanja na čip. STM32 i mimxrt portovi.
- machine.WDT_RESET: int¶
Resetiranje uzrokovano istekom watchdog mjerača vremena. STM32 i mimxrt portovi.
- machine.SOFT_RESET: int¶
Resetiranje uzrokovano
soft_reset()(Python interpreter ponovno pokrenut bez hardverskog resetiranja). STM32 i mimxrt portovi.
Klase¶
- class Pin – upravljanje I/O pinovima
- class Signal – upravljanje i očitavanje vanjskih I/O uređaja
- klasa LED – prijenosno upravljanje LED diodama na ploči
- klasa ADC – analogno-digitalna pretvorba
- klasa PWM – pulsno-širinska modulacija
- klasa UART – dvosmjerna serijska komunikacijska sabirnica
- class SPI – protokol sabirnice Serial Peripheral Interface (strana kontrolera)
- class SoftSPI – softverski emulirana SPI sabirnica
- klasa I2C – dvožični serijski protokol
- klasa SoftI2C – softverski emulirana I2C sabirnica
- klasa I2CTarget – I2C ciljni uređaj
- klasa I2S – protokol Inter-IC Sound sabirnice
- klasa CAN – protokol Controller Area Network
- class RTC – sat stvarnog vremena
- class Timer – virtualni periodički / jednokratni mjerač vremena
- klasa WDT – watchdog mjerač vremena
- class SDCard – upravljački program za SD / MMC kartice
- klasa Counter – brojač impulsa
- klasa Encoder – kvadraturni dekoder