TP assembleur 3IMACS



Documents pareils
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Thomson ST 2030 guide de configuration et d utilisation

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Microprocesseur + Logiciel

Compilation (INF 564)

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Structure d un programme

La programmation des PIC en C. Les fonctions, les interruptions.

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Architecture des ordinateurs

Compression de Données - Algorithme de Huffman Document de Conception

Logiciel de base. Première année ENSIMAG

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cliquez sur le site que vous souhaitez consulter, il s affichera directement dans le navigateur.

Ordinateurs, Structure et Applications

IV- Comment fonctionne un ordinateur?

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Cours de Systèmes d Exploitation

ScoopFone. Prise en main rapide

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

GUIDE D UTILISATION DU BROWSER DE BEYOND 20/20

Architecture des ordinateurs

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Support de formation Notebook

Modules d automatismes simples

UGVL : HOMOLOGATION PS ZAC du bois Chaland 6 rue des Pyrénées LISES EVRY Cedex FRANCE Tel Fax

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Les chaînes de caractères

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

SAGEM Wi-Fi 11g USB ADAPTER Guide de mise en route rapide

Atelier C TIA Portal CTIA06 : programmation des automates S7-300 Blocs d organisation

Ell-Cam Serrure électronique

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Programmation assembleur : aperçu

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Configurateur tebis TX100

GUIDE UTILISATEUR SYSTEMES CCTV

Utilisation de l'outil «Open Office TEXTE»

Les failles Format String

La mémoire. Un ordinateur. L'octet. Le bit

Créer un sondage sous Magento

Rappels d architecture

Dongle WiFi de QUMI Manuel de l utilisateur

TRUCS & ASTUCES SYSTEME. 1-Raccourcis Programme sur le Bureau (7)


Conception de circuits numériques et architecture des ordinateurs

Créer une base de données

Plan du Travail. 2014/2015 Cours TIC - 1ère année MI 30

DMX MASTER I. Notice d utilisation. Lisez soigneusement la notice d utilisation avant d utiliser l appareil! Version 1.

Licence Sciences et Technologies Examen janvier 2010

l'ordinateur les bases

Le langage C. Séance n 4

Développement d une application Android pour l Association des Paralysés de France

V- Manipulations de nombres en binaire

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Aquastyle accueil. Affichage vidéo. Manuel d installation et d utilisation. BP TRÉMENTINES FRANCE Tél Fax

Baladeur Santé VITAL'ACT

Elle supporte entièrement la gestion de réseau sans fil sous Windows 98SE/ME/2000/XP.

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Problèmes liés à la concurrence

Algorithme. Table des matières

LOGICIEL DC4D MONITOR

Sélection du contrôleur

Application 1- VBA : Test de comportements d'investissements

MANUEL D UTILISATION - Précis Poste de Traitement d Images 1 - Déconvolution

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Module Prestashop Moyen de paiement - Financement de commandes à crédit avec Sofinco

PIC 16F84. Philippe Hoppenot

INSTALLATION DE WINDOWS 2000 SERVER POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Manuel Utilisateur Téléphone IP Thomson ST 2030

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Parcours FOAD Formation EXCEL 2010

Dossier technique. Présentation du bus DMX et Utilisation des options EL13 / EL14 ERM AUTOMATISMES INDUSTRIELS 1 LE PROTOCOLE DMX 2

Introduction à MATLAB R

Configurer un réseau domestique. Partager ses fichiers, ses dossiers et ses imprimantes sur tous ses PC.

Transmissions série et parallèle

Contrôle d accès UTIL TP N 1 découverte

Programmation C. Apprendre à développer des programmes simples dans le langage C

PIC EVAL Dev Board PIC18F97J60

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Algorithmique et Programmation, IMA

GSM/GPRS/GPS Traceur Véhicule G-1000 PRO Manuel D utilisation

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Téléphonie Cisco. - CME Manager Express = Logiciel dans un routeur, version simplifiée du call manager.

Jeu d instructions NIOS II

GlobalScape Secure FTP Server Buffer Overflow

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

Transcription:

TP assembleur 3IMACS Baguette magique Fichier aide de l'étape 6 du TP asm Voir sujet http://www.lesia.insa-toulouse.fr/~acco/acco_wiki/doku.php?id=hard:asm:2009_10:accueil Le programme de découpe en 4 parties : 1. Acquisition de la chaine de caractère et son affichage = 'Polling_Saisie_Affichage' dans le fichier du même nom 2. Conversion de la chaine de caractère affiché en une trame grâce à la table des fonts de caractère = 'Mise_a_jour_trame' dans Handller_diode 3. Une interruption régulière qui balaye la trame de gauche à droite et vice-versa et affiche chaque "ligne" sur les diodes. Se bloque à chaque fois qu'elle à atteint un bout de la trame = 'SysTick_Handler' dans Handller_diode! Initialisation par 'Demarre_Systick' voir lib_baguette.inc 4. Une interruption qui détecte les phases du mouvement à vitesse constante et active l'affichage de la trame (SysTick_Handle) dans le sens voulu. = 'ADC_IRQHandler' dans handler_detection.s! Initialisation par 'INIT_ADC_IRQHandler' dans handler_detection.s Convention C utilisée : lors des appels de fonctions seul les registres R0-R3,PC sont modifiés Kevin ROCARD

MAIN MAIN : Initialise les whatchdogs puis appel en boucle l'acquisition et traitement des boutons (Polling_Saisie_Affichage) Kevin ROCARD

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10_1\proj_cm3...\main.s PRESERVE8 THUMB IMPORT Lib$$Request$$armlib assure l'initialisation des variables après un reset fichier main de l'étape 5 du TP asm voir sujet http://www.lesia.insa-toulouse.fr/~acco/acco_wiki/doku.php?id=hard:asm:200 9_10:accueil Convention C utilise lors des appels de fonctions seuls les registres R0-R3,PC sont modifies INCLUDE../objs_lib_baguette/lib_baguette.inc VARIABLES initialisées AREA RESET, DATA CONSTANTES MEMOIRE AREA RESET, DATA, READONLY CONSTANTES ETIQUETTES CODE AREA.text, CODE, READONLY, ALIGN=2 EXTERN Polling_Saisie_Affichage DANS Polling_Saisie_Affichage EXTERN SysTick_Handler DANS handler_diode2.s EXTERN INIT_ADC_IRQHandler DANS handler_detection main PROC EXPORT main IN : rien OUT : rien REGS : R3 = R4 = R5 = R6 = R7 = Page: 1

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10_1\proj_cm3...\main.s ATTENTION : fonction bloquante te Init des periphs à faire avant toute utilisation d'une fonction de lib_baguet voir lib_baguette.inc pour les détails BL Init_Baguette BL Demarre_Systick BL INIT_ADC_IRQHandler Pour_Toujours BL Polling_Saisie_Affichage B Pour_Toujours ENDP main END module asm Ici on peut écrire de la pôésie par exemple :-) Page: 2

Polling_Saisie_Affichage Polling_Saisie_Affichage : Acquisition des caractères, mise à jour de l'écran, mise à jour de la trame Kevin ROCARD

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_...\Polling_Saisie_Affichage.s PRESERVE8 THUMB IMPORT Lib$$Request$$armlib assure l'initialisation des variables après un reset INCLUDE../objs_lib_baguette/lib_baguette.inc déclaration des fonction de la librai rie Convention C utilise lors des appelles de fonctions seul les registres R0-R3,PC sont modifier VARIABLES initialisées AREA RESET, DATA Caractere DCB 'Q' Texte_Baguette DCB "DEFO" Num_car DCB 0 Pas DCW 0xFFF/26 Passer en adressage direct Entre_ancien DCB 0 Annulation_ancien DCB 0 CONSTANTES MEMOIRE AREA RESET, DATA, READONLY CONSTANTES ETIQUETTES Echelle equ 0xFFF/26 CODE AREA.text, CODE, READONLY, ALIGN=2 EXTERN Mise_a_jour_trame DANS handler_diode2.s Polling_Saisie_Affichage PROC EXPORT Polling_Saisie_Affichage IN : rien OUT : rien REGS : R3 = caractère selectioné R4 = Pas de décomposition de des 2^12 bit du du potentiometre en 26 letre de l'alp habet R5 = Etat du bouton Effacement R6 = Etat du bouton Entré R7 = Etat diode \\Debug inutilisé REG. ALT. : R0-R2,R14,R15 ATTENTION : ALGO: Aquisition du caractère selectioné SI le caractère actuelle!= caractère précedent Met à jour l'ecran avec le charactère Page: 1

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_...\Polling_Saisie_Affichage.s Enregistre le caractère actuelle Aquisition: -entre -annulation Si ancien 'entrée' > nouveau entre (front descendant) SI nombre_caractère < 4 Ajout du caractère Mise à jour de l'ecran Mise à jour de la trame Si ancien 'annulation' > nouveau entre (front descendant) Remet le curseur (Num_car) au début (0) Remplis le texte de l'ecran d'espace Mise à jour de l'ecran Mise à jour de la trame Enregistre l'etats des boutons dans la memoire PUSH {R4,R5,R6,R7,LR} LDR R4,=Echelle Aquisition du caractère selectioné int Lire_ADC(int channel) IN: R0: canal à lire 0 = valeur du potentiomètre de saisie (ADC_POTENTIOMETR E) 1 = mesure de l'accélération de l'axe X (ADC_X) l'axe e st indiqué sur la baguette. 2 = mesure de l'accélération de l'axe Y (ADC_Y) l'axe e st indiqué sur la baguette. LDR R0,=0 li le canal potentiometre BL Lire_ADC OUT: R0: Résultat de la conversion sur 16 bits alignés à droite REG. ALT. : R0-R2,R14,R15 UDIV R3,R0,R4 adapte l'echelle 0->0 FFF->26 ADD R3,#'A' ajoute la valeur ASCI de 'A' =>R3 contient le caractère courant Compare le nouveau caractère avec l'ancien LDR R5,=Caractere LDRB R0,[R5] CMP R0,R3 BEQ PAS_CHANGEMENT appel de MAJ_Ecran (texte_baguette,caractere) LDR R0,=Texte_Baguette MOV R1,R3 BL MAJ_Ecran lib_baguette.inc > REG. ALT. : R0-R2,R14,R15 Mise à jour du caractère selectionné STRB R3,[R5] PAS_CHANGEMENT R5=>Effacement R6=>Entré lis Efacement LDR R0,=1 BL Lire_Touche MOV R5, R0 Memorisation de Effacement dans R5 lis Entree Page: 2

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_...\Polling_Saisie_Affichage.s LDR R0,=2 BL Lire_Touche MOV R6, R0 Memorisation de Entré dans R6 Anciens sauvegarde par pile POP {R0} recupère anciens entree CMP R0, R6 PUSH {R0} recupère ancien entree LDR R1,=Entre_ancien LDRB R0, [R1] s petits then orme :< ante 5 test front dessandant Entré! detecte tout les frond descendant memem le Nouveau == 0 & Ancien!=0 CMP R6, R0 BHS pas_front_descendant_entre if Nouvelle_entré<Ancient LDR R1,=Num_car LDRB R0,[R1] R0 correspond à la nème letre du mots que l'on f test si 4 caractère n'on pas déja été rentré (Buffer overflow) CMP R0, #4 BHS pas_front_descendant_entre pas très structuré Ajoute le caratère courant au texte LDR R2,=Texte_Baguette ADD R2, R0 R2 correspond à l'adresse de la letre cour STRB R3,[R2] R3 correspond à la letre selectioner ADD R0,#1 STRB R0, [R1] Mise à jour de l'ecran LDR R0,=Texte_Baguette MOV R1, R3 BL MAJ_Ecran lib_baguette.inc > REG. ALT. : R0-R2,R14,R1 Mise à jour de la trame par passage d'argument par R0 LDR R0,=Texte_Baguette LDR R0, [R0] BL Mise_a_jour_trame pas_front_descendant_entre Clignoté diode \\debuggage R7 =>etat diode MVN R0,R7 inversion ds états des diode BL Ecrit_LED Anciens sauvegarde par pile POP {R0,R1} recupère anciens entrees et Annulation CMP R1, R5 Compare Ancien et nouveau Annulation PUSH {R0,R1} recupère ancien Annulation LDR R1,=Annulation_ancien LDRB R0, [R1] t<0 then test front dessandant Annulation CMP R5, R0 BHS pas_front_descendant_annulation if Nouvelle_entré-Ancien Ecris 0 dans le numero de caratère edité LDR R1,=Num_car R0 pointe vers le compteur du nombre de le Page: 3

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_...\Polling_Saisie_Affichage.s tre dans le mot que l'on forme LDR R0,=0 STRB R0, [R1] on met a 0 le compteur de caractère Ecris des espaces dans les charactère LDR R0,=Texte_Baguette LDR R1,=0x20202020 0x20202020 =" " (4 espaces) qui n'est p as directement pris??? STR R1,[R0] Met à jour l'ecran LDR R1, =Caractere LDR R1, [R1] BL MAJ_Ecran lib_baguette.inc > REG. ALT. : R0-R2,R14,R15 Met à jour la trame diode LDR R0,=Texte_Baguette LDR R0,[R0] BL Mise_a_jour_trame pas_front_descendant_annulation enregistre l'etats des boutons dans la memoire LDR R0,=Annulation_ancien enregistre anciens Efacement STRB R5, [R0] LDR R0,=Entre_ancien enregistre anciens Entré STRB R6, [R0] POP {R4,R5,R6,R7,LR} BX LR ENDP Polling_Saisie_Affichage END module asm Page: 4

handler_diode Handler_diode : Affiche sur les diodes, à chaque appel, un octet de la Trame. Dans le sens croissant puis décroissant. Mise_a_jour_trame : Mets à jour la trame grâce aux 4 caractères passés en argument Kevin ROCARD

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10...\handler_diodes2.s PRESERVE8 THUMB IMPORT Lib$$Request$$armlib assure l'initialisation des variables après un reset INCLUDE../objs_lib_baguette/lib_baguette.inc déclaration des fonction de la librai rie Convention C utilise lors des appelles de fonctions seul les registres R0-R3,PC sont modifier VARIABLES initialisées AREA RESET, DATA Etat_diode DCB 0 Trame SPACE 1+8*4+1 =34 Trame DCB 0x00 DCB 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 P DCB 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 a DCB 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00 z DCB 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00! DCB 0x00 Position_trame DCB 1 Sens_lecture DCB 1 Activaton_handler_diode DCB 1 CONSTANTES MEMOIRE AREA RESET, DATA, READONLY CONSTANTES ETIQUETTES CODE AREA.text, CODE, READONLY, ALIGN=2 EXTERN Rotation [PROC] not reconised DANS font8.c SysTick_Handler PROC EXPORT SysTick_Handler IN : rien OUT : rien REGS : R0=>Octet courant de la trame (char R1=Trame [position_trame]) R1=>Pointeur de trame (char * R2 =Trame) R2=>Sens_lecture (char) R3=>pointeur sur Sens_lecture (char *) R4=>position dans la trame (nème octet apres de debut) (char R4=position_tra me) R5=>pointeur de position_trame (char * R3 =&position_trame) REG. ALT. : R15 Page: 1

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10...\handler_diodes2.s La fonction affiche sur les diodes, à chaque appele, un octet de la Trame. Dans le sens croissant puis decroissant ALGO: SI Activaton_handler_diode =0 FIN recuperation de : -l'emplacement dans la trame -sens de lecture Recuperation des 8 état des diodes grace un tableau indexé Allume les led en fonction de ces états SI sens de lecture = croissant ALORS emplacement dans la trame ++ SINON emplacement dans la trame -- SI on à depasse la fin de trame ALORS sens de lecture = decroissant Activaton_handler_diode = 0 emplacement dans la trame -- SI on à depasse le début de trame ALORS sens de lecture = croissant Activaton_handler_diode = 0 emplacement dans la trame ++ sauvegarde (nouvelle emplacement dans la trame) LDR R0,=Activaton_handler_diode LDR R0,[R0] CBZ R0, Fin_SysTick_Handler push {R4,R5,LR} Clignoté diode R1 =>etat diode LDR R1,=Etat_diode LDRB R0,[R1] MVN R0, R0 inversion de l'états des diodes STRB R0,[R1] recuperation de l'emplacement dans la trame LDR R5,=Position_trame LDRB R4,[R5] recuperation du sens de lecture LDR R3, =Sens_lecture LDRB R2, [R3] Recuperation de l'octet dans la trame LDR R1,=Trame ADD R1,R4 LDRB R0,[R1,#-1] Allume les led en fonctions de R0.0-R0.7 PUSH {R2,R3} MVN R0,R0 BL Ecrit_LED POP {R2,R3} Modification de la position dans la trame CBNZ R2, decroissant Detection sens de lecture de la trame ADD R4,#-1 Si Affichage decroissant de la trame decroissant CBZ R2, croissant ADD R4,#1 Si Affichage croissant de la trame croissant Page: 2

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10...\handler_diodes2.s test si on à depasse la fin de trame CMP R4,#34 BLO pas_depasse_fin_trame passage en mode decroissant (0) MOV R2,#0 STRB R2, [R3] desactivation handler_diode LDR R0,=Activaton_handler_diode MOV R1,#0 STRB R1,[R0] emplacement dans la trame -- ADD R4,#-1 pas_depasse_fin_trame test si on à depasse le début de trame CBNZ R4, pas_depasse_deb_trame passage en mode croissant (1) MOV R2,#1 STRB R2, [R3] desactivation handler_diode LDR R0,=Activaton_handler_diode MOV R1,#0 STRB R1,[R0] emplacement dans la trame ++ ADD R4,#1 pas_depasse_deb_trame sauvegarde (nouvelle emplacement dans la trame) STRB R4,[R5] pop {R4,R5,LR} Fin_SysTick_Handler BX LR ENDP SysTick_Handler EXTERN font8data Mise_a_jour_trame PROC EXPORT Mise_a_jour_trame IN : R0 OUT : rien REGS : R0=>Les 4 caractère à metre dans la trame (double) R1=>Adresse de la tagle de convertion code ASCI => font des caractères (cha r font []) R2=>Compteur de 0 à 3 pour parcourir les 4 caractères (char) R3=>Caractère actuelement traité (char) puis font de ce caractère (int) R4=>2eme moitier de la font du caractère R5=>Adrèsse du caractère actuellement traité dans la font (char *) puis adresse de la trame REG. ALT. : R15 La fonction met à jour la trame grace au 4 caractère contenu dans R0 ALGO: Accisition de l'adresse de la table de font POUR numero_caractère DE 0 A 3 Extracton du caractère courant Calcul l'adresse de la font de ce caractère dans la table de font (font+8*car _ascii) Tourne cette font Acquisition cette font Page: 3

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10...\handler_diodes2.s Calcul de l'adresse de cette font dans la trame Ecriture de la font dans la trame FIN POUR push {R4,R5,R6,LR} Recuperer l'adresse de la table de font LDR R1,=font8data LDR R2,=0 parcours, convertions et sauvegarde des 4 caractères de R0 for (R2=0R2<4*8R2+=8) parcour_caractere Selection du R2ème caractère LSR R3,R0,R2 R3=>Caractère actuelement traité (char) AND R3,#0x000000FF masque pour selectioné uniquement le caractère Calcul de l'adresse de sa font ADD R5,R1,R3,LSL #3 R5=>Adrèsse du caractère actuellement trai té dans la font (char *) tourne la font PUSH {R0,R1,R2,R3} MOV R0, R5 BL Rotation MOV R5, R0 POP {R0,R1,R2,R3} Acquisition de sa font LDR R3,[R5],#4 R3=>1er moitié font de ce caractère LDR R4,[R5] R4=>2eme moitié font de ce caractère Calcul de l'adresse de ce caractère dans la trame LDR R5,=Trame ADD R5,R2 R4=R4+8*R2 =>R4 adresse du caractère dans la trame ADD R5,#1 Ecriture de la font du caractère dans la trame STR R3,[R5],#4 STR R4,[R5] incrementation et test du for (R2=0R2<3R2++) ADD R2,#8 CMP R2,#4*8 BLO parcour_caractere pop {R4,R5,R6,LR} BX LR ENDP Mise_a_jour_trame Give_activation_SysTick_Handler PROC EXPORT Give_activation_SysTick_Handler IN : R0 OUT : rien ecrit R0 dans activaton_handler_diode Si R0=0 => désactivation de handler_diode LDR R1,=Activaton_handler_diode STRB R0,[R1] BX LR ENDP Give_activation_SysTick_Handler Give_sens_lecture_trame PROC EXPORT Give_sens_lecture_trame IN : rien OUT : R0 écrit R0 dans sens de lecture 1 => croissant 0 => décroissant Page: 4

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_10...\handler_diodes2.s LDR R1,=Sens_lecture STRB R0,[R1] BX LR ENDP Give_sens_lecture_trame END module asm Page: 5

handler_detection ADC_IRQHandler : Détecte les phases du mouvement et démarre les trames en fonction. INIT_ADC_IRQHandler : Initialise le whatchdog pour l'appel de ADC_IRQHandler Kevin ROCARD

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_...\handler_detection.s PRESERVE8 THUMB IMPORT Lib$$Request$$armlib assure l'initialisation des variables après un reset INCLUDE../objs_lib_baguette/lib_baguette.inc déclaration des fonction de la librai rie Convention C utilise lors des appelles de fonctions seul les registres R0-R3,PC sont modifier VARIABLES initialisées AREA RESET, DATA Etat DCB 0 CONSTANTES MEMOIRE AREA RESET, DATA, READONLY CONSTANTES ETIQUETTES Seuil_debut_lecture_decroissant equ (22000*0xFFF)/33000 Aceleration_trop_eleve_decroissant equ (10000*0xFFF)/33000 Seuil_debut_lecture_croissant equ (13000*0xFFF)/33000 Aceleration_trop_eleve_croissant equ (28000*0xFFF)/33000 contrainte : Aceleration_trop_eleve_croissant > Seuil_debut_lecture_decroissant > Seuil_debut_lecture_croissant >Aceleration_trop_eleve_decroissant Le mouvement se découpe en 4 partie : 0 : le mouvement change de sens arrive de gauche et y repart 1 : le mouvement est constant de gauche à gauche 2 : le mouvement change de sens arrive de droite et y repart 3 : le mouvement est constant de droite à droite ALGO : SWITCH (ETAT) CASE (0) : prochaine interuption quand l'acceleration sera \ infèrieur à Seuil_debut_lecture_decroissant ETAT = 1 break CASE (1) : Sens decroissant Activation de l'afichage de la trame prochaine interuption quand l'acceleration sera \ infèrieur à Aceleration_trop_eleve_decroissant ETAT = 2 break CASE (2) : prochaine interuption quand l'acceleration sera \ supèrieur à Seuil_debut_lecture_croissant Page: 1

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_...\handler_detection.s ETAT = 3 break CASE (3) : Sens croissant Activation de l'afichage de la trame prochaine interuption quand l'acceleration sera \ supèrieur à Aceleration_trop_eleve_croissant ETAT = 0 break acquittement CODE AREA.text, CODE, READONLY, ALIGN=2 EXTERN Give_sens_lecture_trame EXTERN Give_activation_SysTick_Handler ADC_IRQHandler PROC EXPORT ADC_IRQHandler PUSH {R4,R5} LDR R5, =Etat LDR R4, [R5] switch (ETAT) CASE(0) CBNZ R4, PAS_ETAT_0 Programmation next interruption LDR R0,=Seuil_debut_lecture_decroissant BL Analog_Dog_Watch_For_Lower_Than LDR R4,=1 STRB R4, [R5] B Fin_case break PAS_ETAT_0 CASE(1) debut de la lecture dans le sens decroissant CMP R4, #1 BNE PAS_ETAT_1 sens lecture decroissant MOV R0,#0 BL Give_sens_lecture_trame activation lecture trame MOV R0,#1 BL Give_activation_SysTick_Handler Programmation next interruption LDR R0,=Aceleration_trop_eleve_decroissant BL Analog_Dog_Watch_For_Lower_Than LDR R4,=2 STRB R4, [R5] B Fin_case break PAS_ETAT_1 CASE(2) CMP R4, #2 BNE PAS_ETAT_2 Programmation next interruption LDR R0,=Seuil_debut_lecture_croissant BL Analog_Dog_Watch_For_Higher_Than LDR R4,=3 STRB R4, [R5] B Fin_case PAS_ETAT_2 CASE(3) debut de la lecture dans le sens croissant CMP R4, #3 BNE PAS_ETAT_3 sens lecture croissant MOV R0,#1 Page: 2

U:\documents\Informatique\3annee\Assembleur\colis_tp_asm_v20009_...\handler_detection.s BL Give_sens_lecture_trame activation lecture trame MOV R0,#1 BL Give_activation_SysTick_Handler Programmation next interruption LDR R0,=Aceleration_trop_eleve_croissant BL Analog_Dog_Watch_For_Higher_Than LDR R4,=0 STRB R4, [R5] B Fin_case PAS_ETAT_3 Fin_case BL Acquite_ADC acquittement sinon l'interruption reste toujours active! POP {R4,R5} retour d'interruption LDR LR,=0xFFFFFFF9 (au cas ou LR ai été modifié par le code) BX LR ENDP INIT_ADC_IRQHandler PROC EXPORT INIT_ADC_IRQHandler PUSH {LR} LDR R0,=Aceleration_trop_eleve_decroissant BL Analog_Dog_Watch_For_Higher_Than POP {LR} BX LR ENDP END module asm Page: 3