machine --- الدوال المتعلقة بالعتاد¶
تحتوي وحدة machine على دوال محددة متعلقة بالعتاد على لوحة معينة. تتيح معظم الدوال في هذه الوحدة تحقيق وصول مباشر وغير مقيّد إلى كتل العتاد في النظام والتحكم فيها (مثل وحدة المعالجة المركزية والمؤقتات والنواقل، إلخ).
الوصول إلى الذاكرة¶
تكشف الوحدة عن ثلاثة كائنات قابلة للفهرسة تُستخدم للوصول الخام إلى الذاكرة. يتصرّف كل منها مثل مصفوفة متفرقة مفهرسة بعنوان البايت: value = memN[addr] للقراءة، وmemN[addr] = value للكتابة. العنوان هو دائمًا عنوان بايت، بغض النظر عن عرض الوصول.
- machine.mem8¶
مُوصِّل ذاكرة قابل للفهرسة بعرض 8 بتات.
mem8[addr]يقرأ قيمةintفي النطاق 0-255 من البايت عندaddr؛ وmem8[addr] = valueيكتب البتات الثمانية المنخفضة منvalue. يجب أن يكونaddrمحاذيًا إلى بايت واحد (أي عنوان).
- machine.mem16¶
مُوصِّل ذاكرة قابل للفهرسة بعرض 16 بت (نصف كلمة).
mem16[addr]يقرأ قيمةintفي النطاق 0-65535؛ وmem16[addr] = valueيكتب البتات الستة عشرة المنخفضة. يجب أن يكونaddrمحاذيًا إلى بايتين.
- machine.mem32¶
مُوصِّل ذاكرة قابل للفهرسة بعرض 32 بت (كلمة).
mem32[addr]يقرأ قيمةintفي النطاق 0-0xFFFFFFFF؛ وmem32[addr] = valueيكتب البتات الاثنتين والثلاثين المنخفضة. يجب أن يكون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يحتوي على معرّف فريد لهذه اللوحة. تُقرأ القيمة من عتاد المتحكم الدقيق (عادةً الرقم التسلسلي للجهاز المبرمج في المصنع)، لذا فهي ثابتة عبر عمليات إعادة التشغيل وتختلف من لوحة إلى أخرى.يعتمد الطول على عائلة المتحكم الدقيق -- 12 بايت على STM32، و8 بايتات على منفذي mimxrt وalif. إذا كان تطبيقك يحتاج إلى معرّف ثابت الطول، فقم بتقطيع القيمة المُرجعة أو تجزئتها.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
قياس عرض نبضة واحدة على
pinوإرجاع مدتها بالميكروثانية.يجب تهيئة
pinكدخل رقمي.pulse_levelهو قطبية النبضة المراد توقيتها:1لنبضة مرتفعة،0لنبضة منخفضة.تعمل الدالة على مرحلتين. أولًا، إذا لم يكن الدبوس عند
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-banging) على الدبوس المحدد pin. يحدّد الوسيط encoding كيفية ترميز البتات، وtiming هو مواصفة توقيت خاصة بالترميز.
الترميزات المدعومة هي:
0لتعديل مدة النبضة من نوع "مرتفع منخفض". سيرسل هذا البتين 0 و1 كنبضات موقّتة، بدءًا من البت الأكثر أهمية. يجب أن يكون timing صفًا رباعيًا من النانوثواني بالصيغة(high_time_0, low_time_0, high_time_1, low_time_1). على سبيل المثال،(400, 850, 800, 450)هي مواصفة التوقيت لمصابيح WS2812 RGB LED عند 800kHz.
تعتمد دقة التوقيت على العتاد؛ تنتج المتحكمات الدقيقة الأسرع نبضات أكثر إحكامًا (عادةً عشرات النانوثواني).
ملاحظة
للتحكم في شرائط WS2812 / NeoPixel، انظر وحدة
neopixelللحصول على واجهة برمجية عالية المستوى.
الثوابت¶
تُرجع الثوابت أدناه من قِبل reset_cause() وتحدد سبب آخر إعادة تعيين للمتحكم الدقيق. متاحة على منفذي STM32 وmimxrt؛ ولا يكشف منفذ alif (OpenMV Cam AE3) حاليًا عن ثوابت سبب إعادة التعيين، ويُرجع reset_cause() الخاص به دائمًا 0 .
- machine.SOFT_RESET: int¶
إعادة تعيين سببها
soft_reset()(أُعيد تشغيل مفسّر Python دون إعادة تعيين عتادية). منفذا STM32 وmimxrt.
الفئات¶
- class Pin -- التحكم في دبابيس الإدخال/الإخراج
- class Signal -- التحكم في أجهزة الإدخال/الإخراج الخارجية واستشعارها
- الفئة LED -- تحكم محمول في مؤشر LED المدمج على اللوحة
- class ADC -- التحويل من التماثلي إلى الرقمي
- الفئة PWM -- تعديل عرض النبضة (pulse-width modulation)
- class UART -- ناقل اتصالات تسلسلية ثنائي الاتجاه
- class SPI -- بروتوكول ناقل واجهة الطرفيات التسلسلية (جانب وحدة التحكم)
- class SoftSPI -- ناقل SPI مُحاكى برمجيًا
- الصنف I2C -- بروتوكول تسلسلي ثنائي الأسلاك
- الصنف SoftI2C -- ناقل I2C مُحاكى برمجياً
- الصنف I2CTarget -- جهاز هدف I2C
- الفئة I2S -- بروتوكول ناقل الصوت بين الدوائر المتكاملة (Inter-IC Sound)
- الفئة CAN -- بروتوكول شبكة منطقة التحكم (Controller Area Network)
- class RTC -- ساعة الوقت الحقيقي
- class Timer -- مؤقت دوري / أحادي الطلقة افتراضي
- class WDT -- مؤقت المراقبة (watchdog)
- class SDCard -- مشغّل بطاقات SD / MMC
- class Counter -- عدّاد النبضات
- class Encoder -- مُرمِّز تربيعي