Brevet FR2772948A1 — publié le 19990625

MICROCONTROLEUR AVEC INTERFACE PERFECTIONNEE ET PROCEDE D'UTILISATION La présente invention a pour objet un microcontrôleur muni d'une interface perfectionnée ainsi qu'un procédé d'utilisation de ce microcontrôleur et de cette interface. L'invention vise à accélérer les relations entre un microcontrôleur et le monde extérieur par le biais de son interface incorporée. Cette accélération concerne principalement la mise au point du fonctionnement du microcontrôleur. Elle pourrait néanmoins concerner toute phase classique d'utilisation du microcontrôleur. Un microcontrôleur est un circuit comportant, sur un même circuit intégré, d'une part un microprocesseur (ou unité centrale de traitement) et d'autre part une mémoire programme. Le jeu d'instructions du microprocesseur contenu dans la mémoire programme est adapté à un programme, une application que le microcontrôleur doit exécuter. On connaît des microcontrôleurs avec des jeux d'instructions plus ou moins puissants, et donc des programmes plus ou moins importants, selon l'application à laquelle ils sont destinés: contrôle de disque dur dans un microordinateur de type compatible, commande d'un organe quelconque (feu de clignotement) dans le domaine de l'automobile. La mise au point des jeux d'instructions et du programme des microcontrôleurs est souvent lente et fastidieuse. En effet, le microcontrôleur comporte naturellement une interface pour échanger des informations avec le monde extérieur. Ces informations sont essentiellement des données à recevoir, et des ordres à envoyer, correspondant à l'utilisation future du microcontrôleur. Dans ce but l'interface, comporte un bus de commande, et le plus généralement deux registres d'échange de données ou d'adresses. L'interface possède en elle-même, en général, un circuit câblé de nature à assurer une conversion série parallèle entre un protocole interne au microcontrôleur (parallèle) et un protocole généralement utilisé dans la relation avec le microcontrôleur (série). Plus généralement l'interface comporte des circuits de conversion de protocole. Dans certains cas, le bus de commande est lui-même inexistant: il est remplacé par une configuration particulière de bits de mots chargés dans les registres d'échange. Dans tous les cas, pour des raisons de coûts, on admet de réduire la structure d'échange avec le monde extérieur à son strict minimum. Ceci est la raison pour laquelle, en particulier, le nombre de registres est peu élevé. Il s'ensuit alors une lourdeur d'utilisation du microcontrôleur, notamment lors de la phase de réglage du programme d'utilisation. En effet, au cours d'une telle phase de réglage, le microcontrôleur est en relation avec un circuit hôte. La relation a alors pour but de surveiller le fonctionnement du microcontrôleur. Dans ce cas, il faut pouvoir lire des états électriques du microcontrôleur à certaines étapes (celles où un défaut de fonctionnement est constaté). La relation a aussi pour but de forcer le fonctionnement du microcontrôleur. Dans ce cas, le circuit hôte va écrire des états dans certains registres du microcontrôleur. Le circuit hôte a, pour chaque action de lecture effectuée sur le microcontrôleur, à lancer trois opérations: - une première opération consiste à charger dans les registres d'échange de l'interface, d'une part un ordre de lecture et, d'autre part, l'adresse de l'endroit où une donnée doit être lue dans le microcontrôleur; - une deuxième opération concerne la mise à exécution de l'ordre chargé; - et une troisième opération concerne la lecture dans un registre d'échange de l'interface de la donnée lue à l'adresse indiquée. Ce mécanisme est long. Il pose un problème de durée de mise au point, notamment lorsque le nombre d'emplacements de la mémoire du microcontrôleur à lire est important. Au moment de l'écriture pour le forçage du microcontrôleur, l'opération est un peu plus courte. Elle comporte d'une part le chargement de l'ordre d'écriture et de la donnée à écrire, ainsi que de l'adresse où cette donnée doit être écrite dans la mémoire (ou un registre) du microcontrôleur. Au cours d'une deuxième étape le circuit hôte donne l'ordre au microcontrôleur d'exécuter l'instruction d'écriture qui est disponible dans les registres d'échange. Il faut donc deux étapes dans ce dernier cas pour modifier une donnée. C'est trop long. Les endroits de la mémoire du microcontrôleur où il faut écrire ou lire sont variés. Dans la suite de cet exposé on se contentera de parler de la mémoire. Cette appellation de mémoire du microcontrôleur concerne autant une mémoire proprement dite que des registres de fonctionnement du microcontrôleur. Cette mémoire peut ainsi être d'une part une mémoire programme: là où sont stockées les instructions à exécuter dans le microprocesseur. D'autre part, elle peut être une mémoire de données: là où sont stockées des données mesurées ou des paramètres de commande du microcontrôleur. Enfin, cette mémoire pourra représenter un lot de registres de paramétrisation ou de fonctionnement du microcontrôleur: notamment un lot de registres de paramétrisation de ses périphériques. Ainsi il est connu que l'interface elle-même, du fait des différents protocoles qu'elle est susceptible d'accepter, doit être paramétrée par des états mémorisés dans des registres. D'autres périphériques comme des compteurs internes, des registres de fréquence d'horloge, ou même des registres de surveillance du microcontrôleur sont ainsi concernés par les échanges avec l'interface. Notamment, en ce qui concerne la surveillance du fonctionnement du microcontrôleur, il est prévu, dans certaines applications, de constituer une batterie supplémentaire de registres utilisables, en émulation, pour surveiller le fonctionnement du microcontrôleur. Cette surveillance est rendue nécessaire lors des étapes de mise au point. Dans ces conditions, la lenteur des communications effectuées au niveau de l'interface est encore accentuée par la nature structurellement compliquée de la relation en adressage indirect avec les registres supplémentaires. L'invention a pour objet de résoudre ce problème crucial de la lenteur des échanges, en accélérant notablement le fonctionnement de l'interface. Plutôt que de souscrire à une opération en trois étapes, ou en deux étapes pour l'écriture, l'invention modifie l'architecture du microcontrôleur de façon à ce que celle-ci puisse ne s'effectuer qu'en une seule étape. Dans l'invention, on dote l'interface d'un registre supplémentaire auxiliaire. En outre, on prévoit un mécanisme d'incrémentation automatique de l'adresse contenue dans l'un des deux registres d'échange prévu à l'origine. En effet, dans l'invention on a remarqué que, notamment pour la mise au point, la surveillance de registres ou de zones mémoires à adresses contigües était principalement envisagée. De ce fait, l'automate ajouté dans la structure de l'invention est un automate qui rajoute un incrément d'adresse correspondant à la contiguïté concernée. Dans la pratique l'incrément d'adresse vaut 1. Il pourrait néanmoins en être autrement. Dans un perfectionnement, on a même prévu que l'automate lui-même serait corrélé à la lecture ou à l'écriture du registre auxiliaire. Dans ces conditions, il suffit de lire ou d'écrire le registre auxiliaire pour qu'automatiquement un ordre chargé dans le registre de commande s'exécute. On montrera ainsi qu'avec l'invention on va trois fois plus vite pour la gestion de l'interface. L'invention a donc pour objet un microcontrôleur comportant - une unité centrale de traitement, - une mémoire programme et/ou de données en relation avec l'unité centrale, - une interface d'entrée sortie, - un premier registre d'échange pour contenir un code instruction et une information relative à une donnée à lire ou à écrire, et un deuxième registre d'échange pour contenir une adresse, les premier et deuxième registres étant reliés à l'interface, et - un circuit de basculement relié à l'interface, à la mémoire programme et à l'unité centrale, pour basculer, en fonction d'un signal de commande disponible sur cette interface, une liaison de l'unité centrale à la mémoire programme en une liaison aux deux registres d'échange, caractérisé en ce qu'il comporte - un registre auxiliaire connecté à l'interface, - un circuit d'incrémentation automatique d'adresse pour incrémenter la valeur d'une adresse contenue dans le deuxième registre d'échange, et - des moyens d'adressage indirect vers le registre auxiliaire qui prélèvent dans le premier registre d'échange, à titre d'information relative à la donnée, l'adresse du registre auxiliaire où cette donnée est stockée. L'invention a également pour objet un procédé de lecture écriture dans une mémoire de donnée d'un microcontrôleur à partir d'une interface d'entrée sortie dans lequel: - on charge dans des premier et deuxième registres d'échange du microcontrôleur un code instruction, une information relative à une donnée à lire ou à écrire, et une adresse, - on bascule le fonctionnement d'une unité centrale de traitement du microcontrôleur pour que cette unité centrale exécute l'instruction dont le code est chargé dans le premier registre, caractérisé en ce que: - on charge la donnée lue ou à écrire dans un registre auxiliaire en relation avec l'interface, - on incrémente automatiquement avec un automate l'adresse chargée dans le deuxième registre, et - on exécute avec un adressage indirect orienté vers le registre auxiliaire l'instruction dont le code est chargé dans le premier registre. L'invention sera mieux comprise à la lecture de la description qui suit et à l'examen des figures qui l'accompagnent. Celles-ci ne sont données qu'à titre indicatif et nullement limitatif de l'invention. Les figures montrent: figure 1 et figure 2: une représentation schématique d'un microcontrôleur selon l'état de la technique et selon l'invention respectivement. Les figures 1 et 2 montrent un microcontrôleur 1, comportant une unité centrale 2, une mémoire programme 3 et une mémoire de données 4. La mémoire programme et la mémoire de donnée peuvent en pratique être confondues en une seule mémoire. En principe la mémoire programme 3 est une mémoire non volatile ou une mémoire sauvegardée. La mémoire 4 peut être une mémoire volatile. Il est néanmoins possible que la mémoire 3 soit elle-même une mémoire volatile et que son chargement soit prévu au moment de la mise en service du microcontrôleur 1. Les mémoires 3 et 4, symboliquement représentées ici peuvent également comporter des registres de paramétrisation (fonctionnement du microcontrôleur ou de ses périphériques). Elles peuvent également représenter comme indiqué précédemment, des registres de surveillance du fonctionnement du microcontrôleur en mode émulation. Le microcontrôleur des figures 1 et 2 comporte également une interface d'entrée/sortie 5. L'interface 5 sert à assurer la relation entre un circuit hôte 6 et le microcontrôleur 1. Dans un exemple, le circuit hôte est un micro-ordinateur de type compatible relié à l'interface par une liaison 7 de type RS232. Dans un exemple, l'interface 5 est une interface parallèle/série. En effet, du côté du microcontrôleur l'interface fonctionne en parallèle: il y a autant de fils que nécessaire dans les bus de communication avec les circuits du microcontrôleur. Par contre, dans la relation 7 avec le circuit hôte 6, le nombre de fils est généralement réduit. On connaît même par ailleurs des bus à deux fils. L'interface 5, est donc naturellement chargée d'assurer la conversion de protocole entre l'extérieur et l'intérieur du microcontrôleur 1. Le microcontrôleur 1 comporte par ailleurs, un premier registre 8 d'échange et un deuxième registre 9 d'échange. Le premier registre 8 est destiné à contenir un code instruction 10 et une information il relative à une donnée à lire ou à écrire. Dans l'état de la technique, figure 1, la donnée chargée dans la partie il du registre 8 est la donnée elle-même: celle qui a été lue ou qui est à écrire telle quelle dans une des mémoires 3 ou 4. Dans l'invention, figure 2, on verra que l'information relative à la donnée à lire ou à écrire est en fait une information d'adresse. L'adresse est celle d'un registre auxiliaire où la donnée lue proprement dite a été écrite, ou bien celle qui étant à écrire a été écrite avant l'écriture. Le registre 9 comporte une information d'adresse de là où il faut lire ou écrire la donnée référencée dans la partie ll du registre 8. Les circuits des figures 1 et 2, comportent enfin un circuit de basculement 12 pour basculer, en fonction d'un signal de commande, une liaison 13 de l'unité centrale 2 à la mémoire de programme 3, en une liaison 14 de l'unité centrale 2 au jeu des registres 8 et 9. Le signal de commande du circuit de basculement 12, est véhiculé par un bus 15 relié à l'interface. Dans l'état de la technique, pour la lecture, le fonctionnement est le suivant. Dans un premier temps, au moyen de l'interface 5, le circuit hôte 6 charge, dans les registres 8 et 9, un code d'instruction dans la partie 10 et une adresse dans le registre 9. Pendant ce temps l'unité centrale 2 est toujours en liaison normale 13 entre sa mémoire programme 3 et sa mémoire de donnée 4, (ou la même mémoire). Au cours d'une deuxième étape, le circuit hôte 6 envoie un ordre à travers l'interface 5, sur le bus 15, de manière à faire basculer le circuit 12. Dans ces conditions, le code instruction chargé dans la partie 10, est transmis, au travers d'un décodeur d'instruction 16 à l'unité centrale 2. Celle-ci exécute l'instruction. Par exemple, l'instruction étant une instruction de lecture, l'unité centrale 2 provoque la lecture dans la mémoire 4, d'une information stockée à une adresse "mem" dont la valeur est stockée dans le registre 9. Le code instruction chargé dans le registre 10 a ensuite pour effet de faire exécuter par l'unité centrale 2 le transfert de la valeur lue dans la mémoire 4 dans la partie 11 du registre 8. A l'issue de la lecture, la donnée lue à l'adresse "mem" est disponible dans la partie 11 du registre 8. Au cours d'une troisième étape, le circuit hôte 6 va alors aller lire le contenu du registre 8. On voit que cette opération est assez longue. Dans l'invention, figure 2, on a décidé de modifier l'architecture du microcontrôleur de la figure 1. On y a d'une part ajouté un registre auxiliaire 17. Le registre auxiliaire 17, est connecté d'une part à l'interface, d'autre part à l'unité centrale 2. Ceci signifie que le registre 17 peut être adressé par l'unité centrale 2, de même que par l'interface 5. Le microcontrôleur 1 de l'invention comporte de plus, un circuit d'incrémentation 18 pour incrémenter automatiquement la valeur d'une adresse contenue dans le deuxième registre 9. Comme indiqué précédemment, l'information stockée dans la partie 11 du registre 8, ne concerne plus la donnée elle-même mais contient, en lecture ou en écriture, l'adresse du registre auxiliaire 17. L'utilisation du circuit de l'invention, est alors bien plus simple que celui de l'état de la technique. En effet, dans une version de base, il suffit de piloter le circuit 18 pour provoquer l'incrémentation du lieu où les données sont à lire ou à écrire. Ce pilotage du circuit 18, peut être, dans une première approche, réalisé par une connexion du bus 15 au circuit 18. Le fonctionnement du microcontrôleur 1 est alors le suivant. Pour la lecture d'un endroit de la mémoire, il y a la succession des ordres suivants: - chargement du code instruction de lecture dans la zone 10, et chargement de l'adresse du registre 17 dans la zone 11 du registre 8. Au cours de la même étape est chargée l'adresse "mem - 1", la zone de la mémoire 4 où doit être lue l'information, dans le registre 9; - au cours d'une deuxième étape, l'ordre de lecture est envoyé par le bus 15. En même temps que l'ordre de basculement est envoyé au circuit 12, le circuit 18 modifie la valeur de l'adresse stockée dans le registre 9, de cette façon celle-ci devient "mem". Le circuit central de traitement 2 exécute alors l'instruction de lecture chargée dans la zone 10 du registre 8. Cependant, le code d'instruction de cette instruction de lecture est différent du code instruction de l'instruction de lecture dans la figure 1, en ce sens que le résultat lu dans la mémoire 4 ne devra pas être stocké à l'issue dans la zone 11 du registre 8, mais devra l'être dans le registre 17 auxiliaire; - au cours d'une troisième étape, le circuit hôte 6 lit le résultat dans le registre 17 (au lieu de le lire dans le registre 8). Pour cette première lecture il n'y a pas de gain réalisé avec le circuit de l'invention. Par contre, pour une lecture suivante, il n'est plus nécessaire de charger ni le registre 8 ni le registre 9. Il suffit simplement d'envoyer sur le bus 15 l'ordre de basculement, ou de maintien de la relation 14 entre l'unité centrale de traitement et le jeu des registres 8. Autrement dit, en deux étapes seulement au lieu de trois dans ce cas, les données stockées dans la mémoire 4 à l'adresse "mem + 1" sont disponibles dans le registre 17. On voit donc que dans ce cas, la durée de l'opération de lecture est réduite de 30 %. Ainsi de suite pour les zones suivantes de la mémoire 4. Pour l'écriture, dans ce cas, la durée serait la même puisqu'il faudrait inscrire dans le registre 17 la donnée à écrire, et lancer l'instruction par un ordre sur le bus 15. Dans un perfectionnement, on a prévu de se passer de l'ordre envoyé par l'interface 5, sur le bus 15. Plus exactement, on a décidé de se passer de l'étape au cours de laquelle l'ordre de basculement était envoyé sur le bus 15. Dans ce but, on remplace cette étape, autonome, par une exécution automatique de cette étape à la fin de la lecture ou de l'écriture des données dans le registre 17. Ainsi, pour la lecture, le code instruction chargé dans la zone 10 du registre 8 est encore différent. Il est tel que l'unité centrale de traitement 2 l'interprète, d'une part, pour lire des données en mémoire 4 et les écrire dans le registre 17, et, d'autre part, pour surveiller le registre 17 ou l'interface 5 et détecter l'instant où le circuit hôte 6 aura lu la donnée disponible dans le circuit 17. En effet, dès que cette lecture est effectuée, l'unité centrale 2 provoque une incrémentation par le circuit 18 de l'adresse dans le registre 9 et l'exécution, à nouveau, du code instruction qui est resté stocké dans le circuit 10. La surveillance de la lecture du registre 17 ou de l'interface 5 se fait d'une manière naturelle par l'unité centrale 2 par la lecture d'un des registres destiné à la gestion du périphérique de l'interface 5 ou du registre 17 comme cela a été envisagé précédemment. La surveillance par l'unité centrale 2 de la lecture du registre 17 ou de l'interface 5 au moment de la lecture est représentée par les liaisons en tirets 20 et 21. La commande de l'incrémentation du circuit 18 est représentée par une liaison en tirets 22. L'unité centrale de traitement 2 sait donc facilement provoquer la réitération des lectures successives et la mise à disposition sur le registre 17 de toutes les données lues. Pour l'écriture, c'est exactement le même mécanisme qui se produit, sauf que l'unité centrale 2 surveille maintenant le fait que le circuit hôte 6 a écrit une nouvelle donnée dans le registre 17. En simplifiant, on voit que pour 100 lectures successives le circuit de l'invention nécessite 102 interventions du circuit hôte 6 sur l'interface 5, au lieu de 300 dans l'état de la technique. En ce qui concerne l'écriture, il y aura 101 actions au lieu de 200 dans l'état de la technique. Les gains de vitesse d'échange entre le circuit hôte et le microcontrôleur 2, sont donc très significatifs. Pour faire cesser l'opération, on peut doter l'unité centrale 2 d'un compteur. Ce compteur serait préchargé en fonction du nombre d'incréments de positions dans la mémoire 4 qu'il y a lieu de considérer. Le compteur serait analogue à un compteur 24 de piles qui prélève les instructions les unes après les autres dans la mémoire programme 3. On peut tout aussi bien, plus simplement, avant de lire ou d'écrire la dernière donnée dans le registre 17, changer le code instruction mémorisé dans la zone 10 du registre 8 de façon à ce que ce code instruction ne prévoie plus l'incrémentation automatique du circuit 18. On a montré un circuit 18 extérieur à l'unité centrale 2. Cependant, bien naturellement, la fonction du circuit 18 sera elle-même exécutée par l'unité centrale 2. De ce fait, l'automate 18 ne sera classiquement qu'une des opérations naturellement effectuée par l'unité centrale 2. Le comptage pourra également être limité par un comptage par l'unité centrale 2 du nombre d'itérations à entreprendre. Le nombre d'itérations peut même être chargé comme un des arguments du code instruction ou de l'adresse "mem" au démarrage. Alternativement, le circuit hôte 6 pourra comporter un compteur 19 lui indiquant à partir de quand il convient de modifier le code d'instruction chargé dans la zone 10 du registre 8 pour faire cesser l'itération. REVENDICATIONS 1 - Microcontrôleur (1) comportant - une unité centrale de traitement (2), - une mémoire programme (3) et/ou de données (4) en relation avec l'unité centrale, - une interface (5) d'entrée sortie, - un premier registre d'échange (8) pour contenir un code instruction et une information relative à une donnée à lire ou à écrire, et un deuxième registre d'échange (9) pour contenir une adresse, les premier et deuxième registres étant reliés à l'interface, et - un circuit (12) de basculement relié à l'interface, à la mémoire programme et à l'unité centrale, pour basculer, en fonction d'un signal (15) de commande disponible sur cette interface, une liaison (13) de l'unité centrale à la mémoire programme en une liaison (14) aux deux registres, caractérisé en ce qu'il comporte - un registre auxiliaire (17) connecté à l'interface, - un circuit (18) d'incrémentation automatique d'adresse (mem) pour incrémenter la valeur d'une adresse contenue dans le deuxième registre, et - des moyens d'adressage indirect vers le registre auxiliaire qui prélèvent (10) dans le premier registre, à titre d'information relative à la donnée, l'adresse du registre auxiliaire (17) où cette donnée est stockée. 2 - Microcontrôleur selon la revendication 1, caractérisé en ce qu'il comporte - des moyens (20, 21) pour lancer l'exécution de l'instruction dont le code est chargé dans le premier registre dès que l'interface a lu ou écrit des données dans le registre auxiliaire. 3 - Procédé de lecture écriture dans une mémoire de donnée d'un microcontrôleur (1) à partir d'une interface (5) d'entrée/sortie dans lequel - on charge dans des premier (8) et deuxième (9) registres d'échanges du microcontrôleur un code instruction (10), une information (11) relative à une donnée à lire ou à écrire, et une adresse (mem), - on bascule (12) le fonctionnement d'une unité centrale de traitement (2) du microcontrôleur pour que cette unité centrale exécute l'instruction dont le code est chargé dans le premier registre, caractérisé en ce que - on charge la donnée lue ou à écrire dans un registre auxiliaire (17) en relation avec l'interface, - on incrémente (18) automatiquement avec un automate l'adresse chargée dans le deuxième registre, et - on exécute avec un adressage indirect (11) orienté vers le registre auxiliaire l'instruction dont le code est chargé dans le premier registre. 4 - Procédé selon la revendication 3, caractérisé en ce que - on exécute l'instruction dont le code est chargé dans le premier registre à chaque fois (20, 21) que le registre auxiliaire est lu ou écrit par l'interface.