Étape 6: Noyau et Middleware - MCU ARM CORTEX M3
Haut niveau API graphiques
Notre objectif est de mettre en place une carte graphique à l’aide des FPGA 3 Nexys. Le microcontrôleur STM32 sera celui exécutant le système d’exploitation et d’envoyer les commandes pour le FPGA. Les commandes sont envoyées via un bus assurant la communication des deux des cartes en utilisant le périphérique de l’EFM. Pour faciliter ce processus, nous avons créé des primitives, des structures et des macros. Ces trois utilitaires outre une documentation DOXYGEN aident l’utilisateur à contrôler plus facilement la carte graphique. C’est la même idée en ce qui concerne les bibliothèques de la STM.
Macros
La configuration d’un système exigent un très dur travail de recherche dans les fichiers de documentation et de source différentes disponibles. Bien sûr, les fonctions des fichiers sources peuvent être directement modifiées par l’utilisateur, mais nous devons éviter cela. Toute modification peut provoquer un dysfonctionnement dans n’importe quel programme précédent, l’utilisation de ces fichiers source et écrit par un autre utilisateur. Pour éviter tous ces risques, nous avons ajouté dans un fichier (macro) les informations qui ont besoin de modification afin de rendre le programme de travail.
Il existe deux catégories principales pour les macros :
- Macros de configuration :
Ces macros donnent à l’utilisateur la possibilité de modifier les différents périphériques mis à profit au cours de la communication. Ce faisant, il n’y a pas besoin de changer quoi que ce soit dans le fichier source. Par exemple, cette macro pouvez entièrement configurer la durée des cycles de l’EFM.
- Macros en définissant les spécifications techniques :
L’objectif principal de cette macro est d’indiquer les spécifications de notre système, comme la taille de l’écran, les adresses initiales des plans et les adresses de l’EFM. Ces garanties de macros une API qui peut être utilisé n’importe où. Nous pouvons changer par exemple un écran plus grand en modifiant simplement la constante de la droite.
La documentation Doxygen comprend toutes les explications nécessaires pour utiliser les macros.
Ouvrages d’art
Avec la même idée que les pilotes créés pour le STM32, toutes les structures créées pour cette API sont conçues pour faciliter l’utilisation des primitives et le stockage des données. Par exemple, il est important de garder à l’esprit en tenant compte de la RAM une image a été stocké. Comme une question de fait, l’adresse d’une image peut éventuellement changer dans le FPGA après une opération telle que le Bit Blit par exemple. Si l’adresse d’origine n’est pas stocké quelque part, l’utilisateur perdra l’image.
- Structure de l’image :
Il est utilisé pour chaque image créée. L’utilisateur identifier son nom, de taille et de son adresse. Tout ce que nous devons faire après que c’est de mettre cette structure en tant que paramètre dans un mouvement de type primitif pour l’opération sur l’image puisse avoir lieu. La mise à jour de ces paramètres est inclus dans les opérations.
- Structure Color
Il est très utile pour les fonctions en utilisant des couleurs. Cette structure est appliquée pour éviter de donner les 3 couleurs primaires et le niveau de transparence alpha à chaque utilisation.
- Structure Plane affichage
Notre GPU peut gérer jusqu'à 4 avions. C’est pourquoi nous avons créé la structure de type avion 4 pour chacun des plans 4 affichage. Nous avons déclaré que la référence dans une variable globale. Il n’est pas nécessaire de créer un nouveau plan d’affichage sur ce FPGA, 4 étant le nombre maximal autorisé. Cette structure contient toutes les données nécessaires pour configurer une couche : largeur, longueur, adresse RAM, défilement ovec X et de Y.
- ConfPlane Structure
Il s’agit de la structure de configuration pour les 4 couches. Il n’y a qu’un seul type de cette structure déclarée dans le programme, avec une référence comme une variable globale. Il permet à l’utilisateur de choisir quelle couche pour activer, activer la transparence ou non, de lancer une procédure d’essai pour la communication et pour activer l’affichage de 4 avions ou
Ces 4 structures ne sont pas créés pour être directement modifiées. Il est conseillé d’utiliser les fonctions de chaque structure afin d’initialiser ou les modifier. En fait, les données écrites dans ces structure sont juste la réflexion de ce qui est à l’intérieur de la carte FPGA. Il est inutile de modifier uniquement les paramètres de la STM. Par exemple, si nous voulons modifier manuellement la taille d’un calque, il ne changera sur le GPU parce que la commande ne sera pas envoyée. Les fonctions associées permet également d’établir la communication entre les deux des cartes.
Pilotes
Cette couche est utilisée pour configurer les périphériques différents utilisés pour la communication entre les deux cartes. Par exemple, nous pouvons l’utiliser pour initialiser l’EFM. L’EFM sont initialisé de façon à avoir le même comportement tel que décrit dans la Section 2.b. Un GPIO est également initialisé afin de jouer le rôle de la ligne occupée utilisé dans l’interface MCU.
On trouve aussi dans cette couche des fonctions initiales utilisées pour lire et écrire à l’adresse associée de la broche reliée à la FPGA. Les paramètres de ces fonctions sont l’adresse du Registre à modifier dans le FPGA et les données à écrire dans ce registre.
Les fonctions associées à ces pilotes ne sont pas faites pour être utilisées directement. Ils sont déjà utilisés dans la couche de service. Néanmoins, l’utilisateur peut dans certains cas accéder à ces fonctions afin de changer la configuration du logiciel.
Fonctions de service :
Les fonctions de service sont les principales fonctions de notre carte graphique. Dans cette couche, on retrouve toutes les fonctions nécessaires à l’exécution des différentes opérations du GPU.
Les détails de ces fonctions seront disponibles dans la section de documentation doxygen. Nous devons juste préciser qu’il est possible d’appliquer une couche excessive afin de réaliser des opérations plus complexes en utilisant les fonctions originales écrites dans la couche de service. Par exemple, il est possible de créer une fonction pour pouvoir gérer une animation. Cette fonction utilise pour ce faire l’opération de déplacement.
Le haut niveau API audio et le système d’exploitation temps réel ne sont pas encore implémentées.