.. meta:: :description: Formation microprocesseur ARM :keywords: ARM, Linux, microprocesseur, assembleur, RISC, thumb, thumb2 Programmation d'un SOC ARM ************************** .. admonition:: Résumé Les processeurs ARM sont devenus les plus processeurs utilisés au monde dans les systèmes embarqués, que ce soit en contrôle-commande ou dans les smartphones. Nous étudions ici l'architecture des processeurs ARM, ce qui fait leur succès puis comment utiliser les différents langage assembleur, ARM/THUMB, de ainsi que la programmation système associée aux SOC (System On Chip) ARM. .. image:: img_arm/Diapos_ARM.015-001.png :width: 300pt :align: center Introduction à ARM ------------------ Les architectures ARM +++++++++++++++++++++ * Modes de fonctionnement .. image:: img_arm/Diapos_ARM.006-001.png :width: 100pt :align: center * Les registres * Registre lors du retour des trappes * Accès aux registres .. image:: img_arm/Diapos_ARM.002-001.png :width: 100pt :align: center * Le registre de status .. image:: img_arm/Diapos_ARM.005-001.png :width: 100pt :align: center * Drapeaux de conditions (condition flags) * Le compteur de programme (R15) Assembleur ARM -------------- Les instructions ARM ++++++++++++++++++++ .. image:: img_arm/Diapos_ARM.059-001.png :width: 100pt :align: center * mouvements de registre * Accès au registre de status CPSR et SPSR .. image:: img_arm/Diapos_ARM.061-001.png :width: 100pt :align: center * opérations arithmétiques * Opérande immédiat * Arithmétique saturée * Multiplications et divisions * opérations logiques * Comparaisons * Exécution conditionnelle * Barrel Shifter .. image:: img_arm/Diapos_ARM.013-001.png :width: 100pt :align: center * Pipeline .. image:: img_arm/Diapos_ARM.012-001.png :width: 100pt :align: center Branchements ++++++++++++ .. image:: img_arm/Diapos_ARM.062-001.png :width: 100pt :align: center * Instructions de branchement .. image:: img_arm/Diapos_ARM.010-001.png :width: 100pt :align: center * Gestion des registres LR et SP .. image:: img_arm/Diapos_ARM.011-001.png :width: 100pt :align: center * Retour d'appel * Passage en mode Thumb * SWI: Software Interrupt .. image:: img_arm/Diapos_ARM.063-001.png :width: 100pt :align: center * modification des registres lors d'une trappe .. image:: img_arm/Diapos_ARM.003-001.png :width: 100pt :align: center * Accès au registre de status CPSR Coprocesseurs +++++++++++++ * Accès à un co-processeur * Opérations sur les coprocesseurs .. image:: img_arm/Diapos_ARM.019-001.png :width: 100pt :align: center Mémoire ------- Accès à la mémoire ++++++++++++++++++ * lecture et écriture mémoire * pseudo instructions d'accès mémoire * transfert de donnée, base plus offset * transfert de donnée, pre-indexation, caractère '!' * transfert de donnée, post-indexation Les accès multiples à la mémoire ++++++++++++++++++++++++++++++++ * Accès multiple avec incrément * LDMxx .. image:: img_arm/Diapos_ARM.018-001.png :width: 100pt :align: center * STMxx * La gestion des piles * Acces multiples et registres cachés * Nouvelles instructions de gestion de modes Environnement de compilation ---------------------------- Programmation C et assembleur +++++++++++++++++++++++++++++ * Les pointeurs et les tableaux * tests de condition, if et switch * Tableau de fonction Environnement Linux +++++++++++++++++++ * Le format ELF * ELF * objdump * objcopy * Makefile * script du linker Directives de l'assembleur GNU ++++++++++++++++++++++++++++++ * Directives de contrôle de flux * Directives de contrôle d'adresse et du loader * Directives de définition de données Opérations particulières ------------------------ Les opérations atomiques ++++++++++++++++++++++++ * Opérations atomiques ARMv5 * Cortex, Exclusive load and store * Bit Banding * Memory Barrier Mode THUMB ++++++++++ * Mode THUMB * Changement de mode * Branchement dans THUMB * Instructions THUMB de gestion de données * Instructions d'accès mémoire * THUMB-2, Jazelle, et Jazelle-RCT Interface C et assembleur ARM ----------------------------- Assembleur vers C +++++++++++++++++ * APCS: ARM Procedure Call Standard * Passage des paramètres * Exemple d’appel de fonction C * Exemple: start_kernel C vers assembleur +++++++++++++++++ * Stack frame * Bibliothèques de fonctions assembleur. * Standard C et ARM * GCC assembler inline Gestion des exceptions ---------------------- Les vecteurs d'exception ++++++++++++++++++++++++ * Les vecteurs .. image:: img_arm/Diapos_ARM.007-001.png :width: 100pt :align: center * Adresse des vecteurs * Initialisation des vecteurs d'exception * Exception et pipeline * Interruption logicielle * Utilisation des bancs de registres * Retour vers le mode utilisateur * Interruption Matériel IRQ * Interruption Matériel FIQ * Exceptions Les différentes façons de gérer une interruption ++++++++++++++++++++++++++++++++++++++++++++++++ * Le contrôleur d'interruption * Gestion des IT par ARM * Gestion des interruptions * Gestion standard * Gestion ré-entrante * Gestion de priorité sur les interruptions * Vecteurs incorporés * Présentation de quelques périphériques standards, PIC, timer, UART. * Le dual timer SP-804 Programmation système ARM9 -------------------------- gestion des coprocesseurs +++++++++++++++++++++++++ * Différents coprocesseurs * Debug * Coprocesseurs mathématiques Le coprocesseur système CP15 ++++++++++++++++++++++++++++ * Accès au coprocesseur CP15 * C0: identification .. image:: img_arm/Diapos_ARM.020-001.png :width: 100pt :align: center * C1: Le registre de contrôle .. image:: img_arm/Diapos_ARM.021-001.png :width: 100pt :align: center C2/C3/C8/C10: gestion de la MMU +++++++++++++++++++++++++++++++ * C2 et translation d'adresse .. image:: img_arm/Diapos_ARM.022-001.png :width: 100pt :align: center * C13: Fast Context Switch Extension .. image:: img_arm/Diapos_ARM.034-001.png :width: 100pt :align: center * Pagination .. image:: img_arm/Diapos_ARM.026-001.png :width: 100pt :align: center * rappel de fonctionnement d'une MMU * C8/C10 et changement de contexte et TLB * C2 le registre de contrôle de la MMU .. image:: img_arm/Diapos_ARM.022-001.png :width: 100pt :align: center * Descripteur de page de niveau 1 * Descripteur de section * Descripteurs de niveau I * Les descripteurs de niveau II * C3: Gestion des domaines .. image:: img_arm/Diapos_ARM.023-001.png :width: 100pt :align: center C7: Gestion des cache +++++++++++++++++++++ * Caches: ways, index et tags * Incohérence de cache * Coloration de page C7: La gestion spécifiques des barrières ++++++++++++++++++++++++++++++++++++++++ * IMB: Instruction Memory Barrier * Barrière d'accès aux données * Rappel sur les barrières * Accès arbitré C5/C6: Gestion des fautes +++++++++++++++++++++++++ .. image:: img_arm/Diapos_ARM.024-001.png :width: 100pt :align: center C0/C9: Tiny Coupled Memory ++++++++++++++++++++++++++ .. image:: img_arm/Diapos_ARM.025-001.png :width: 100pt :align: center * Déterminer si la TCM est présente * Accéder à la TCM * Exemple d'utilisation de la TCM Programmation système Cortex ---------------------------- Cortex M ++++++++ * Caractéristiques Cortex-M .. image:: img_arm/Diapos_ARM.065-001.png :width: 100pt :align: center * Programmation système Cortex-M3 * Nested Vectored Interrupt Support * Gestion mémoire * Code et instructions * Gestion des interruptions et traps * Support de DEBUG * Gestion de pile * Registres de status .. image:: img_arm/Diapos_ARM.067-001.png :width: 100pt :align: center * Registre de contrôle .. image:: img_arm/Diapos_ARM.066-001.png :width: 100pt :align: center * Instruction IT * Instruction CBZ * Memory Barriers * Table Branch Thumb +++++ * Mixer THUMB et THUMB2 * Mise en œuvre thumb * Le code généré Utiliser un processeur M3 avec du C uniquement ++++++++++++++++++++++++++++++++++++++++++++++ Cortex A ++++++++ * Cortex A8 * Cortex A9 * Cortex A15 * big-LITTLE * big.LITTLE task switch * Cluster scheduling * In Kernel Switcher scheduling * HMP Heterogeneous Multi-processing * NEON .. image:: img_arm/Diapos_ARM.049-001.png :width: 100pt :align: center * SMP * Registres spécifique * Wait for interrupt or event * Memory model * ARMv7 accès exclusifs * SNOOP Control Unit .. image:: img_arm/Diapos_ARM.050-001.png :width: 100pt :align: center Cortex A et Securité ++++++++++++++++++++ * Descripteurs de page * Address Space ID * Modes de fonctionnement * Registre CPSR du cortex A8 Trustzone +++++++++ * Mode secure et non-secure .. image:: img_arm/Diapos_ARM.054-001.png :width: 100pt :align: center * Conséquences matérielles .. image:: img_arm/Diapos_ARM.055-001.png :width: 100pt :align: center * boot en mode secure * Secure Configuration register .. image:: img_arm/Diapos_ARM.056-001.png :width: 100pt :align: center * Accès aux coprocesseurs .. image:: img_arm/Diapos_ARM.057-001.png :width: 100pt :align: center * MMU et accès sécurisé * Les vecteurs * Interruptions * NMI pour mode secure * aspect matériel Cortex A et virtualisation ++++++++++++++++++++++++++ * Virtualisation des interruptions * Virtualisation mémoire