Stap 6: Kernel en Middleware - MCU ARM CORTEX-M3
Hoog niveau Graphics API
Ons doel is het implementeren van een grafische kaart met behulp van de Nexys 3 FPGA. De STM32 microcontroller zal worden het besturingssysteem en het zenden van de commando's naar de FPGA. De opdrachten worden verzonden via een bus verzekeren de communicatie van beide van de kaarten via de FSMC-randapparaat. Om dit proces te vergemakkelijken, we gemaakt primitieven, structuren en macro's. Deze drie hulpprogramma's naast een DOXYGEN documentatie helpen de gebruiker om de grafische kaart gemakkelijk te controleren. Het is het zelfde idee wat betreft de STM-bibliotheken.
Macro 's
De configuratie van een systeem vereist een echt hard werken van het onderzoek in de verschillende documentatie en broncode bestanden beschikbaar. Natuurlijk de functies van de bronbestanden rechtstreeks kunnen worden gewijzigd door de gebruiker, maar we moeten vermijden dat. Elke wijziging kan leiden tot een dysfunctie in een afsluitcode van het programma met behulp van deze bronbestanden en geschreven door een andere gebruiker. Om te voorkomen dat al deze risques, we toegevoegd in een bestand (macro) de informatie wijziging nodig zodat het programma werken.
Er zijn twee belangrijke categorieën voor de macro's:
- Configuratie macro's:
Deze macro's geven de gebruiker de mogelijkheid van het wijzigen van de verschillende randapparatuur ingezet tijdens de communicatie. Door dit te doen, is er niet nodig om iets in het bronbestand te veranderen. Deze macro kan bijvoorbeeld volledig configureren voor de duur van de cycli van de FSMC.
- Macro's opstellen van de technische specificaties:
Het hoofddoel van deze macro is om aan te geven van de specificatie van ons systeem, zoals de grootte van het scherm, de eerste adressen van de vliegtuigen en de adressen van de FSMC. Deze macro's garanties een API die kan worden gebruikt overal. We kunnen bijvoorbeeld een groter scherm veranderen door gewoon de juiste constante aanpassing.
De Doxygen documentatie bevat al de nodige uitleg om de macro's gebruiken.
Structuren
Met hetzelfde idee als de stuurprogramma's gemaakt voor de STM32, zijn alle structuren gemaakt voor deze API ontworpen om het gebruik van de primitieven en de opslag van de gegevens een stuk makkelijker maken. Het is bijvoorbeeld belangrijk om te houden in het achterhoofd in welk adres van de RAM een afbeelding is opgeslagen. As a matter of fact, kunt het adres van een afbeelding eventueel wijzigen in de FPGA na een bewerking, zoals het Bit Blit bijvoorbeeld. Als het oorspronkelijke adres niet ergens opgeslagen is, verliest de gebruiker de afbeelding.
- De structuur van de afbeelding:
Het wordt gebruikt voor elke afbeelding gemaakt. De gebruiker identificeren de naam, grootte en het adres. Alles wat die we moeten doen nadat dit is om deze structuur als een parameter in een beweging Typ primitief in orde voor de exploitatie op het beeld plaatsvinden. De update van deze parameters is opgenomen in de operaties.
- Kleurstructuur
Het is zeer nuttig voor de functies met behulp van kleuren. Deze structuur wordt toegepast om te voorkomen dat de 3 primaire kleuren en het niveau van de alpha transparantie op elk gebruik.
- Vliegtuig-structuur
Onze GPU aankan tot 4 vliegtuigen. Dat is de reden waarom we 4 vliegtuig type structuur gemaakt voor elk van de 4 display-vliegtuigen. Wij verklaard de verwijzing in een globale variabele. Het is niet nodig voor het maken van een nieuwe vlak weergeven op deze FPGA, want 4 het maximale aantal toegestane is. Deze structuur bevat alle gegevens vereist voor het configureren van een laag: breedte, lengte, RAM adres, scrollen ovec X en Y.
- ConfPlane structuur
Dit is de structuur van de configuratie voor de 4 lagen. Er is slechts één type van deze structuur in het programma, met een verwijzing als een globale variabele verklaard. Het helpt de gebruiker kiezen welke laag te activeren, activeren de transparantie of niet, te lanceren van een testprocedure voor de communicatie en activeren van het 4 display vliegtuigen of
Deze 4 structuren zijn niet gemaakt om rechtstreeks worden gewijzigd. Het is sterk aangeraden om de bijbehorende functies van elke structuur initialiseren of wijzigen van hen gebruiken. As a matter of fact, zijn de geschreven gegevens in deze structuur slechts de reflexion voor wat er binnen de FPGA-kaart. Het veranderen van de parameters slechts in de STM is nutteloos. Bijvoorbeeld, als wij handmatig wijzigen van de grootte van een laag willen, zal het niet gewijzigd op de GPU omdat de opdracht wordt niet toegestuurd. De bijbehorende functies helpt ook tot vaststelling van de communicatie tussen beide van de kaarten.
Stuurprogramma 's
Deze laag wordt gebruikt voor het configureren van de verschillende randapparatuur gebruikt voor de communicatie tussen de twee kaarten. Bijvoorbeeld, kunt we het initialiseren van de FSMC. De FSMC wordt geïnitialiseerd in een manier om hetzelfde gedrag zoals beschreven in de sectie 2.b. Een GPIO is ook om te kunnen spelen van de rol van de bezettoon gebruikt in de MCU-interface geïnitialiseerd.
Ook vinden we in deze laag de oorspronkelijke functies gebruikt om te lezen en schrijven in het bijbehorende adres van de PIN verbonden met de FPGA. De parameters voor deze functies zijn het adres van het register worden gewijzigd in de FPGA en de gegevens in het register worden geschreven.
De bijbehorende functies voor deze stuurprogramma's zijn niet gemaakt om direct worden gebruikt. Ze worden al gebruikt in de dienst laag. Niettemin, de gebruiker kan in sommige gevallen toegang tot deze functies om het wijzigen van de configuratie van de software.
Service functies:
De functies van de service zijn de belangrijkste functies van onze grafische kaart. In deze laag vinden we alle functies noodzakelijk zijn voor de uitvoering van de verschillende operaties van de GPU.
De details van deze functies zal beschikbaar zijn in de doxygen documentatie sectie. We moeten alleen verduidelijken dat het is mogelijk om een overmatige laag om te voldoen aan de meer complexe operaties met gebruikmaking van de oorspronkelijke functies geschreven in de laag van de dienst. Het is bijvoorbeeld mogelijk te maken een functie om te kunnen omgaan met een animatie. Deze functie zal de verplaatsing gebruiken om dat te doen.
Het hoge niveau audio API en Real-Time Operating systeem zijn nog niet geïmplementeerd.