🛠 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.

Objectifs

Sortir de delay et du polling : la Teensy 3.2 cache une vraie usine à temps réel — un contrôleur d'interructions vectorisées imbriquées (NVIC) avec priorités, 16 canaux DMA à usage général, une batterie de timers (PDB, CMT, LPTMR, 4 compteurs PIT, timers FTM du PWM), le mot-clé FASTRUN pour exécuter des fonctions depuis la RAM, et un bus double 32 bits (fetch d'instruction + données simultanés). Ce tutoriel fait clignoter la LED 13 depuis un IntervalTimer matériel et mesure ce que gagne une boucle de toggle rapide.

Matériel

Code complet

digitalToggle et la classe IntervalTimer sont documentés sur la page boutique PJRC (sections Digital Output Pins / Timing) :

#include <IntervalTimer.h>

IntervalTimer t1;
volatile bool flashing = false;

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

void setup {
  pinMode(13, OUTPUT);
  t1.priority(0);        // attention : sur Teensy, 0 = priorité 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.
}

Accélérer le code

Vérification attendue

La LED 13 clignote à 1 Hz pile, même si loop est occupé par une boucle de calcul — la preuve que le timer matériel travaille indépendamment. Coupez le flash dans le code : la LED reste fixe, votre code principal continue. À l'oscilloscope sur une broche en toggle libre, mesurez la fréquence maximale, puis comparez avec digitalToggle piloté par IntervalTimer à 1 µs.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels