Programmation d’un SOC ARM

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.

../_images/Diapos_ARM.015-001.png

Introduction à ARM

Les architectures ARM

  • Modes de fonctionnement

../_images/Diapos_ARM.006-001.png
  • Les registres

  • Registre lors du retour des trappes

  • Accès aux registres

../_images/Diapos_ARM.002-001.png
  • Le registre de status

../_images/Diapos_ARM.005-001.png
  • Drapeaux de conditions (condition flags)

  • Le compteur de programme (R15)

Assembleur ARM

Les instructions ARM

../_images/Diapos_ARM.059-001.png
  • mouvements de registre

  • Accès au registre de status CPSR et SPSR

../_images/Diapos_ARM.061-001.png
  • opérations arithmétiques

  • Opérande immédiat

  • Arithmétique saturée

  • Multiplications et divisions

  • opérations logiques

  • Comparaisons

  • Exécution conditionnelle

  • Barrel Shifter

../_images/Diapos_ARM.013-001.png
  • Pipeline

../_images/Diapos_ARM.012-001.png

Branchements

../_images/Diapos_ARM.062-001.png
  • Instructions de branchement

../_images/Diapos_ARM.010-001.png
  • Gestion des registres LR et SP

../_images/Diapos_ARM.011-001.png
  • Retour d’appel

  • Passage en mode Thumb

  • SWI: Software Interrupt

../_images/Diapos_ARM.063-001.png
  • modification des registres lors d’une trappe

../_images/Diapos_ARM.003-001.png
  • Accès au registre de status CPSR

Coprocesseurs

  • Accès à un co-processeur

  • Opérations sur les coprocesseurs

../_images/Diapos_ARM.019-001.png

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

../_images/Diapos_ARM.018-001.png
  • 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

../_images/Diapos_ARM.007-001.png
  • 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

../_images/Diapos_ARM.020-001.png
  • C1: Le registre de contrôle

../_images/Diapos_ARM.021-001.png

C2/C3/C8/C10: gestion de la MMU

  • C2 et translation d’adresse

../_images/Diapos_ARM.022-001.png
  • C13: Fast Context Switch Extension

../_images/Diapos_ARM.034-001.png
  • Pagination

../_images/Diapos_ARM.026-001.png
  • rappel de fonctionnement d’une MMU

  • C8/C10 et changement de contexte et TLB

  • C2 le registre de contrôle de la MMU

../_images/Diapos_ARM.022-001.png
  • Descripteur de page de niveau 1

  • Descripteur de section

  • Descripteurs de niveau I

  • Les descripteurs de niveau II

  • C3: Gestion des domaines

../_images/Diapos_ARM.023-001.png

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

../_images/Diapos_ARM.024-001.png

C0/C9: Tiny Coupled Memory

../_images/Diapos_ARM.025-001.png
  • 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

../_images/Diapos_ARM.065-001.png
  • 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

../_images/Diapos_ARM.067-001.png
  • Registre de contrôle

../_images/Diapos_ARM.066-001.png
  • 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

../_images/Diapos_ARM.049-001.png
  • SMP

  • Registres spécifique

  • Wait for interrupt or event

  • Memory model

  • ARMv7 accès exclusifs

  • SNOOP Control Unit

../_images/Diapos_ARM.050-001.png

Cortex A et Securité

  • Descripteurs de page

  • Address Space ID

  • Modes de fonctionnement

  • Registre CPSR du cortex A8

Trustzone

  • Mode secure et non-secure

../_images/Diapos_ARM.054-001.png
  • Conséquences matérielles

../_images/Diapos_ARM.055-001.png
  • boot en mode secure

  • Secure Configuration register

../_images/Diapos_ARM.056-001.png
  • Accès aux coprocesseurs

../_images/Diapos_ARM.057-001.png
  • 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