machine — funkce související s hardwarem¶
Modul machine obsahuje specifické funkce související s hardwarem na konkrétní desce. Většina funkcí v tomto modulu umožňuje dosáhnout přímého a neomezeného přístupu k hardwarovým blokům systému (jako CPU, časovače, sběrnice atd.) a jejich řízení.
Přístup k paměti¶
Modul zpřístupňuje tři indexovatelné objekty používané pro přímý přístup k paměti. Každý se chová jako řídké pole indexované adresou bajtu: value = memN[addr] čte, memN[addr] = value zapisuje. Adresa je vždy adresa bajtu, bez ohledu na šířku přístupu.
- machine.mem8¶
Indexovatelný 8bitový přístup k paměti.
mem8[addr]čteintv rozsahu 0-255 z bajtu na adreseaddr;mem8[addr] = valuezapíše dolních 8 bitů hodnotyvalue.addrmusí být zarovnán na 1 bajt (libovolná adresa).
- machine.mem16¶
Indexovatelný 16bitový přístup k paměti (poloslovo).
mem16[addr]čteintv rozsahu 0-65535;mem16[addr] = valuezapíše dolních 16 bitů.addrmusí být zarovnán na 2 bajty.
- machine.mem32¶
Indexovatelný 32bitový přístup k paměti (slovo).
mem32[addr]čteintv rozsahu 0-0xFFFFFFFF;mem32[addr] = valuezapíše dolních 32 bitů.addrmusí být zarovnán na 4 bajty.
Příklad použití (registry jsou specifické pro mikrokontrolér STM32H7 – na OpenMV Cam H7 / H7 Plus / Pure Thermal je header pin P0 propojen s 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
Různé funkce¶
- machine.unique_id() bytes¶
Vrací objekt
bytesobsahující jedinečný identifikátor této desky. Hodnota je načtena z hardwaru MCU (typicky tovární sériové číslo zařízení), takže je stabilní napříč restarty a liší se deska od desky.Délka závisí na rodině MCU – 12 bajtů na STM32, 8 bajtů na mimxrt a alif portech. Pokud vaše aplikace potřebuje ID pevné délky, vrácenou hodnotu nařežte nebo zahashujte.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Změří šířku jediného pulzu na
pina vrátí jeho trvání v mikrosekundách.pinmusí být nakonfigurován jako digitální vstup.pulse_levelje polarita pulzu, jehož trvání se má změřit:1pro vysoký pulz,0pro nízký pulz.Funkce pracuje ve dvou fázích. Nejprve, pokud pin ještě není na úrovni
pulse_level, čeká na přechod pinu napulse_level(začátek pulzu). Poté měří dobu, po kterou pin zůstává na úrovnipulse_level, než se přepne zpět (konec pulzu). Naměřený čas je vrácen v mikrosekundách.timeout_usohraničuje každou fázi nezávisle (takže volání v nejhorším případě trvá až2 * timeout_us). Při vypršení časového limitu funkce vrátí zápornou hodnotu identifikující, která fáze vypršela:-2– vypršel časový limit při čekání na náběžnou hranu (pin nikdy nedosáhl úrovněpulse_level).-1– vypršel časový limit při čekání na sestupnou hranu (pulz byl delší nežtimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Vysílá data bit-bangingem na zadaném pinu pin. Argument encoding určuje, jak jsou bity kódovány, a timing je časová specifikace závislá na kódování.
Podporovaná kódování jsou:
0pro pulzně šířkovou modulaci typu „high low“. Tato vysílá bity 0 a 1 jako časované pulzy, počínaje nejvýznamnějším bitem. timing musí být čtyřprvkový tuple nanosekund ve formátu(high_time_0, low_time_0, high_time_1, low_time_1). Například(400, 850, 800, 450)je časová specifikace pro WS2812 RGB LED na 800 kHz.
Přesnost časování závisí na hardwaru; rychlejší MCU produkují přesnější pulzy (typicky desítky nanosekund).
Poznámka
Pro řízení WS2812 / NeoPixel pásků viz modul
neopixels vyšší úrovní API.
Konstanty¶
Níže uvedené konstanty vrací reset_cause() a identifikují, proč se MCU naposledy resetovalo. Dostupné na STM32 a mimxrt portech; alif port (OpenMV Cam AE3) v současnosti nezpřístupňuje konstanty příčiny resetu a jeho reset_cause() vždy vrací 0.
- machine.SOFT_RESET: int¶
Reset způsobený
soft_reset()(Python interpret se restartoval bez hardwarového resetu). STM32 a mimxrt porty.
Třídy¶
- třída Pin – ovládání I/O pinů
- třída Signal – ovládání a snímání externích I/O zařízení
- třída LED – přenositelné řízení LED na desce
- třída ADC – analogově-digitální převod
- třída PWM – pulzně šířková modulace
- třída UART – duplexní sériová komunikační sběrnice
- třída SPI – protokol sběrnice Serial Peripheral Interface (strana řadiče)
- třída SoftSPI – softwarově emulovaná sběrnice SPI
- třída I2C – dvouvodičový sériový protokol
- třída SoftI2C – softwarově emulovaná sběrnice I2C
- třída I2CTarget – cílové zařízení I2C
- třída I2S – protokol sběrnice Inter-IC Sound
- třída CAN – protokol Controller Area Network
- třída RTC – hodiny reálného času
- třída Timer – virtuální periodický / jednorázový časovač
- třída WDT – watchdog časovač
- třída SDCard – ovladač SD / MMC karty
- třída Counter – čítač pulzů
- třída Encoder – kvadraturní dekodér