الصنف PIO -- الاستخدام المتقدم لـ PIO¶
يغلّف الصنف PIO إحدى كتلتي الإدخال/الإخراج القابل للبرمجة (PIO) في RP2040. تحتوي كل كتلة PIO على ذاكرة تعليمات (32 تعليمة) مشتركة بين أربع آلات حالة مستقلة، إضافة إلى واجهة FIFO خاصة لكل آلة حالة ووحدة تحكم بالـ IRQ.
تتفاعل معظم البرامج النصية مع PIO من خلال StateMachine -- هذا الصنف مخصّص لحالات الاستخدام المتقدمة التي تحتاج إلى:
تحميل البرامج وإزالتها بشكل صريح عبر
add_program()/remove_program().تحريك قاعدة GPIO الخاصة بـ PIO عبر نافذة الـ 32 دبوساً للشريحة باستخدام
gpio_base().الارتباط بأعلام IRQ على مستوى الكتلة بأكملها عبر
irq().
لتجميع برامج PIO راجع rp2.asm_pio().
البانيات (Constructors)¶
- class rp2.PIO(id: int)¶
إرجاع كائن
PIOالمفرد لكتلة PIO المحدّدة بـid. يحتوي RP2040 على كتلتي PIO، مرقّمتين0و1. يثيرValueErrorلأي معرّف آخر.الطرائق (Methods)¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
الحصول على قاعدة GPIO لكتلة PIO هذه أو ضبطها.
يرى PIO الخاص بـ RP2040 نافذة من 32 دبوساً ضمن فضاء GPIO؛ يمكن أن تبدأ النافذة عند GPIO0 أو GPIO16. تتحكم القاعدة في النافذة السارية لجميع آلات الحالة على هذا الـ PIO.
بدون وسيط، يُرجع القاعدة الحالية (رقم دبوس GPIO،
0أو16).مع وسيط، يضبط القاعدة. قد يكون
baseنسخة منmachine.Pinأو رقم الدبوس الصحيح، ويجب أن يُحلّ إلى GPIO0 أو GPIO16. يجب ضبط القاعدة قبل إضافة أي برنامج أو بناء أي آلة حالة على كتلة PIO هذه.
- add_program(program: Callable) None¶
تحميل
programإلى ذاكرة تعليمات هذا الـ PIO. يُعاد استخدام تخطيط الذاكرة الناتج عبر جميع آلات الحالة على كتلة PIO هذه.لكل PIO 32 تعليمة فقط من ذاكرة البرنامج المشتركة بين جميع البرامج؛ إذا لم يتّسع البرنامج الجديد، تثير هذه الطريقة
OSError(ENOMEM). يمكن تحميل البرنامج نفسه على كلتا نسختي PIO، لكنهما تستهلكان مناطق ذاكرة منفصلة.
- remove_program(program: Callable | None = None, /) None¶
إزالة
programمن ذاكرة تعليمات هذا الـ PIO، مما يحرر مساحة لبرامج جديدة. إذا حُذفprogram، تُزال جميع البرامج المحمّلة حالياً على هذا الـ PIO.إزالة برنامج لم يكن محمّلاً هي عملية لا تأثير لها (دون استثناء).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
إرجاع إحدى نسخ
StateMachineالأربع التي تملكها كتلة PIO هذه.idهو فهرس آلة الحالة المحلي (0--3).إذا قُدّم
program، تُهيّأ آلة الحالة لتشغيله -- وتُمرّر جميع الوسائط الموضعية/المفتاحية إلىStateMachine.init().مثال:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
المعرّف العام لآلة الحالة للكائن المُرجع هو
pio_id * 4 + sm_id.
- irq(handler: Callable[[PIO], None] | None = None, trigger: int = IRQ_SM0 | IRQ_SM1 | IRQ_SM2 | IRQ_SM3, hard: bool = False) Callable¶
الحصول على IRQ على مستوى الكتلة لهذا الـ PIO أو إعداده.
handlerهو دالة رد النداء التي تُطلق عندما يثبّت أي من IRQ آلات الحالة المطلوبة. يستقبل المعالج نسخةPIOهذه كوسيطه الوحيد؛ داخل المعالج يمكن تحديد آلات الحالة المُطلِقة عبرself.irq().flags()مع تطبيق عملية AND مقابل الثوابتIRQ_SM*.triggerهو قناع بتّي لواحد أو أكثر منIRQ_SM0..IRQ_SM3. الافتراضي يُطلق على أي آلة حالة.hard=Trueيسجّل معالج مقاطعة صلبة (دون تخصيص في الكومة داخل دالة رد النداء).يربط MicroPython الـ IRQ 0 على كل كتلة PIO؛ أما الـ IRQ 1 فمحجوز وغير قابل للوصول من Python.
الثوابت¶
- IN_LOW: int¶
مرّره إلى
out_init/set_init/sideset_initلـasm_pio()بحيث يبدأ الدبوس كمدخل مدفوع إلى المستوى المنخفض (أي حالة ثلاثية مع احتفاظ مخزن الإخراج المؤقت بقيمة 0).
- IN_HIGH: int¶
مرّره إلى
out_init/set_init/sideset_initلـasm_pio()بحيث يبدأ الدبوس كمدخل مع احتفاظ مخزن الإخراج المؤقت بقيمة 1.
- OUT_LOW: int¶
مرّره إلى
out_init/set_init/sideset_initلـasm_pio()بحيث يبدأ الدبوس كمخرج مدفوع عند المستوى المنطقي 0.
- OUT_HIGH: int¶
مرّره إلى
out_init/set_init/sideset_initلـasm_pio()بحيث يبدأ الدبوس كمخرج مدفوع عند المستوى المنطقي 1.
- SHIFT_LEFT: int¶
مرّره إلى
in_shiftdir/out_shiftdirلـasm_pio()أوStateMachine.init()بحيث تحرّك الإزاحات البتات نحو البت الأكثر أهمية (MSB).
- SHIFT_RIGHT: int¶
مرّره إلى
in_shiftdir/out_shiftdirلـasm_pio()أوStateMachine.init()بحيث تحرّك الإزاحات البتات نحو البت الأقل أهمية (LSB).
- JOIN_NONE: int¶
مرّره إلى
fifo_joinلـasm_pio()بحيث تمتلك آلة الحالة طابورَي FIFO منفصلين بسعة 4 كلمات للإرسال والاستقبال (الافتراضي).
- JOIN_TX: int¶
مرّره إلى
fifo_joinلـasm_pio()بحيث يتضاعف طابور TX FIFO إلى 8 كلمات بامتصاص طابور RX FIFO. لم يعد بإمكان آلة الحالة استقبال البيانات.