rp2 --- وظائف خاصة بـ RP2040¶
تحتوي وحدة rp2 على دوال وأصناف خاصة بـ RP2040، كما هو مستخدم في Raspberry Pi Pico.
راجع صحيفة بيانات RP2040 لـ Python لمزيد من المعلومات، و pico-micropython-examples للحصول على نماذج برمجية.
تعليمات لغة تجميع PIO¶
تُبرمَج آلات حالة PIO بلغة تجميع مخصّصة تحتوي على تسع تعليمات أساسية لآلة PIO. في MicroPython، تُكتب روتينات تجميع PIO على شكل دالة Python مزوّدة بالمُزخرِف @rp2.asm_pio()، وتستخدم بناء جملة Python. تدعم هذه الروتينات متغيرات Python القياسية والحساب، إضافةً إلى الدوال المخصّصة التالية التي تُرمّز تعليمات PIO وتوجّه المُجمِّع. راجع القسم 3.4 من صحيفة بيانات RP2040 لمزيد من التفاصيل.
- wrap_target()
يحدّد الموقع الذي يستمر فيه التنفيذ بعد التفاف البرنامج. افتراضياً يكون هذا هو بداية روتين PIO.
- wrap()
يحدّد الموقع الذي ينتهي عنده البرنامج ويلتف. إذا لم يُستخدَم هذا التوجيه فإنه يُضاف تلقائياً في نهاية روتين PIO. لا يكلّف الالتفاف أي دورات تنفيذ.
- label(label)
يعرّف تسمية باسم label في الموقع الحالي. يمكن أن تكون label سلسلة نصية أو عدداً صحيحاً.
- word(instr, label=None)
يُدرج كلمة عشوائية بطول 16 بت في الخرج المُجمَّع.
instr: القيمة ذات الـ 16 بت
label: إذا أُعطيت، يبحث عن التسمية ويُجري عملية OR منطقية بين قيمة التسمية و instr
- jmp(...)
تأخذ هذه التعليمة شكلين:
- jmp(label)
label: التسمية المراد القفز إليها دون شرط
- jmp(cond, label)
cond: الشرط المراد التحقق منه، وهو واحد مما يلي:
not_xوnot_y: صحيح إذا كان السجل صفراًx_decوy_dec: صحيح إذا كان السجل غير صفري، مع إجراء إنقاص لاحقx_not_y: صحيح إذا كان X لا يساوي Ypin: صحيح إذا كان دبوس الدخل مضبوطاًnot_osre: صحيح إذا لم يكن OSR فارغاً (لم يبلغ عتبته)
label: التسمية المراد القفز إليها إذا كان الشرط صحيحاً
- wait(polarity, src, index)
يحجب التنفيذ، منتظراً قيمة مرتفعة/منخفضة على دبوس أو خط IRQ.
polarity: 0 أو 1، يحدّد ما إذا كان سينتظر قيمة منخفضة أم مرتفعة
src: واحد مما يلي:
gpio(دبوس مطلق)،pin(دبوس نسبي إلى معاملin_baseلـ StateMachine)،irqindex: من 0 إلى 31، الفهرس الخاص بـ src
- in_(src, bit_count)
يُزيح البيانات من src إلى ISR.
src: واحد مما يلي:
pinsأوxأوyأوnullأوisrأوosrbit_count: عدد البتات المراد إزاحتها للداخل (من 1 إلى 32)
- out(dest, bit_count)
يُزيح البيانات من OSR إلى dest.
dest: واحد مما يلي:
pinsأوxأوyأوpindirsأوpcأوisrأوexecbit_count: عدد البتات المراد إزاحتها للخارج (من 1 إلى 32)
- push(...)
يدفع ISR إلى طابور RX FIFO، ثم يمسح ISR إلى صفر. تأخذ هذه التعليمة الأشكال التالية:
push()
push(block)
push(noblock)
push(iffull)
push(iffull, block)
push(iffull, noblock)
إذا استُخدِم
blockفإن التعليمة تتوقف إذا كان طابور RX FIFO ممتلئاً. السلوك الافتراضي هو الحجب. إذا استُخدِمiffullفإنه يدفع فقط إذا بلغ عدد الإزاحات الداخلة عتبته.- pull(...)
يسحب من طابور TX FIFO إلى OSR. تأخذ هذه التعليمة الأشكال التالية:
pull()
pull(block)
pull(noblock)
pull(ifempty)
pull(ifempty, block)
pull(ifempty, noblock)
إذا استُخدِم
blockفإن التعليمة تتوقف إذا كان طابور TX FIFO فارغاً. السلوك الافتراضي هو الحجب. إذا استُخدِمifemptyفإنه يسحب فقط إذا بلغ عدد الإزاحات الخارجة عتبته.- mov(dest, src)
ينقل إلى dest القيمة من src.
dest: واحد مما يلي:
pinsأوxأوyأوexecأوpcأوisrأوosrsrc: واحد مما يلي:
pinsأوxأوyأوnullأوstatusأوisrأوosr؛ ويمكن تعديل هذا المعامل اختيارياً بتغليفه بـinvert()أوreverse()(ولكن ليس كليهما معاً).
- irq(...)
يضبط أو يمسح راية IRQ. تأخذ هذه التعليمة شكلين:
- irq(index)
index: من 0 إلى 7، أو من
rel(0)إلىrel(7)
- irq(mode, index)
mode: واحد مما يلي:
blockأوclearindex: من 0 إلى 7، أو من
rel(0)إلىrel(7)
إذا استُخدِم
blockفإن التعليمة تتوقف حتى تُمسح الراية بواسطة كيان آخر. إذا استُخدِمclearفإن الراية تُمسح بدلاً من ضبطها. تضيف فهارس IRQ النسبية مُعرّف آلة الحالة إلى فهرس IRQ بجمع مودولو-4. تكون IRQs من 0 إلى 3 مرئية للمعالج، بينما تكون من 4 إلى 7 داخلية في آلات الحالة.- set(dest, data)
يضبط dest بالقيمة data.
dest:
pinsأوxأوyأوpindirsdata: القيمة (من 0 إلى 31)
- nop()
هذه تعليمة زائفة تُجمَّع إلى
mov(y, y)وليس لها أي تأثير جانبي.- .side(value)
هذا مُعدّل يمكن تطبيقه على أي تعليمة، ويُستخدم للتحكم في قيم دبابيس side-set.
value: القيمة (البتات) المراد إخراجها على دبابيس side-set
- .delay(value)
هذا مُعدّل يمكن تطبيقه على أي تعليمة، ويحدّد عدد الدورات المراد التأخير بها بعد تنفيذ التعليمة.
value: عدد دورات التأخير، من 0 إلى 31 (تنخفض القيمة القصوى إذا استُخدِمت دبابيس side-set)
- [value]
هذا مُعدّل ومكافئ لـ
.delay(value).