Accueil🇫🇷Chercher

Freescale 68HC08

Les Freescale 68HC08 sont des microcontrĂ´leurs de la gamme 8 bits fabriquĂ©s par Freescale[1] (prĂ©cĂ©demment Motorola) sur base du cĹ“ur CPU08[2], dĂ©rivĂ© du CPU Motorola 6800.

Ils ont été conçus comme les successeurs améliorés des microcontrôleurs 6805 et 68HC05[3], pendant que les 68HC12 succédaient aux 68HC11.

Par rapport au 68HC05

Comme améliorations par rapport aux microcontrôleurs 68HC05, on peut citer :

  • des nouvelles instructions et de nouveaux modes d'adressages, l'assembleur restant cependant compatible au niveau du code objet avec celui du HC05 ;
  • pointeur de pile et un registre d'index sur 16 bits, permettant d'adresser directement les 64Ko de la mĂ©moire ;
  • des pĂ©riphĂ©riques amĂ©liorĂ©s ;
  • une frĂ©quence supĂ©rieure : La frĂ©quence « bus Â» cadence le CPU et les pĂ©riphĂ©riques jusqu'Ă  25 MHz (cycle d'instruction de 40 ns).
  • mĂ©moire Flash sur tous les modèles (jusqu'Ă  128Ko)

Ils sont optimisés pour la programmation en langage C.

DĂ©nominations et familles

À leur sortie fin des années 90, les micro-contrôleurs à base de CPU08 ont été identifiés de la manière suivante (exemple) :

MC68HC908GP32CP, qui se décompose en :

  • MC68 : appellation gĂ©nĂ©rique des micro-contrĂ´leurs Motorola descendant du 6800
  • HC 908 : « HC » indique le procĂ©dĂ© de fabrication HC MOS; « 9 » indique le type de mĂ©moire (Flash) et 08 la version du CPU
  • GP indique la famille
  • 32 : quantitĂ© approximative de mĂ©moire Flash (en Ko)

Les lettres qui suivent indiquent le type de boitier (CP = DIL) et la gamme de température opérationnelle.

Les dénominations ont changé lorsque ces composants sont devenus RoHS en 2006 : Le « MC68HC908 » a été remplacé par « MC908 ». Ainsi, le MC68HC908GP32 est devenu MC908GP32. À l'exception d'une famille (AP, les MC908 sont fabriqués en procédé HC MOS de 0,5 micron.

En 2004, est apparue la nouvelle génération des 68HC08: les MC9S08. Ceux-ci sont fabriquées en procédé HC MOS 0,25 micron, possèdent des périphériques améliorés, ont quelques modes d'adressage et instructions supplémentaires et sont (trois fois) plus rapides que les MC908[4]. Un micro contrôleur 68HC08 actuel se dénomme par exemple MC9S08QG8CPE. Ils sont également optimisés du point de vue consommation et possèdent différents modes d'arrêt qui placent le contrôleur dans différents états de très basse consommation. Tous les MC9S08 possèdent également un oscillateur interne de précision, ce qui permet de se passer d'un quartz externe dans la grande majorité des cas.

Il existe de nombreuses familles, différant par le nombre et la nature des périphériques. En général :

  • Qx sont des entrĂ©es de gamme Ă  bas coĂ»t ;
  • Gx sont des familles d'usage gĂ©nĂ©ral ;
  • Rx sont dĂ©diĂ©es aux tĂ©lĂ©commandes ;
  • Lx sont des familles avec gestion de LCD ;
  • Jx sont des familles avec pĂ©riphĂ©rique USB ;
  • xZ sont des familles avec bus CAN ;
  • Ax sont des familles avec timers amĂ©liorĂ©s.

Architecture et caractéristiques

  • L'Architecture est du type « von Neumann Â», en opposition avec l'architecture type « Harvard ». La mĂ©moire de mots de 8 bits est adressĂ©e de manière linĂ©aire sur 16 bits, sans banques ou pages. Le programme et les donnĂ©es rĂ©sident indiffĂ©remment en RAM ou ROM. Les registres d'entrĂ©e-sortie et les registres des autres pĂ©riphĂ©riques sont mappĂ©s dans la mĂ©moire et se gèrent de la mĂŞme manière qu'une case mĂ©moire banalisĂ©e.
  • Pointeur de pile et registre d'index sur 16 bits, permettant d'adresser 64 Ko de mĂ©moire
  • MĂ©moire ROM du type Flash
  • Jeu de 89 instructions CISC permettant un code assembleur intuitif, compact et lisible, facilitant la maintenance.
  • Jusqu'Ă  64 vecteurs d'interruption distincts, de prioritĂ© fixe. Le sauvetage du contexte sur la pile est automatique.
  • Le registre d'index et le pointeur de pile peuvent ĂŞtre utilisĂ©s pour rĂ©aliser des opĂ©rations directement sur 16 bits.
  • Instructions arithmĂ©tiques de multiplication entière « MUL Â» de 8x8 bits et de division « DIV Â» de 16 par 8 bits, avec rĂ©sultat et reste sur 8 bits.
  • Oscillateur interne et PLL sur tous les modèles S08
  • Le modèle de programmation, c'est-Ă -dire le jeu de registres du CPU qui sont accessibles au programmeur consiste en :
    • un accumulateur A de 8 bits,
    • un registre d'index (H:X) de 16 bits,
    • un pointeur de pile (SP) de 16 bits,
    • un compteur ordinal (PC) de 16 bits,
    • un registre d'Ă©tat (CCR) de 8 bits.

Instructions et modes d'adressage

Les instructions CPU08 sont codées sur 1,2 ou 3 octets, dépendant du mode d'adressage. Elles s'exécutent en 1 à 11 cycles d'horloge, 3 à 4 en moyenne . Ce sont des instructions CISC, qui sont en fait équivalentes à plusieurs instructions RISC. Par exemple, une seule instruction CBEQ X+, LOOP :

  • compare la valeur de l'accumulateur A Ă  celle contenue Ă  l'adresse mĂ©moire pointĂ©e par le registre d'index;
  • branche au label LOOP si Ă©galitĂ©;
  • incrĂ©mente le registre d'index.

Le CPU08 met en œuvre plusieurs mode d'adressage de base différents :

inhérent (ou implicite ou absolu) : L'opérande est implicite, par exemple : CLRA (Clear A), MUL (Multiply). Ces instructions sont en général codées sur un seul octet.

immĂ©diat : La valeur de l'opĂ©rande est contenue dans l'instruction. Par exemple : LDA #10 (Charge A ou LoaD A) avec la valeur 10.

direct : Ce mode d'adressage permet d'adresser les 256 premiers octets de la mĂ©moire (de 0x00 Ă  0xFF, zone aussi appelĂ©e « page zĂ©ro Â»). Il optimise les instructions dans la mesure oĂą l'adresse de cette zone est reprĂ©sentĂ©e par un seul octet, ce qui rĂ©duit la taille de l'instruction et la vitesse d'exĂ©cution de celle-ci. Ă€ remarquer que les ports d'entrĂ©e-sortie sont mappĂ©s dans cette zone. Par exemple : LDA $00 (charge A avec le contenu de l'adresse $00 (en gĂ©nĂ©ral le port A)).

étendu : Ce mode permet d'adresser toute la mémoire avec une adresse sur 16 bits.

relatif : Ce mode d'adressage ajoute un opérande de 8 bits signé (de +127 à - 127) au compteur ordinal (PC). Ce mode d'adressage est utilisé principalement pour les instructions de branchement, et en particulier pour les boucles. Par exemple : DBNZA LOOP (Decrement and Branch if Not Zero ou décrémente l'accumulateur A, et branche à l'étiquette LOOP si A est différent de 0).

indexé sans déplacement, avec déplacement de 8 bits, avec déplacement de 16 bits, avec post-incrément, avec post-incrément et déplacement sur 8 bits. L'adresse est contenue dans le registre d'index (H:X). Un déplacement de 8 ou 16 bits peut lui être ajouté et il peut être incrémenté après l'opération. Les modes d'adressage post-incrémentés sont utilisés uniquement avec les instructions DBNZ (Decrement and Branch if Not Zero) et CBEQ (Compare and Branch in EQual). Ils permettent de réaliser des contrôles de boucles particulièrement efficaces.

indexé sur le pointeur de pile, avec déplacement de 8 bits et avec déplacement de 16 bits. L'adressage relatif sur le pointeur de pile est particulièrement utile pour le code écrit en C : Les variables locales et les paramètres des fonctions sont adressées relativement au pointeur de pile, ce qui permet de libérer l'espace mémoire à la sortie de la fonction.

de mémoire à mémoire . Certaines opérations ne nécessitent pas le transfert via l'accumulateur. Par exemple : MOV #$55,$00 (place la valeur 55 à l'adresse mémoire 00 (le PORT A)).

Environnement de développement

L'environnement de développement proposé par Freescale s'appelle CodeWarrior[5], actuellement basé sur l'IDE Eclipse. Il comprend :

  • un assembleur ;
  • un compilateur C ;
  • un dĂ©bogueur ;
  • un simulateur.

Le module "Processor Expert" de UNIS[6] inclus dans CodeWarrior configure graphiquement les pĂ©riphĂ©riques et gĂ©nère le code C correspondant. CodeWarrior est gratuit dans sa version proposĂ©e en « Special Edition Â»[7] jusqu'Ă  64Ko de code objet en C. L'assembleur est illimitĂ©.

Programmation et débogage

Les MC68HC908 se programmaient/dĂ©boguaient via une liaison sĂ©rie mobilisant 3 Ă  4 pattes du contrĂ´leur. Un programme particulier (appelĂ© « moniteur Â») intĂ©grĂ© en ROM permettait la communication. L'interface PC - cible appelĂ©e « MON08 Â» se fondait gĂ©nĂ©ralement sur le port sĂ©rie. L'entrĂ©e en mode « moniteur Â» Ă©tait dĂ©clenchĂ©e par l'application d'une haute tension (7,5 Ă  9 V) sur la patte d'interruption externe Ă  la mise sous tension.

Les MC9S08 ont hĂ©ritĂ© du module de dĂ©bogage intĂ©grĂ© des 68H12 et ColdFire, le BDM (Background Debug Module). La programmation/debug s'effectue via une seule patte du contrĂ´leur et par USB du cĂ´tĂ© PC. L'interface cible – PC ou sonde est appelĂ©e « pod BDM Â»

Le module BDM intĂ©grĂ© aux contrĂ´leurs MC9S08 permet un dĂ©bogage « In Circuit Â» en temps rĂ©el non intrusif, ne mobilisant pas de ressources du uC avec des points d'arrĂŞt conditionnels ainsi que des possibilitĂ©s de traçage du bus. Il permet d'Ă©viter dans une certaine mesure l'utilisation d'un Ă©mulateur. La sonde BDM s'adapte automatiquement Ă  la tension et Ă  la frĂ©quence de la cible.

Freescale soutient la rĂ©alisation de sondes BDM « Open Source Â» sous licence GPL dont le code et le hardware sont ouverts[8].

Une réalisation open source et open hardware, l'USBDM[9] est proposée sur SourceForge.net.

Évolutions

La famille S08 a amené à des évolutions :

  • Vers le bas avec la famille RS08 mettant en Ĺ“uvre un CPU S08 simplifiĂ©, optimisant la surface de silicium.
  • Vers le haut : en 2007, Freescale a sorti les contrĂ´leurs « Flexis Â»[10]. Ceux-ci intègrent les mĂŞmes pĂ©riphĂ©riques S08 mais un cĹ“ur 32 bits ColdFire V1 (MCF51). L'accent est mis sur la compatibilitĂ© avec les S08 :
    • pĂ©riphĂ©riques identiques,
    • brochage identique,
    • mĂŞme IDE (CodeWarrior),
    • mĂŞme matĂ©riel de programmation/debug (BDM). Le BDM « open source Â» est identique et Ă©galement supportĂ©,
    • les applications Ă©crites en C pour les S08 se recompilent sans modification pour les MCF51 (pour autant que le code source ne contienne pas d'assembleur et d'adresses absolues).

À noter également que Freescale produit des puces RF 2,4 GHz (pour protocole Zigbee) intégrant un microcontrôleur MC9S08 (exemple).


Notes et références

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.