الصنف StateMachine -- الوصول إلى واجهة الإدخال/الإخراج القابل للبرمجة في RP2040¶
يتيح الصنف StateMachine الوصول إلى واجهة PIO (الإدخال/الإخراج القابل للبرمجة) في RP2040.
لتجميع برامج PIO، راجع rp2.asm_pio().
البانيات (Constructors)¶
- class rp2.StateMachine(id: int, program: Callable | None = None, *args, **kwargs)¶
الحصول على آلة الحالة المرقّمة id. يحتوي RP2040 على نسختي PIO متطابقتين، كل منهما بأربع آلات حالة: فيكون المجموع 8 آلات حالة، مرقّمة من 0 إلى 7.
اختيارياً، هيّئها بالبرنامج المعطى program: راجع
StateMachine.init.- init(program: Callable, freq: int = -1, *, in_base: machine.Pin | None = None, out_base: machine.Pin | None = None, set_base: machine.Pin | None = None, jmp_pin: machine.Pin | None = None, sideset_base: machine.Pin | None = None, in_shiftdir: int | None = None, out_shiftdir: int | None = None, push_thresh: int | None = None, pull_thresh: int | None = None) None¶
تهيئة نسخة آلة الحالة لتشغيل البرنامج المعطى program.
يُضاف البرنامج إلى ذاكرة تعليمات نسخة PIO هذه. إذا كانت ذاكرة التعليمات تحتوي بالفعل على هذا البرنامج، يُعاد استخدام إزاحته توفيراً لذاكرة التعليمات.
freq هو التردد بالهرتز الذي تُشغَّل به آلة الحالة. القيمة الافتراضية هي تردد ساعة النظام.
يُحسب مقسّم الساعة على أنه
system clock frequency / freq، لذا قد تحدث أخطاء تقريب طفيفة.أصغر مقسّم ساعة ممكن هو جزء من 65536 من ساعة النظام: فعند تردد ساعة النظام الافتراضي البالغ 125MHz، تكون القيمة الدنيا لـ freq هي
1908. لتشغيل آلات الحالة بترددات أبطأ، ستحتاج إلى خفض سرعة ساعة النظام باستخدامmachine.freq().in_base هو أول دبوس يُستخدم لتعليمات
in().out_base هو أول دبوس يُستخدم لتعليمات
out().set_base هو أول دبوس يُستخدم لتعليمات
set().jmp_pin هو أول دبوس يُستخدم لتعليمات
jmp(pin, ...).sideset_base هو أول دبوس يُستخدم للضبط الجانبي (side-setting).
in_shiftdir هو الاتجاه الذي سيُزيح فيه ISR، إما
PIO.SHIFT_LEFTأوPIO.SHIFT_RIGHT.out_shiftdir هو الاتجاه الذي سيُزيح فيه OSR، إما
PIO.SHIFT_LEFTأوPIO.SHIFT_RIGHT.push_thresh هو العتبة بالبتات قبل تشغيل الدفع التلقائي أو إعادة الدفع المشروطة.
pull_thresh هو العتبة بالبتات قبل تشغيل السحب التلقائي أو إعادة السحب المشروطة.
ملاحظة: يجب تهيئة الدبابيس المستخدمة لـ in_base يدوياً كمدخل (أو غير ذلك) حتى يتمكن PIO من رؤية الإشارة المطلوبة (يمكن أن تكون دبابيس إدخال أو دبابيس إخراج أو متصلة بطرفية مختلفة). يمكن أيضاً تهيئة jmp_pin يدوياً، لكنه افتراضياً سيكون دبوس إدخال.
- active(value: bool | int | None = None, /) bool¶
الحصول على ما إذا كانت آلة الحالة قيد التشغيل حالياً أو ضبطه.
>>> sm.active() True >>> sm.active(0) False
- restart() None¶
إعادة تشغيل آلة الحالة والقفز إلى بداية البرنامج.
تمسح هذه الطريقة الحالة الداخلية لآلة الحالة باستخدام سجل
SM_RESTARTالخاص بـ RP2040. ويشمل ذلك:عدّادات إزاحة الإدخال والإخراج
محتويات سجل إزاحة الإدخال
عدّاد التأخير
حالة الانتظار على IRQ
تعليمة متوقفة شُغّلت باستخدام
StateMachine.exec()
- exec(instr: str | int) None¶
تنفيذ تعليمة PIO واحدة.
إذا كان instr سلسلة نصية، فإنه يستخدم
asm_pio_encodeلترميز التعليمة من السلسلة المعطاة.>>> sm.exec("set(0, 1)")إذا كان instr عدداً صحيحاً، فإنه يُعامَل كتعليمة شيفرة آلة PIO مرمّزة مسبقاً سيتم تنفيذها.
>>> sm.exec(rp2.asm_pio_encode("out(y, 8)", 0))
- get(buf: 'bytearray | array | None' = None, shift: int = 0) int¶
سحب كلمة من طابور RX FIFO لآلة الحالة.
إذا كان الطابور فارغاً، فإنه يحجب حتى تصل البيانات (أي حتى تدفع آلة الحالة كلمة).
تُزاح القيمة إلى اليمين بمقدار shift بتاً قبل الإرجاع، أي أن القيمة المُرجعة هي
word >> shift.
- put(value: 'int | bytes | bytearray | array', shift: int = 0) None¶
دفع كلمات إلى طابور TX FIFO لآلة الحالة.
يمكن أن يكون value عدداً صحيحاً، أو مصفوفة من النوع
BأوHأوI، أوbytearray.ستحجب هذه الطريقة حتى تُكتب جميع الكلمات إلى الطابور. إذا كان الطابور ممتلئاً أو أصبح ممتلئاً، ستحجب الطريقة حتى تسحب آلة الحالة كلمات كافية لإكمال الكتابة.
تُزاح كل كلمة أولاً إلى اليسار بمقدار shift بتاً، أي أن آلة الحالة تستقبل
word << shift.
- rx_fifo() int¶
إرجاع عدد الكلمات في طابور RX FIFO لآلة الحالة. القيمة 0 تشير إلى أن الطابور فارغ.
مفيد للتحقق مما إذا كانت هناك بيانات بانتظار القراءة، قبل استدعاء
StateMachine.get().
- tx_fifo() int¶
إرجاع عدد الكلمات في طابور TX FIFO لآلة الحالة. القيمة 0 تشير إلى أن الطابور فارغ.
مفيد للتحقق مما إذا كانت هناك مساحة لدفع كلمة أخرى باستخدام
StateMachine.put().
بروتوكول المخزن المؤقت (buffer protocol)¶
يدعم الصنف StateMachine الـ buffer protocol، مما يتيح الوصول المباشر إلى طوابير FIFO للإرسال والاستقبال لكل آلة حالة. والغرض الأساسي من ذلك هو السماح بتمرير كائنات StateMachine مباشرة كمعاملات قراءة أو كتابة عند إعداد قناة rp2.DMA().