🛠 Programmer les cores PRU : le clignotement temps réel déterministe

BeagleBone Black (TI Sitara AM3358) · avance · Schéma : IMG-beaglebone-black-avance-2-pru-blink-cores-temps-reel.svg — schéma bloc du PRU-ICSS de l'AM335x (2 cores 200 MHz, 8 Ko de mémoire d'instructions chacun, RAM partagée 12 Ko) relié directement aux broches d'entrée-sortie, Linux tournant à côté sans y toucher.

Objetivos

El verdadero poder del AM335x: dos núcleos PRU-ICSS de 32 bits a 200 MHz conectados directamente a los pines de entrada/salida, capaces de realizar bit-banging y controles deterministas mientras Linux se ejecuta en paralelo. Vas a ensamblar un parpadeo PRU en ensamblador, cargarlo mediante el controlador remoteproc de la rama principal (mainline) y medir la estabilidad del periodo. El SRM lo recuerda: TI nunca ha admitido esta cadena en esta plataforma; es el ecosistema comunitario (am335x_pru_package) el que sostiene el tema.

Material

Código completo

; blink.pasm — bascule la broche PRU0 R30.7 (à muxer vers une broche
; de nappe via un overlay gpmux)
        .origin 0
        .cinit
INIT    SET     R30, 0              ; efface le registre de sortie
LOOP    SET     R30.t7              ; bit 7 haut -> broche haute
        CALL    DELAY
        CLR     R30.t7              ; bit 7 bas  -> broche basse
        CALL    DELAY
        JMP     LOOP
DELAY   MOV     R0, 200000000       ; ~1 s à l'horloge 200 MHz du PRU
WAIT    SUB     R0, R0, 1
        QBEQ    DONE, R0, 0
        JMP     WAIT
DONE    HALT
# Assemblage avec la toolchain communautaire
git clone https://github.com/beagleboard/am335x_pru_package
cd am335x_pru_package && make -C pru_sw/app_loader && cd ..
export PATH=$PWD/pru_sw/utils:$PATH
clpr blink.pasm && link_pru blink.obj blink_out
sudo cp blink_out /lib/firmware/am335x-pru0-fw

# Chargement via remoteproc mainline (les noms exacts varient selon le noyau)
ls /sys/class/remoteproc/
echo start | sudo tee /sys/class/remoteproc/remoteproc0/state
cat /sys/class/remoteproc/remoteproc0/state    # attendu : running

Verificación esperada

El estado de remoteproc pasa a running y el osciloscopio muestra una señal perfectamente regular: el periodo NO depende de la carga de Linux (pruébalo con stress-ng --cpu 1 en paralelo: la señal no se mueve ni un ciclo). Esta es la demostración del coprocesador en tiempo real.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales