Progression - Quelques rappels - Etude du DSP 320F28335 (Texas Instrument) - Prise en main des outils de développement (Code Composer Studio) - Utilisation des GPIO, de l’ADC et de l’UART - Application à la détection et l’identification de signaux. -Détecteur de tonalité par TFD -Détection DTMF -Démodulation FSK -Utilisation de la FFT Cliquez sur le chapitre auquel vous voulez accéder • • • • • • • • • • Généralités Présentation du DSP 320F28355 Architecture DSP Registres Modes d’adressage Interruptions ADC DMA Calcul d’une somme de produits (virgule fixe) Virgule flottante D.S.P. (Digital Signal Processor) - Processeur destiné au traitement du signal - Les grandeurs physiques sont échantillonnées et transformées en nombres - Architecture des DSP optimisée pour le traitement numérique du signal A.D.C. D.S.P. x(k) x(t) Acquisition Traitement y(k) numérique D.A.C. Restitution y(t) ACQUISITION TRAITEMENT RESTITUTION DSP + ADC Traitement Acquisition Entrée x(t) Passe Bas Fc<Fe/2 Restitution ADC X(n) Programme DSP Y(n) DAC Passe Bas Sortie y(t) Fe Sortie numérique, PWM, etc.. PRINCIPAUX TRAITEMENTS - Générer des signaux - Filtrer - Détecter, identifier des signaux (1750, DTMF, parole, image…) - Moduler démoduler (modem, ADSL, Ethernet, AX25….) - Analyser un signal ( FFT) - Crypter, décrypter DOMAINES D ’APPLICATION - Télécommunications - Sons, Images, Vidéo - Instrumentation - Biomédical - Commande de process - Equipement automobile, avionique, radars... COMPARAISON AUX AUTRES DISPOSITIFS DE TRAITEMENTS NUMERIQUES Traitements microprogrammés - microordinateurs (Traitements complexes mais rarement en temps réel) - microprocesseurs classiques (~100 Kéch./s) - DSP ( ~1Méch/s.. 10Méch/s) Traitements câblés (architectures parallèles) - FPGA,... ~100 Méch/s... - ASIC (réservé aux grosses productions) CHOISIR UN D.S.P. Caractéristiques communes - Architecture optimisée pour le traitement du signal (nombreux bus,Harvard, pipe-line…) - Instruction multiplication accumulation en un cycle (MAC…) - Modes d ’adressages particuliers (modulo, bit reverse) Les différentes familles de DSP - DSP avec unité de calculs en virgule fixe - DSP avec unité de calculs en virgule flottante (FPU) - DSP avec des périphériques intégrés (contrôle moteur..) Les langages de programmation: L.machine, C, G. de C(ViSim..) Constructeurs : AT&T, Texas Inst., Motorola, Analoge Devices... PRESENTATION du DSP 320LF28335 - Architecture - Registres - Mémoire - Instructions et Modes d ’adressages - Les principales fonctionnalités - Les Timers - Le convertisseur AD - Gestion des interruptions Documentation http://www.ti.com/product/tms320f28335 - 320f28335.pdf - SPRU430.pdf - SPRUEO2a.pdf - SPRU566.pdf - SPRUFB0.pdf Datasheet général (sprs439f.pdf) CPU + instructions FPU + instructions (spraan9.pdf) Périphériques (liens) Interruptions… - SPRU509.pdf - SPRU513.pdf - SPRU514.pdf - SPRA958 Code Composer Studio Assembleur, linkeur… Compilateur C Programme en FLASH - SPRAAM0, - SPRC530.zip - SPRAA85a.pdf Pour démarrer rapidement.. Headers, structures, programme exemple - 28335_ezdsp_usb_tech_ref.pdf Carte de développement Développer une application Ecriture des fichiers Sources - langage machine (.asm) - langage C/C++ - utilisation d’un éditeur de texte Assemblage, compilation - Transforme les fichiers sources en fichiers objets (.obj) - fichier binaire avec des adresses non résolues - assembleur (asm2000.exe) - compilateur (cl2000.exe) Edition des liens (lnk2000.exe) - Transforme le fichier objet en fichier exécutable - Utilise les fichiers « .cmd » pour déterminer les adresses Transfert dans la cible (ou dans la mémoire externe) - en mémoire FLASH (via JTAG) - en mémoire RAM (via JTAG) - par SPI ou SCI (avec un programme boot loader en ROM) -……. Débuggage - dans la cible (via JTAG) - simulation (sur le PC) - avec un émulateur Librairies (mk2000.exe) - pour regrouper des fichiers objets (.obj) dans un fichier (.lib) - rts2800_fpu32.lib Développement (3 méthodes) Sans environnement - Ecrire les sources - Appeler successivement le compilateur, l’éditeur de liens, etc.. Avec un fichier « MakeFile » et l’utilitaire « make » - Ecrire les sources - Ecrire le fichier « Makefile » - Lancer le programme make Avec un environnement graphique (méthode utilisée en TP) - Code Composer Studio (v3.x) - Eclipse configuré avec les bons outils (CSS V5.x ) CARACTERISTIQUES du 320F28335 - Fréquence cycle max. 150 MHz - Alimentation : 3,3 V - Processeur 32bits Harvard - Calculs en virgule fixe ou en flottante câblée - FLASH 256 k x 16 - SARAM 34 k x 16 - OPT ROM 1k x 16 - Nombreux périphériques - Entrées/sorties binaires - Entrées analogiques 12 bits 80ns - Timers 32 bits, entrées de comparaison, PWM haute résolution... - Entrées de capture, modules QEP pour des codeurs incrémentaux - Liaisons série asynchrone SCI, série synchrone SPI, bus CAN… Architecture avec six bus Mémoire externe Un seul PLAN MEMOIRE Programmes, données et périphériques 222 mots de 16 bits Adresse 0 RAM interne 2k PERIPHERIQUES RAM/ROM externe 2M max RAM interne 32k FLASH 256k OPT ROM 1k 3F FFFF ROM 8k Pipeline à huit niveaux Registres d’états ST0 Registre ST0 OVC: PM : OVM: SXM: N,Z,C: compte les dépassements configure le multiplicateur (décalage auto) 1: Saturation / 0: overflow normal autorise l ’extension du bit de signe lors des décalages à droite indicateur de signe,zéro,retenue Registre d’états ST1 Pagination de la mémoire DONNEES - 216 pages de 64 mots de 16bits - pointeur de page DP - l ’offset est codé à la suite de l ’instruction DP Offset 0000.. 0000 00 0000 0000.. 0000 11 1111 0000.. 0001 00 0000 0000.. 0001 11 1111 Mémoire données Page 0 : 0..000h – 0..03Fh Page 1 : 0..040h – 0..07Fh . . . 1111.. 1111 00 0000 1111.. 1111 11 1111 Page 65535 : F..FC0h - F..FFFh MODES D ’ADRESSAGE - Adressage IMMEDIAT: La donnée se trouve dans la mémoire de programme à la suite de l ’instruction Adressage DIRECT par page La donnée se trouve dans la mémoire donnée Le registre de page DP contient les 16 bits de poids fort de l ’adresse Les 6 bits de poids faibles de l ’adresse sont codés dans l ’instruction. - Adressage indirect L’adresse de la donnée se trouve dans un registre auxiliaire xARn Exemple Buffers circulaires adressage modulo % Buffers circulaires (exemple) Buffers circulaires (suite) Buffers circulaires (exemple 2) Adressage « bit reverse » Adressage « bit reverse » exemple Les sources d ’interruptions - 2 interruptions externes non masquables: RS et NMI - interruptions masquables INT1, INT2,...., INT14 qui gérent l ’ensemble des demandes des périphériques (Timers, ADC, SCI, SPI, CAN, etc… ) - instructions pour le déclenchement logiciel des interruptions: INTR et TRAP Interruptions Interruptions masquables Interruptions masquables Vecteurs d’interruptions Vecteurs d’interruptions Autorisations et indicateurs Autorisation lors du « debug » Timers CPU binaires) GPIO (entrées/sorties • 88 Entrées/sorties binaires (GPIO) • multiplexées avec d’autres périphériques (4 fonctions max.) • réparties en trois ports A,B et C: •GPA GPIO de 0 à 31 •GPB GPIO de 32 à 63 •GPC GPIO de 64 à 87 Timers CPU Multiplexeurs GPxMUXn Entrée binaire Sortie binaire Timers SCI (portCPU série) Timers«CPU Timers CPU » Interruptions Timers CPU Convertisseur analogique numérique Résolution : 12bits (0 à 4095) Vitesse maximale 12.5Mech/s (80ns) 16 entrées multiplexées 2 échantillonneurs bloqueurs, 1 convertisseur Fonctionnement automatique paramétrable Possibilité de transfert « DMA » Résultat de la conversion -Tension à convertir de 0 à 3V -Résultat sur 12 bits de 0 à 4095 -Cadré à gauche dans 16bits de ADCRESULTx -Cadré à droite dans 16bits de ADCMIRRORx Calibration -Routine de calibration en ROM -Appelée automatiquement au démarrage en fonctionnement normal -Doit être appelée par le logiciel utilisateur en phase de développement -Voir exemples Registres de l’ADC Echantillonnage et conversion Echantillonnage 2voies simultanées et conversion Horloge du convertisseur AdCCLK Oscillateur externe (30MHz) PLL SysClockOut (Horloge cycles) 150MHz ( PLL fois 5) Diviseur (HSPCP) Ne doit pas dépasser 25MHZ Référence interne ou externe… Impédance d’entrée Transfert direct en mémoire « DMA » 6 canaux « DMA » Transferts déclenchés par événements ADC, Timer, E/S… « Burst » configurable de 1 à 32 mots de 16bits Adresse source, adresse destination, taille en « burst » Adressage circulaire possible Demande d’interruption en début ou fin de transfert Multiplication et accumulation câblée • Filtrage RIF et RII • Calcul de DFT et de FFT • Produit de corrélation • • Virgule fixe Virgule flottante yn = a0xn + a1x(n-1) … + aMx(n-M) Entrée x(n-M) ...x(n-1) xn Calcul Sortie yn yn = a0xn + a1x(n-1) … + aMx(n-M) - b1y(n-1) - b2y(n-2) … - bN y(n-N) Entrée x(n-M) ...x(n-1) xn Calcul Sortie y(n-N) …y(n-1) y(n) Programme de traitement en Virgule fixe (320F2407) – Initialisation • Configuration des registres – de contrôle: horloge, multiplexage des pattes, ADC, Timer, IRQ... – Acquisition de l ’entrée x déclenchée par un Timer/PWM • Stockage des coefficients dans la mémoire « programme » • Autorisation de l ’ interruptions ADC • Puis boucle infinie ou autre tâches…. – Traitement par interruption ADC • Lire et stocker xn en mémoire « données » • Calculer yn et décaler les valeurs de X : X n -M -> perdu ; Xn-M+1 -> Xn-M ... … Xn -> Xn-1 • Envoyer yn en sortie • Fin d ’interruption Stockage des données Coefficients en « mémoire programme » : Coeff .text .word 002Ah, 0ff20h, …. .word 07895h, …... ... Pour stocker les échantillons en « mémoire donnée » : .bss Xn , 18, 1 ; pour réserver 18 emplacements ; à partir de l ’adresse Xn RPT #M et MACD #Coeff, *Zone Programme PC Zone Données aM xn aM-1 x n-1 ... x n-2 .. .. a1 xn-M+1 a0 Contenu de PREG xn-M AR* : Contenu de l ’accumulateur: aMxn-M 0 RPT #M et MACD #Coeff, *Zone Programme PC Zone Données ..premier MACD ..dernier MACD aM xn xn aM-1 x n-1 x n-1 xn ... x n-2 x n-2 xn-1 .. .. .. .. a1 xn-M+1 xn-M+1 xn-M+2 xn-M xn-M+1 x n-M xn-M+1 x n-M aMxn-M aM-1xn-M+1 a0xn a0 Contenu de PREG AR* : Contenu de l ’accumulateur: 0 AR* + aMxn-M AR* xn ………………. + a1xn-1 APAC pour ajouter le dernier produit a0xn à l ’accumulateur Virgule flottante - Format IEE et architecture (spraan9.pdf) - Instructions (SPRUO2a.pdf ) Virgule flottante Description Simple Précision - 32Bits 31 30 23 1bit 8 bits Signe Exposant + 127 0:+ Min: 0000 0000 1: - Soit 2-127 22 0 23 bits Mantisse Mantisse normalisée: 1.xxxxxxxxxxxxxxxxxxxxxxx Min: 1.00000000000000000000000 Max :1111 1111 Soit 2+128 Max: 1.11111111111111111111111 Virgule flottante Exemples 0 0111 1111 11000000000000000000000 = + 2127-127 . 1,75 = 1.75 1 0111 1111 11000000000000000000000 = - 2127-127 . 1,75 = 1.75 0 1000 0001 11000000000000000000000 = + 2129-127 . 1,75 = 0 0111 1110 11000000000000000000000 = + 2126-127 . 1,75 = 0.875 7 Virgule flottante Limites théoriques Le plus grand nombre: 0 1111 1111 11111111111111111111111 = + 2255-127 .2-2-23 = 6,8...1038 Le plus petit nombre : 1 0111 1111 11111111111111111111111 = - 2255-127 .2-2-23 = - 6,8...1038 Le nombre le plus proche de zéro (mantisse normalisée) 0 0000 0000 00000000000000000000000 = + 20-127 . 1,0 = 1 0000 0000 00000000000000000000000 = - 20-127 . 1,0 = 5.87…10-39 -5.87…10-39 Virgule flottante Particularités (IEE std 754-1985) Le plus grand nombre: 0 1111 1110 11111111111111111111111 0 1111 1111 00000000000000000000000 Le plus petit nombre : 1 1111 1110 11111111111111111111111 0 1111 1111 00000000000000000000000 x 1111 1111 xxxxxxxxxxxxxxxxxxxxxxx = + 2254-127 .(2-2-23) = 3,4...1038 = + Infini = - 2254-127 .2-2-23 = - 3.4...1038 = - Infini = NaN si mantisse non nulle (« Infini » dans le DSP 28335) Les nombre proches de zéro : 0 0000 0000 00000000000000000000000 = 0+ 1 0000 0000 00000000000000000000000 = 0Nombres proches de zéro à mantisse non normalisée: (pas utilisé dans le 28335) 0 0000 0000 xxxxxxxxxxxxxxxxxxxxxxx = 0,xxxxxxxxxxxxxxxxxxxxxxx de 2-126 à 2-149 Virgule flottante Erreur et Précision Erreur: Arrondi de la mantisse: +/- 1 lsb => Erreur: 2E-23 Précision : C’est l’erreur en % du nombre = 2E-23 / 1,x…xx.2E La mantisse étant comprise entre 1 et 2 la précision est comprise entre 2-23 et 2-24 Avec une mantisse normalisée, la précision est toujours meilleure que 2-23 soit environ 10-7 Virgule flottante Double Précision 64 Bits 63 62 52 1bit 11 bits Signe Exposant + 1023 51 0 52 bits Mantisse Précision mieux que 2-1023 (mantisse normalisée) Max/Min : +/- 1,8.10308 Pas d’implantation « hardware » de la double précision dans le 320F28335 Virgule flottante Pour les transferts en mémoire par adressage indirect Les opérandes et les résultats des opérations en virgule flottantes Exemple de programme utilisant le registre de status STF Virgule flottante Instructions Conversions virgule fixe/virgule flottante F32TOI16, I16TOF32… Transferts avec la mémoire MOV32 … Opérations mathématiques ADDF32, MPYF32, MACF32… Etc..