🛠 Timers matériels, interruptions imbriquées et FASTRUN : la vitesse Cortex-M4

Teensy 3.2 · intermediaire · Schéma : IMG-teensy-32-intermediaire-6-teensy32-timers-dma-vitesse.svg — Teensy 3.2 en coupe conceptuelle : au centre le Cortex-M4 à 72 MHz avec ses deux bus 32 bits, autour les périphériques timing étiquetés PDB, CMT, LPTMR, 4x PIT, FTM (PWM) ; flèches vers 16 canaux DMA et le contrôleur d'interruptions imbriquées ; la LED 13 clignote pilotée par un timer.

Objetivos

Salir de delay y del polling: la Teensy 3.2 esconde una verdadera fábrica de tiempo real — un controlador de interrupciones vectorizadas anidadas (NVIC) con prioridades, 16 canales DMA de uso general, una batería de temporizadores (PDB, CMT, LPTMR, 4 contadores PIT, temporizadores FTM del PWM), la palabra clave FASTRUN para ejecutar funciones desde la RAM, y un bus doble de 32 bits (búsqueda de instrucción + datos simultáneos). Este tutorial hace parpadear el LED 13 desde un IntervalTimer de hardware y mide lo que se gana con un bucle de toggle rápido.

Material

Código completo

digitalToggle y la clase IntervalTimer están documentados en la página de la tienda PJRC (secciones Digital Output Pins / Timing):

#include <IntervalTimer.h>

IntervalTimer t1;
volatile bool flashing = false;

void flash {           // execute depuis un timer materiel, pas la boucle
  digitalToggle(13);     // broche 13 = LED orange integrée
}

void setup {
  pinMode(13, OUTPUT);
  t1.priority(0);        // attention : sur Teensy, 0 = priorite LA PLUS haute
  t1.begin(flash, 500000); // appelle flash toutes les 500 ms (en us)
}

void loop {
  // Pour la vitesse brute, digitalToggle en boucle serrée bat les paires
  // digitalWrite ; pour une forme d'onde précise, pilotez une broche PWM.
}

Acelerar el código

Verificación esperada

El LED 13 parpadea a 1 Hz exactos, incluso si loop está ocupado por un bucle de cálculo — la prueba de que el temporizador de hardware trabaja independientemente. Comente el flash en el código: el LED permanece fijo, su código principal continúa. En el osciloscopio en un pin en toggle libre, mida la frecuencia máxima, luego compare con digitalToggle controlado por IntervalTimer a 1 µs.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales