machine — laitteistoon liittyvät funktiot¶
machine-moduuli sisältää tietyn levyn laitteistoon liittyviä funktioita. Useimmat tämän moduulin funktiot mahdollistavat suoran ja rajoittamattoman pääsyn järjestelmän laitteistolohkoihin (kuten suorittimeen, ajastimiin, väyliin jne.) ja niiden hallinnan.
Muistin käyttö¶
Moduuli tarjoaa kolme indeksoitavaa objektia raakaan muistin käyttöön. Kukin toimii kuten harva taulukko, joka indeksoidaan tavuosoitteen mukaan: value = memN[addr] lukee, memN[addr] = value kirjoittaa. Osoite on aina tavuosoite riippumatta käytön leveydestä.
- machine.mem8¶
Indeksoitava 8-bittinen muistin lukija.
mem8[addr]lukeeint-arvon välillä 0-255 osoitteessaaddrolevasta tavusta;mem8[addr] = valuekirjoittaa arvonvaluealimmat 8 bittiä.addron kohdistettava 1 tavuun (mikä tahansa osoite).
- machine.mem16¶
Indeksoitava 16-bittinen (puolisana) muistin lukija.
mem16[addr]lukeeint-arvon välillä 0-65535;mem16[addr] = valuekirjoittaa alimmat 16 bittiä.addron kohdistettava 2 tavuun.
- machine.mem32¶
Indeksoitava 32-bittinen (sana) muistin lukija.
mem32[addr]lukeeint-arvon välillä 0-0xFFFFFFFF;mem32[addr] = valuekirjoittaa alimmat 32 bittiä.addron kohdistettava 4 tavuun.
Esimerkkikäyttö (rekisterit ovat STM32H7-mikro-ohjaimelle erityisiä – OpenMV Cam H7 / H7 Plus / Pure Thermal -malleissa liitinnasta P0 on kytketty nastaan 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
Sekalaiset funktiot¶
- machine.unique_id() bytes¶
Palauta
bytes-objekti, joka sisältää tämän levyn yksilöllisen tunnisteen. Arvo luetaan MCU:n laitteistosta (tyypillisesti tehtaalla ohjelmoitu laitteen sarjanumero), joten se on vakaa uudelleenkäynnistysten yli ja eroaa levystä toiseen.Pituus riippuu MCU-perheestä – 12 tavua STM32:lla, 8 tavua mimxrt- ja alif-porteissa. Jos sovelluksesi tarvitsee kiinteäpituisen tunnisteen, viipaloi tai tiivistä palautettu arvo.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mittaa yksittäisen pulssin leveys nastassa
pinja palauta sen kesto mikrosekunteina.pinon määritettävä digitaaliseksi tuloksi.pulse_levelon ajastettavan pulssin polariteetti:1korkealle pulssille,0matalalle pulssille.Funktio toimii kahdessa vaiheessa. Ensin, jos nasta ei ole jo tilassa
pulse_level, se odottaa nastan siirtymistä tilaanpulse_level(pulssin alku). Sitten se mittaa ajan, jonka nasta pysyy tilassapulse_levelennen siirtymistä takaisin (pulssin loppu). Mitattu aika palautetaan mikrosekunteina.timeout_usrajaa kunkin vaiheen erikseen (joten pahimmassa tapauksessa kutsu kestää enintään2 * timeout_us). Aikakatkaisun yhteydessä funktio palauttaa negatiivisen arvon, joka ilmaisee, mikä vaihe aikakatkaistui:-2– aikakatkaistui odotettaessa nousevaa reunaa (nasta ei koskaan saavuttanut tilaapulse_level).-1– aikakatkaistui odotettaessa laskevaa reunaa (pulssi oli pidempi kuintimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Lähettää datan data nastaa pin bit-bangaamalla. Argumentti encoding määrittää, miten bitit koodataan, ja timing on koodaukseen liittyvä ajoitusmääritys.
Tuetut koodaukset ovat:
0”high low” -pulssin keston modulaatiolle. Tämä lähettää 0- ja 1-bitit ajastettuina pulsseina alkaen merkitsevimmästä bitistä. timing-arvon on oltava neljän nanosekunnin monikko muodossa(high_time_0, low_time_0, high_time_1, low_time_1). Esimerkiksi(400, 850, 800, 450)on ajoitusmääritys WS2812 RGB -LEDeille 800 kHz:llä.
Ajoituksen tarkkuus on laitteistoriippuvaista; nopeammat MCU:t tuottavat tarkempia pulsseja (tyypillisesti kymmeniä nanosekunteja).
Muista
WS2812- / NeoPixel-nauhojen ohjaamiseen katso
neopixel-moduuli, joka tarjoaa korkeamman tason API:n.
Vakiot¶
Alla olevat vakiot palauttaa reset_cause(), ja ne ilmaisevat, miksi MCU viimeksi nollautui. Saatavilla STM32- ja mimxrt-porteissa; alif-portti (OpenMV Cam AE3) ei tällä hetkellä tarjoa nollauksen syyn vakioita, ja sen reset_cause() palauttaa aina 0.
- machine.PWRON_RESET: int¶
Nollaus, jonka aiheutti virran kytkeminen sirulle. STM32- ja mimxrt-portit.
- machine.WDT_RESET: int¶
Nollaus, jonka aiheutti vahtikoira-ajastimen vanheneminen. STM32- ja mimxrt-portit.
- machine.SOFT_RESET: int¶
Nollaus, jonka aiheutti
soft_reset()(Python-tulkki käynnistyi uudelleen ilman laitteistonollausta). STM32- ja mimxrt-portit.
Luokat¶
- class Pin – I/O-nastojen ohjaus
- class Signal – ohjaa ja aisti ulkoisia I/O-laitteita
- luokka LED – siirrettävä kortilla olevan LEDin ohjaus
- class ADC – analogia-digitaalimuunnos
- luokka PWM – pulssinleveysmodulaatio
- class UART – kaksisuuntainen sarjaliikenneväylä
- class SPI – Serial Peripheral Interface -väyläprotokolla (ohjainpuoli)
- class SoftSPI – ohjelmistolla emuloitu SPI-väylä
- class I2C – kaksijohtiminen sarjaprotokolla
- class SoftI2C – ohjelmistoemuloitu I2C-väylä
- class I2CTarget – I2C-kohdelaite
- luokka I2S – Inter-IC Sound -väyläprotokolla
- class CAN – Controller Area Network -protokolla
- class RTC – reaaliaikakello
- class Timer – virtuaalinen jaksollinen / kertalaukaiseva ajastin
- class WDT – vahtikoira-ajastin
- class SDCard – SD / MMC -korttiajuri
- class Counter – pulssilaskuri
- class Encoder – kvadratuuridekooderi