rp2 — fonctionnalités spécifiques au RP2040¶
Le module rp2 contient des fonctions et des classes spécifiques au RP2040, tel qu’utilisé dans le Raspberry Pi Pico.
Consultez le RP2040 Python datasheet pour plus d’informations, et pico-micropython-examples pour des exemples de code.
Instructions du langage d’assemblage PIO¶
Les machines d’état PIO sont programmées dans un langage d’assemblage personnalisé comportant neuf instructions PIO de base. Dans MicroPython, les routines d’assemblage PIO sont écrites sous forme de fonction Python munie du décorateur @rp2.asm_pio(), et elles utilisent la syntaxe Python. De telles routines prennent en charge les variables et l’arithmétique Python standard, ainsi que les fonctions personnalisées suivantes qui encodent les instructions PIO et pilotent l’assembleur. Consultez la sec 3.4 de la fiche technique du RP2040 pour plus de détails.
- wrap_target()
Spécifie l’emplacement où l’exécution se poursuit après le bouclage du programme. Par défaut, il s’agit du début de la routine PIO.
- wrap()
Spécifie l’emplacement où le programme se termine et boucle. Si cette directive n’est pas utilisée, elle est ajoutée automatiquement à la fin de la routine PIO. Le bouclage ne coûte aucun cycle d’exécution.
- label(label)
Définit une étiquette nommée label à l’emplacement actuel. label peut être une chaîne ou un entier.
- word(instr, label=None)
Insère un mot de 16 bits arbitraire dans la sortie assemblée.
instr : la valeur de 16 bits
label : si fourni, recherche l’étiquette et effectue un OU logique entre la valeur de l’étiquette et instr
- jmp(…)
Cette instruction prend deux formes :
- jmp(label)
label : étiquette vers laquelle sauter de manière inconditionnelle
- jmp(cond, label)
cond : la condition à vérifier, l’une des suivantes :
not_x,not_y: vrai si le registre vaut zérox_dec,y_dec: vrai si le registre est non nul, et effectue un post-décrémentx_not_y: vrai si X n’est pas égal à Ypin: vrai si la broche d’entrée est activéenot_osre: vrai si l’OSR n’est pas vide (n’a pas atteint son seuil)
label : étiquette vers laquelle sauter si la condition est vraie
- wait(polarity, src, index)
Bloque, en attendant un niveau haut/bas sur une broche ou une ligne IRQ.
polarity : 0 ou 1, indiquant s’il faut attendre une valeur basse ou haute
src : l’un des suivants :
gpio(broche absolue),pin(broche relative à l’argumentin_basede la StateMachine),irqindex : 0-31, l’index pour src
- in_(src, bit_count)
Décale les données depuis src vers l’ISR.
src : l’un des suivants :
pins,x,y,null,isr,osrbit_count : nombre de bits à décaler vers l’intérieur (1-32)
- out(dest, bit_count)
Décale les données depuis l’OSR vers dest.
dest : l’un des suivants :
pins,x,y,pindirs,pc,isr,execbit_count : nombre de bits à décaler vers l’extérieur (1-32)
- push(…)
Pousse l’ISR vers la FIFO RX, puis remet l’ISR à zéro. Cette instruction prend les formes suivantes :
push()
push(block)
push(noblock)
push(iffull)
push(iffull, block)
push(iffull, noblock)
Si
blockest utilisé, l’instruction se bloque si la FIFO RX est pleine. Le comportement par défaut est de bloquer. Siiffullest utilisé, le push n’a lieu que si le nombre de décalages d’entrée a atteint son seuil.- pull(…)
Tire depuis la FIFO TX vers l’OSR. Cette instruction prend les formes suivantes :
pull()
pull(block)
pull(noblock)
pull(ifempty)
pull(ifempty, block)
pull(ifempty, noblock)
Si
blockest utilisé, l’instruction se bloque si la FIFO TX est vide. Le comportement par défaut est de bloquer. Siifemptyest utilisé, le pull n’a lieu que si le nombre de décalages de sortie a atteint son seuil.- mov(dest, src)
Déplace dans dest la valeur de src.
dest : l’un des suivants :
pins,x,y,exec,pc,isr,osrsrc : l’un des suivants :
pins,x,y,null,status,isr,osr; cet argument peut être optionnellement modifié en l’encapsulant dansinvert()oureverse()(mais pas les deux ensemble)
- irq(…)
Active ou efface un indicateur IRQ. Cette instruction prend deux formes :
- irq(index)
index : 0-7, ou
rel(0)àrel(7)
- irq(mode, index)
mode : l’un des suivants :
block,clearindex : 0-7, ou
rel(0)àrel(7)
Si
blockest utilisé, l’instruction se bloque jusqu’à ce que l’indicateur soit effacé par une autre entité. Siclearest utilisé, l’indicateur est effacé au lieu d’être activé. Les index IRQ relatifs ajoutent l’identifiant de la machine d’état à l’index IRQ avec une addition modulo 4. Les IRQ 0-3 sont visibles depuis le processeur, les IRQ 4-7 sont internes aux machines d’état.- set(dest, data)
Définit dest avec la valeur data.
dest :
pins,x,y,pindirsdata : valeur (0-31)
- nop()
Il s’agit d’une pseudo-instruction qui s’assemble en
mov(y, y)et n’a aucun effet de bord.- .side(value)
Il s’agit d’un modificateur qui peut être appliqué à n’importe quelle instruction, et est utilisé pour contrôler les valeurs des broches side-set.
value : la valeur (bits) à sortir sur les broches side-set
- .delay(value)
Il s’agit d’un modificateur qui peut être appliqué à n’importe quelle instruction, et spécifie le nombre de cycles à retarder après l’exécution de l’instruction.
value : cycles de retard, 0-31 (la valeur maximale est réduite si des broches side-set sont utilisées)
- [value]
Il s’agit d’un modificateur équivalent à
.delay(value).