machine --- ฟังก์ชันที่เกี่ยวข้องกับฮาร์ดแวร์¶
โมดูล machine ประกอบด้วยฟังก์ชันเฉพาะที่เกี่ยวข้องกับฮาร์ดแวร์บนบอร์ดนั้นๆ ฟังก์ชันส่วนใหญ่ในโมดูลนี้ช่วยให้สามารถเข้าถึงและควบคุมบล็อกฮาร์ดแวร์บนระบบได้โดยตรงและไม่จำกัด (เช่น CPU, ตัวจับเวลา, บัส เป็นต้น)
การเข้าถึงหน่วยความจำ¶
โมดูลนี้เปิดเผยออบเจ็กต์แบบ subscriptable สามตัวสำหรับการเข้าถึงหน่วยความจำดิบ แต่ละตัวทำงานเหมือน sparse array ที่ใช้ที่อยู่ไบต์เป็นดัชนี: value = memN[addr] อ่าน และ memN[addr] = value เขียน ที่อยู่เป็นที่อยู่ไบต์เสมอโดยไม่คำนึงถึงความกว้างในการเข้าถึง
- machine.mem8¶
ตัวเข้าถึงหน่วยความจำ 8 บิตแบบ subscriptable
mem8[addr]อ่านintในช่วง 0-255 จากไบต์ที่addr;mem8[addr] = valueเขียน 8 บิตต่ำของvalueโดยaddrต้องอยู่ในแนวที่ 1 ไบต์ (ที่อยู่ใดก็ได้)
- machine.mem16¶
ตัวเข้าถึงหน่วยความจำ 16 บิต (halfword) แบบ subscriptable
mem16[addr]อ่านintในช่วง 0-65535;mem16[addr] = valueเขียน 16 บิตต่ำ โดยaddrต้องอยู่ในแนวที่ 2 ไบต์
- machine.mem32¶
ตัวเข้าถึงหน่วยความจำ 32 บิต (word) แบบ subscriptable
mem32[addr]อ่านintในช่วง 0-0xFFFFFFFF;mem32[addr] = valueเขียน 32 บิตต่ำ โดยaddrต้องอยู่ในแนวที่ 4 ไบต์
ตัวอย่างการใช้งาน (รีจิสเตอร์เฉพาะสำหรับไมโครคอนโทรลเลอร์ STM32H7 -- บน OpenMV Cam H7 / H7 Plus / Pure Thermal หัวต่อ P0 ต่อกับ 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
ฟังก์ชันเบ็ดเตล็ด¶
- machine.unique_id() bytes¶
คืนค่าออบเจ็กต์
bytesที่มีตัวระบุเฉพาะสำหรับบอร์ดนี้ ค่านี้อ่านจากฮาร์ดแวร์ของ MCU (โดยทั่วไปคือหมายเลขซีเรียลของอุปกรณ์ที่โปรแกรมมาจากโรงงาน) จึงคงที่ตลอดการรีบูตและแตกต่างกันในแต่ละบอร์ดความยาวขึ้นอยู่กับตระกูล MCU -- 12 ไบต์บน STM32, 8 ไบต์บนพอร์ต mimxrt และ alif หากแอปพลิเคชันต้องการ ID ความยาวคงที่ ให้ตัดหรือแฮชค่าที่คืนมา
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
วัดความกว้างของพัลส์เดียวบน
pinและคืนค่าระยะเวลาเป็นไมโครวินาทีpinต้องกำหนดค่าเป็นอินพุตดิจิทัลpulse_levelคือขั้วของพัลส์ที่จะจับเวลา:1สำหรับพัลส์สูง,0สำหรับพัลส์ต่ำฟังก์ชันทำงานใน 2 ระยะ ประการแรก หากพินยังไม่อยู่ที่
pulse_levelฟังก์ชันจะรอให้พินเปลี่ยนไปที่pulse_level(จุดเริ่มต้นของพัลส์) จากนั้นวัดเวลาที่พินอยู่ที่pulse_levelก่อนเปลี่ยนกลับ (จุดสิ้นสุดของพัลส์) เวลาที่วัดได้จะคืนค่าเป็นไมโครวินาทีtimeout_usจำกัด แต่ละ ระยะอย่างอิสระ (ดังนั้นการเรียกในกรณีเลวร้ายที่สุดจะใช้เวลาสูงสุด2 * timeout_us) เมื่อหมดเวลา ฟังก์ชันจะคืนค่าลบที่ระบุว่าระยะใดหมดเวลา:-2-- หมดเวลารอขอบนำ (พินไม่เคยถึงpulse_level)-1-- หมดเวลารอขอบตาม (พัลส์ยาวกว่าtimeout_us)
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
ส่ง data โดยการ bit-bang บน pin ที่ระบุ อาร์กิวเมนต์ encoding ระบุวิธีเข้ารหัสบิต และ timing คือข้อกำหนด timing เฉพาะสำหรับการเข้ารหัสนั้น
การเข้ารหัสที่รองรับ ได้แก่:
0สำหรับการมอดูเลตระยะเวลาพัลส์ "high low" ซึ่งจะส่งบิต 0 และ 1 เป็นพัลส์ที่จับเวลา โดยเริ่มจากบิตนัยสำคัญสูงสุด timing ต้องเป็น tuple สี่ค่าของนาโนวินาทีในรูปแบบ(high_time_0, low_time_0, high_time_1, low_time_1)ตัวอย่างเช่น(400, 850, 800, 450)คือข้อกำหนด timing สำหรับ LED RGB WS2812 ที่ 800kHz
ความแม่นยำของ timing ขึ้นอยู่กับฮาร์ดแวร์ MCU ที่เร็วกว่าจะให้พัลส์ที่แม่นยำกว่า (โดยทั่วไปหลักสิบนาโนวินาที)
Note
สำหรับการควบคุมแถบ WS2812 / NeoPixel ดูโมดูล
neopixelสำหรับ API ระดับสูง
ค่าคงที่¶
ค่าคงที่ด้านล่างถูกคืนค่าโดย reset_cause() เพื่อระบุสาเหตุที่ MCU รีเซ็ตครั้งล่าสุด ใช้ได้กับพอร์ต STM32 และ mimxrt; พอร์ต alif (OpenMV Cam AE3) ยังไม่เปิดเผยค่าคงที่สาเหตุรีเซ็ตและ reset_cause() จะคืนค่า 0 เสมอ
- machine.SOFT_RESET: int¶
รีเซ็ตจาก
soft_reset()(อินเทอร์พรีเตอร์ Python รีสตาร์ทโดยไม่มีการรีเซ็ตฮาร์ดแวร์) พอร์ต STM32 และ mimxrt
คลาส¶
- คลาส Pin -- ควบคุมพิน I/O
- class Signal -- ควบคุมและรับรู้ดีไวซ์ I/O ภายนอก
- คลาส LED -- การควบคุม LED บนบอร์ดแบบพกพา
- คลาส ADC -- การแปลงสัญญาณอนาล็อกเป็นดิจิทัล
- คลาส PWM -- การมอดูเลตความกว้างพัลส์
- class UART -- บัสสื่อสารอนุกรมแบบดูเพล็กซ์
- class SPI -- โปรโตคอลบัส Serial Peripheral Interface (ฝั่งคอนโทรลเลอร์)
- class SoftSPI -- บัส SPI แบบซอฟต์แวร์จำลอง
- คลาส I2C -- โปรโตคอลอนุกรมแบบสองสาย
- คลาส SoftI2C -- บัส I2C จำลองด้วยซอฟต์แวร์
- คลาส I2CTarget -- อุปกรณ์เป้าหมาย I2C
- คลาส I2S -- โปรโตคอลบัสเสียง Inter-IC
- คลาส CAN -- โปรโตคอล Controller Area Network
- คลาส RTC -- นาฬิกาเวลาจริง
- class Timer -- ตัวจับเวลาเสมือนแบบ periodic / one-shot
- class WDT -- ตัวจับเวลา watchdog
- class SDCard -- ไดรเวอร์การ์ด SD / MMC
- คลาส Counter -- ตัวนับพัลส์
- คลาส Encoder -- ตัวถอดรหัส quadrature