machine — donanımla ilgili işlevler¶
machine modülü, belirli bir karttaki donanımla ilgili özel işlevler içerir. Bu modüldeki işlevlerin çoğu, bir sistemdeki donanım bloklarına (CPU, zamanlayıcılar, veri yolları vb.) doğrudan ve kısıtlamasız erişim ve denetim sağlar.
Bellek erişimi¶
Modül, ham bellek erişimi için kullanılan, indeks atanabilir üç nesne sunar. Her biri bayt adresine göre indekslenen seyrek bir dizi gibi davranır: value = memN[addr] okur, memN[addr] = value yazar. Adres, erişim genişliğinden bağımsız olarak her zaman bir bayt adresidir.
- machine.mem8¶
İndeks atanabilir 8 bitlik bellek erişimcisi.
mem8[addr]addr‘deki bayttan 0-255 aralığında birintokur;mem8[addr] = valuevalue‘nun düşük 8 bitini yazar.addr1 bayta hizalanmış olmalıdır (herhangi bir adres).
- machine.mem16¶
İndeks atanabilir 16 bitlik (yarım sözcük) bellek erişimcisi.
mem16[addr]0-65535 aralığında birintokur;mem16[addr] = valuedüşük 16 biti yazar.addr2 bayta hizalanmış olmalıdır.
- machine.mem32¶
İndeks atanabilir 32 bitlik (sözcük) bellek erişimcisi.
mem32[addr]0-0xFFFFFFFF aralığında birintokur;mem32[addr] = valuedüşük 32 biti yazar.addr4 bayta hizalanmış olmalıdır.
Örnek kullanım (yazmaçlar bir STM32H7 mikrodenetleyiciye özgüdür; OpenMV Cam H7 / H7 Plus / Pure Thermal üzerinde P0 başlık pini PB15‘e bağlıdır):
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
Çeşitli işlevler¶
- machine.unique_id() bytes¶
Bu kart için benzersiz bir tanımlayıcı içeren bir
bytesnesnesi döndürür. Değer MCU’nun donanımından okunur (genellikle fabrikada programlanmış aygıt seri numarası); bu nedenle yeniden başlatmalar arasında kararlıdır ve karttan karta farklılık gösterir.Uzunluk MCU ailesine bağlıdır; STM32’de 12 bayt, mimxrt ve alif portlarında 8 bayt. Uygulamanız sabit uzunlukta bir ID’ye ihtiyaç duyuyorsa döndürülen değeri dilimleyin veya karma değerini (hash) alın.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
pinüzerindeki tek bir darbenin genişliğini ölçer ve süresini mikrosaniye cinsinden döndürür.pindijital giriş olarak yapılandırılmış olmalıdır.pulse_levelzamanlanacak darbe polaritesidir: yüksek darbe için1, düşük darbe için0.İşlev iki aşamada çalışır. İlk olarak, pin zaten
pulse_leveldeğerinde değilse, pininpulse_leveldeğerine geçmesini bekler (darbenin başlangıcı). Ardından pinin geri geçmeden öncepulse_leveldeğerinde kaldığı süreyi ölçer (darbenin sonu). Ölçülen süre mikrosaniye cinsinden döndürülür.timeout_usher aşamayı bağımsız olarak sınırlar (yani en kötü durumda bir çağrı2 * timeout_us‘a kadar sürer). Zaman aşımında işlev, hangi aşamanın zaman aşımına uğradığını belirten negatif bir değer döndürür:-2– öncü kenarı beklerken zaman aşımına uğradı (pin hiçbir zamanpulse_leveldeğerine ulaşmadı).-1– art kenarı beklerken zaman aşımına uğradı (darbetimeout_us‘tan daha uzundu).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Belirtilen pin üzerinde bit-banging yaparak data iletir. encoding argümanı bitlerin nasıl kodlandığını belirtir ve timing kodlamaya özgü bir zamanlama belirtimidir.
Desteklenen kodlamalar şunlardır:
“yüksek düşük” darbe süresi modülasyonu için
0. Bu, 0 ve 1 bitlerini en anlamlı bitten başlayarak zamanlanmış darbeler olarak iletir. timing,(high_time_0, low_time_0, high_time_1, low_time_1)biçiminde nanosaniyelerden oluşan dört öğeli bir demet olmalıdır. Örneğin(400, 850, 800, 450), 800kHz’de WS2812 RGB LED’leri için zamanlama belirtimidir.
Zamanlama doğruluğu donanıma bağlıdır; daha hızlı MCU’lar daha sıkı darbeler (genellikle onlarca nanosaniye) üretir.
Not
WS2812 / NeoPixel şeritlerini denetlemek için daha üst düzey bir API için
neopixelmodülüne bakın.
Sabitler¶
Aşağıdaki sabitler reset_cause() tarafından döndürülür ve MCU’nun en son neden sıfırlandığını belirtir. STM32 ve mimxrt portlarında kullanılabilir; alif portu (OpenMV Cam AE3) şu anda sıfırlama nedeni sabitlerini sunmaz ve reset_cause() her zaman 0 döndürür.
- machine.PWRON_RESET: int¶
Yonga gücün uygulanmasından kaynaklanan sıfırlama. STM32 ve mimxrt portları.
- machine.WDT_RESET: int¶
Bekçi köpeği zamanlayıcısının süresinin dolmasından kaynaklanan sıfırlama. STM32 ve mimxrt portları.
- machine.SOFT_RESET: int¶
soft_reset()tarafından gerçekleştirilen sıfırlama (Python yorumlayıcısı donanımsal sıfırlama olmadan yeniden başlatıldı). STM32 ve mimxrt portları.
Sınıflar¶
- class Pin – G/Ç pinlerini denetler
- class Signal – harici I/O aygıtlarını denetleme ve algılama
- class LED – taşınabilir kart üzeri LED denetimi
- class ADC – analogdan dijitale dönüştürme
- class PWM – darbe genişlik modülasyonu
- class UART – çift yönlü seri iletişim veri yolu
- class SPI – bir Seri Çevresel Arayüz veri yolu protokolü (denetleyici tarafı)
- class SoftSPI – yazılımla taklit edilen SPI veri yolu
- class I2C – iki telli bir seri protokol
- class SoftI2C – yazılımla taklit edilen I2C veri yolu
- class I2CTarget – bir I2C hedef cihazı
- class I2S – Inter-IC Sound veri yolu protokolü
- class CAN – Controller Area Network protokolü
- class RTC – gerçek zamanlı saat
- class Timer – sanal periyodik / tek seferlik zamanlayıcı
- class WDT – bekçi köpeği zamanlayıcısı (watchdog timer)
- class SDCard – SD / MMC kart sürücüsü
- class Counter – darbe sayacı
- class Encoder – kuadratür çözücü