Skip to content

Instantly share code, notes, and snippets.

@IoTeacher
Created April 15, 2026 21:32
Show Gist options
  • Select an option

  • Save IoTeacher/bc7e88a5fdd1623e40c682207cb48219 to your computer and use it in GitHub Desktop.

Select an option

Save IoTeacher/bc7e88a5fdd1623e40c682207cb48219 to your computer and use it in GitHub Desktop.
Templete para RP2040 clásico con InLineAssembly en 32bits

Practica InLine Assembly (32bits) en Raspberry Pico W (version 2022)

📘 TEMPLATE OFICIAL

Raspberry Pi Pico W – MicroPython + Inline Assembly (Thumb)


🧪 FORMATO COMPLETO (Puede modificar pero siempre sus generales)

# ============================================================
# Universidad: [Nombre]
# Carrera: [Carrera]
# Materia: Arquitectura de Computadoras / Ensamblador
# Práctica No: [X]
# Nombre: [Alumno]
# Fecha: [dd/mm/aaaa]
#
# Dispositivo: Raspberry Pi Pico W (RP2040)
# Entorno: Wokwi + MicroPython
#
# Descripción:
#   [Explicar qué hace el programa]
#
# Pseudocódigo (C/C++):
#   [Lógica en alto nivel]
# ============================================================

import micropython
from machine import Pin
import utime

# ------------------------------------------------------------
# CONFIGURACIÓN DEL MICROCONTROLADOR
# ------------------------------------------------------------
# LED interno del Pico W (GPIO 25)
led = Pin(25, Pin.OUT)


# ------------------------------------------------------------
# FUNCIONES EN ENSAMBLADOR (ARM THUMB - Cortex-M0+)
# ------------------------------------------------------------

@micropython.asm_thumb
def funcion_base(r0, r1):
    # --------------------------------------------------------
    # Descripción:
    #   r0 = argumento 1
    #   r1 = argumento 2
    #
    #   retorno en r0
    # --------------------------------------------------------

    # Ejemplo: suma
    add(r0, r0, r1)

    # Retorno
    bx(lr)


# ------------------------------------------------------------
# PROGRAMA PRINCIPAL
# ------------------------------------------------------------
def main():

    print("=== INICIO DE PRÁCTICA ===")

    # ========================================================
    # EJERCICIO 1
    # ========================================================
    a = 8
    b = 4

    resultado = funcion_base(a, b)

    print("Ejercicio 1 (suma):", resultado)


    # ========================================================
    # EJERCICIO 2 (PLANTILLA)
    # ========================================================
    # x = 0
    # y = 0
    # resultado2 = funcion2(x, y)
    # print("Ejercicio 2:", resultado2)


    # ========================================================
    # INDICADOR VISUAL (VALIDACIÓN)
    # ========================================================
    for i in range(5):
        led.toggle()
        utime.sleep(0.2)

    print("=== FIN DE PRÁCTICA ===")


# ------------------------------------------------------------
# PUNTO DE ENTRADA
# ------------------------------------------------------------
if __name__ == "__main__":
    main()

🧠 ACLARACIONES IMPORTANTES (DOCENTE)

📌 1. Arquitectura real del Pico W

El RP2040 usa:

  • ARM Cortex-M0+
  • Instrucciones Thumb (16 bits)
  • NO es ARM64, es ARM32 el mismo de las exposiciones.

👉 Por eso usamos:

@micropython.asm_thumb

📌 2. Convención de registros

Registro Uso
r0 argumento 1 / retorno
r1 argumento 2
r2–r7 auxiliares

Esto coincide con prácticas formales de ensamblador ARM en sistemas embebidos .


📌 3. Retorno obligatorio

Siempre debe existir:

bx(lr)

Sin esto: ❌ El programa falla o se cuelga


📌 4. Separación correcta

Sección Propósito
ASM lógica de bajo nivel
Python control, pruebas, IO

📌 5. LED como debug

El LED sirve como:

  • ✔ Indicador de ejecución correcta
  • ✔ Debug visual en hardware embebido

🧪 EJEMPLO DE EXTENSIÓN (YA LISTO PARA PRÁCTICAS)

Agregar otra función:

@micropython.asm_thumb
def resta(r0, r1):
    sub(r0, r0, r1)
    bx(lr)

Uso:

print("Resta:", resta(10, 3))

🧑‍🏫 CRITERIOS DE EVALUACIÓN

Criterio Valor
Encabezado completo
Uso correcto de registros
Función ASM funcional
Pruebas en main()
Orden y claridad

@IoTeacher
Copy link
Copy Markdown
Author

🧪 Uso de Wokwi antes de trabajar con electrónica real

Wokwi es un simulador en línea que permite desarrollar y probar sistemas embebidos sin necesidad de hardware físico.

🎯 ¿Por qué usar Wokwi primero?

Antes de conectar componentes reales, Wokwi permite:

  • ✔ Probar código sin riesgo de dañar hardware
  • ✔ Detectar errores lógicos rápidamente
  • ✔ Simular periféricos (LEDs, botones, sensores)
  • ✔ Ahorrar tiempo y costos en laboratorio

⚙️ ¿Cómo se usa?

  1. Crear un proyecto desde:
    https://wokwi.com/projects/new/micropython-pi-pico-w

  2. Escribir el programa en main.py

  3. Ejecutar la simulación ▶️

  4. Observar resultados en consola y componentes virtuales


🧠 Enfoque académico

El uso de simulación es una práctica recomendada, ya que permite validar el comportamiento del sistema antes de implementarlo físicamente, reduciendo errores y mejorando la comprensión del funcionamiento interno.

Wokwi es una herramienta fundamental para:

  • Aprender ensamblador y MicroPython
  • Validar prácticas
  • Prepararse para trabajar con hardware real

Enlace de proyectos:

https://wokwi.com/projects/new/micropython-pi-pico-w

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment