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