Az első projekt létrehozása

A fejezet tartalma:
Sok más fejlesztői környezethez hasonlóan , az ARM Keil MDK5 fejlesztői rendszerben is úgynevezett projekteket kell létrehoznunk. A projekt forrásállományok, fejléc állományok, konfigurációs adatok és egyéb információk struktúrált halmazának (XML állományok) együttese.

Projekt megnyitása

A projekteket a benne található  .uvprojx kiterjesztésű állomány kapcsolja egységbe. Windows Intézőben vagy Total Commanderben ennek az állománynak a megnyitása elindítja a Keil MDK5 fejlesztői rendszert, és automatikusan megnyitja az adott projektet.

A projekt megnyitásának másik módja az, hogy elindítjuk a a Keil MDK5 fejlesztői rendszert, majd a Project menü Open Project menüpontjában betallózzuk a projekt .uvprojx kiterjesztésű állományát.

Új projekt létrehozásának lépései

A projekt helyének és nevének megadása

A Projekt menü New µVision Project menüpontjának kiválasztásával kezdeményezhetjük új projekt létrehozását. Célszerű minden projektnek külön mappát nyitni, hogy az állományok ne keveredjenek össze, ezért a felbukkanó dialógus ablakban tallózzunk be egy üres mappát, vagy hozzunk létre egy újat, majd adjuk meg a projekt nevét (ez lesz az .uvprojx kiterjesztésű állomány neve), majd kattintsunk a Mentés gombra!



Az alábbi példában mi az új mappának a nem túl fantáziadús Project01 nevet, magának a projektnek pedig a project01 nevet adtuk.



A target eszköz kiválasztása

A Select Device dialógus ablakban ki kell választanunk azt a mikrovezérlőt, amelyre a programot készítjük. Esetünkben (FRDM-KL25Z kártya) az NXP gyártó KL2x típuscsaládjának MKL25Z128xxx4 tagját kell választanunk. A kiválasztás után kattintsunk az OK gombra!



A futtató környezet konfigurálása

A következő lépésben a projekt varázsló futtatói környezetnek nevezett (Run-Time Environment, röviden RTE) támogatói modulok becsatolását teszi lehetővé. Jelöljük be a CMSIS Core, valamint a Device Startup komponenseket, majd kattintsunk az OK gombra! A + jelekre kattintva lehet kibontani a listát...



Megjegyzések:

A projekt testreszabása

Igény szerinti átnevezések

A fenti lépések után a Project ablakban meg kell jelennie az új projektnek. Ízlés szerint átnevezhető a target és a forrásfájlok gyűjtőjének neve, de ez a projekt működését nem befolyásolja. Az átnevezés úgy történik, mint a Windows Intézőben: két lassú kattintás után szerkeszthetővé válik a név. Az alábbi példában mi FRDM névre kereszteltük át a targetet és "Source files" névre a Source group 1-et.



Forrásfájl(ok) hozzáadása a projekthez

A projektünkben még nincs definiálva a main() függvény, tehát legalább egy forrásállománnyal bővítenünk kell a projektet. Kattintsunk jobb gombbal a Project ablakban a Source files névre, s a felbukkanó menüben válasszuk az Add new item to Group 'Source files' menüpontot! A felbukkanó ablakban válasszuk a C File (.c) opciót, s adjunk nevet az új állománynak (pl. main.c)!




Ha a main.c állománynév megjelent a Project ablakban, akkor dupla kattintással nyissuk meg és másoljuk bele az alábbi listában olvasható szöveget.

Az majd a következő fejezet témája lesz, hogy hogyan működik ez a program. Most elég annyit tudnunk róla, hogy a kártyán a zöld LED-et villogtatja (kb. 0.5 s BE, majd 0.5 s KI). A mintaprogram egyébként Mazidi et al.:  Freescale ARM Cortex-M Embedded Programming  Using C Language c. könyvéből való (Program2_1).

1. lista: A Project01/main.c  program listája
/* Project01/main.c 
* Toggling LED in C using registers by addresses
* This program toggles green LED for 0.5 second ON and 0.5 second OFF.
* The green LED is connected to PTB19.
* The LEDs are active low ('0' turns ON the LED).
*
* This is a slightly modified version of the example code "Program2_1.txt"
* from the book of Mazidi et. al.: "Freescale ARM Cortex-M Embedded Programming
* Using C Language"
* http://www.microdigitaled.com/ARM/Freescale_ARM/Code/Ver1/Chapter2/Program2_1.txt
*
* Cycle count was modified in function DelayMs() since default setting of the CPU clock
* is 20 MHz in case of Keil MDK5 v5.20 RTE library (see in file system_MKL25Z4.h)
*/

/* System Integration Module System Clock Gating Control Register 5*/
#define SIM_SCGC5 (*((volatile unsigned int*)0x40048038))
/* Port B Pin Control Register 19*/
#define PORTB_PCR19 (*((volatile unsigned int*)0x4004A04C))
/* Port B Data Direction Register */
#define GPIOB_PDDR (*((volatile unsigned int*)0x400FF054))
/* Port B Data Output Register */
#define GPIOB_PDOR (*((volatile unsigned int*)0x400FF040))

void delayMs(int n);

int main (void) {

SIM_SCGC5 |= 0x400; /* enable clock to Port B */
PORTB_PCR19 = 0x100; /* make PTB19 pin as GPIO (See Table 2-4) */
GPIOB_PDDR |= 0x80000; /* make PTB19 as output pin */

while (1) {
GPIOB_PDOR &= ~0x80000; /* turn on green LED */
delayMs(500);
GPIOB_PDOR |= 0x80000; /* turn off green LED */
delayMs(500);
}
}

/* Delay n milliseconds
* The CPU clock is set to 20.97152 MHz in SystemInit() by default.
*/
void delayMs(int n) {
int i;
int j;
for(i = 0 ; i < n; i++)
for (j = 0; j < 3500; j++) {}

Konfiguráljuk a projektet!

Mielőtt lefordítanánk a beírt programot, ellenőrizzük és szükség esetén módosítsuk a projekt opciókat! Az előző oldalon már bemutatott programozó/hibavadász konfigurálásán kívül ellenőriznünk kell a target mikrovezérlőre vonatkozó beállításokat is.
Xtal (MHz): 8  (ez a kvarckristály frekvenciája)
ROM1 Start: 0x0  Size: 0x20000 (Flash ROM kezdő címe és mérete)
IRAM1 Start: 0x1FFFF000 Size: 0x4000 (RAM kezdőcíme és mérete)





A projekt lefordítása és futtatása

A projekt lefordításához válasszuk ki a Projekt menü Rebuild all target files menüpontját, vagy  egyszerűen kattintsunk a  gombra! Sikeres fordítás (0 Error, 0 Warning) esetén az alábbi üzenet jelenik meg:



A program letöltéséhez a Keil MDK5 eszköztárában kattintsunk a LOAD feliratú gombra!
Ha szükséges, a programletöltés után nyomjuk meg a FRDM-KL25Z kártya RESET gombját a letöltött program futtatásához (nem mindig indul el automatikusan)!

Az 1. listán látható program a zöld LED-et villogtatja (kb. 0.5 s BE, majd 0.5 s KI).

A rendszer órajelének beállítása

Ahogy föntebb "A futtatói környezet konfigurálása"című szakaszban írtuk, új projekt létrehozásakor az alapértelmezett CPU órajel 20 MHz lesz. Ha a mikrovezérlőt maximális sebességgel szeretnénk futtatni, akkor nyissuk meg a system_MKL25Z4.h állományt és valahol, még a #ifdef CLOCK_SETUP sor előtt szúrjuk be az alábbi definíciót!
#define CLOCK_SETUP    1
Ennek hatására a feltételes fordítási direktívák az előre definiált órajel konfigurációk közül most már nem az alapértelmezett nullás sorszámú, hanem az 1-es sorszámú beállítást iktatják be a programunkba, ami 48 MHz-es CPU frekvenciát, a periféria buszon pedig 24 MHz-es órajelet konfigurál.

Ha azt akarjuk, hogy a programunk időzítései ne változzanak meg, akkor  a delayMs() függvényt is hozzá kell igazítanunk a megváltozott órajelhez. Több várakozó ciklust kell beiktatnunk, ezért a korábbi 3500 helyett írjunk 8195-öt! A módosított függvény listája lentebb látható.

2. lista: A módosított delayMs() függvény listája
/* Delay n milliseconds
* Now the CPU clock is set to 48 MHz in SystemInit().
*/
void delayMs(int n) {
int i;
int j;
for(i = 0 ; i < n; i++)
for (j = 0; j < 8195; j++) {}