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 لا يساوي Y

    • pin: صحيح إذا كان دبوس الدخل مضبوطاً

    • not_osre: صحيح إذا لم يكن OSR فارغاً (لم يبلغ عتبته)

  • label: التسمية المراد القفز إليها إذا كان الشرط صحيحاً

wait(polarity, src, index)

يحجب التنفيذ، منتظراً قيمة مرتفعة/منخفضة على دبوس أو خط IRQ.

  • polarity: 0 أو 1، يحدّد ما إذا كان سينتظر قيمة منخفضة أم مرتفعة

  • src: واحد مما يلي: gpio (دبوس مطلق)، pin (دبوس نسبي إلى معامل in_base لـ StateMachine)، irq

  • index: من 0 إلى 31، الفهرس الخاص بـ src

in_(src, bit_count)

يُزيح البيانات من src إلى ISR.

  • src: واحد مما يلي: pins أو x أو y أو null أو isr أو osr

  • bit_count: عدد البتات المراد إزاحتها للداخل (من 1 إلى 32)

out(dest, bit_count)

يُزيح البيانات من OSR إلى dest.

  • dest: واحد مما يلي: pins أو x أو y أو pindirs أو pc أو isr أو exec

  • bit_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 أو osr

  • src: واحد مما يلي: 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 أو clear

  • index: من 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 أو pindirs

  • data: القيمة (من 0 إلى 31)

nop()

هذه تعليمة زائفة تُجمَّع إلى mov(y, y) وليس لها أي تأثير جانبي.

.side(value)

هذا مُعدّل يمكن تطبيقه على أي تعليمة، ويُستخدم للتحكم في قيم دبابيس side-set.

  • value: القيمة (البتات) المراد إخراجها على دبابيس side-set

.delay(value)

هذا مُعدّل يمكن تطبيقه على أي تعليمة، ويحدّد عدد الدورات المراد التأخير بها بعد تنفيذ التعليمة.

  • value: عدد دورات التأخير، من 0 إلى 31 (تنخفض القيمة القصوى إذا استُخدِمت دبابيس side-set)

[value]

هذا مُعدّل ومكافئ لـ .delay(value).

الأصناف