Az első projekt létrehozása

1. Az első projekt létrehozásához indítsuk el a CoIDE fejlesztői környzetet! A nyitólapon a Quick Start felirat alatt kattintsunk a Create a New Project linkre, vagy pedig a Project menüben válasszuk ki a New Project menüpontot! Adjunk neki nevet (például 01_Blinky), s ellenőrizzük, hogy hová kerül! A CoIDE telepítési könyvtárán belüli a workspace nevű mappa lesz az alapértelmezett munkaterület. Ha máshol szeretnénk elhelyezni a projektünket, akkor a "Use default path" felirat előtti pipa kivétele után tudjuk beírni, vagy tallózással kiválasztani az új útvonalat. Mintaprojektünket az alábbi képen látható módon mi a C:\CooCox\NUC140\01_Blinky mappában helyeztük el, de ezt nem kötelező követni, használhatjuk az alapértelmezett munkaterületet is.

A projektnév megadása és az útvonal beállítása után kattintsunk a Next gombra!




2. A felbukkanó ablakban kattintsunk a Chip gombra, majd lépjünk tovább a Next gombbal!


3. A legördülő listában nyissuk meg a Nuvoton, majd a NUC140 al-listákat, s végül válasszuk ki a NUC140VE3CN mikrovezérlőt! Befejezésül kattintsunk a Finish gombra!


4. A megnyíló Step 3 feliratú ablakban (ez valójában a Repository ablak Peripherals nevű lapja) a Nuvoton perifériák közül válasszuk ki  a GPIO könyvtárat! Ez a függőségek miatt magával vonja néhány másik könyvtár automatikus kijelölését is. A CoIDE ezeket automatikusan bemásolja a projekt könyvtárába. Befejezésül kattintsunk a Finish gombra!



5. Nyissuk meg a main.c állományt szerkesztésre (kattintsunk a main.c fülre, vagy ha nincs ilyen, akkor a projekt böngésző ablakban kattintsunk duplán a main.c állomány nevére!  

Ha emlékszünk még rá, hogy korábban hová bontottuk ki a NUC100SeriesBSP csomagot, akkor keressük meg abban  a NuvotonPlatform_Keil\Sample\NuTiny-EVB\Smpl_NuTiny-EVB_NUC140\ mappát, és a vágólapon keresztül másoljuk ki abból a Smpl_NUTINY_140.c állomány tartalmát  a projektünk main.c ablakába (cseréljük le vele azt a pársoros programot, amit a CoIDE hozott létre benne)!

Megjegyzés: A gyári mintapélda elején található #include <stdio.h> sor fölösleges, hagyjuk ki!
  
6. Ha idáig eljutottunk, akkor minden készen áll a projekt lefordításához. Válasszuk ki a Project menü  Build pontját, vagy kattintsunk a Build project ikonra!



Sikeres fordítás esetén az alábbihoz hasonló kiírás jelenik meg a Console ablakban. A legfontosabb számunkra természetesen a BUILD SUCCESSFUL üzenet.

GCC HOME: C:\CooCox\GCC\bin
compile:
    [mkdir] Created dir: C:\CooCox\CoIDE\workspace\blinking\blinking\Debug\bin
    [mkdir] Created dir: C:\CooCox\CoIDE\workspace\blinking\blinking\Debug\obj
       [cc] 6 total files to be compiled.
       [cc] arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -Wall -ffunction-sections -g -O0 -c -DNUC140VE3CN -IC:\CooCox\CoIDE\workspace\blinking\cmsis_lib\Include\Driver -IC:\CooCox\CoIDE\workspace\blinking\cmsis_boot -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE\workspace\blinking\cmsis_lib\Include -IC:\CooCox\CoIDE\workspace\blinking\cmsis_lib\Include\System -IC:\CooCox\CoIDE\workspace\blinking\cmsis_core -IC:\CooCox\CoIDE\workspace\blinking\cmsis_lib -IC:\CooCox\CoIDE\workspace\blinking C:\CooCox\CoIDE\workspace\blinking\cmsis_boot\system_NUC1xx.c C:\CooCox\CoIDE\workspace\blinking\cmsis_boot\startup\startup_NUC1xx.c C:\CooCox\CoIDE\workspace\blinking\main.c C:\CooCox\CoIDE\workspace\blinking\cmsis_lib\Src\Driver\DrvGPIO.c C:\CooCox\CoIDE\workspace\blinking\cmsis_lib\Src\Driver\DrvSYS.c C:\CooCox\CoIDE\workspace\blinking\cmsis_core\core_cm0.c
       [cc] Starting link
       [cc] arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -g -nostartfiles -Wl,-Map=blinking.map -O0 -Wl,--gc-sections -LC:\CooCox\CoIDE\configuration\ProgramData\blinking -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\blinking/arm-gcc-link.ld -g -o blinking.elf ..\obj\system_NUC1xx.o ..\obj\startup_NUC1xx.o ..\obj\main.o ..\obj\DrvGPIO.o ..\obj\DrvSYS.o ..\obj\core_cm0.o
Program Size:
      text       data        bss        dec        hex    filename
      1112          0       1048       2160        870    blinking.elf

BUILD SUCCESSFUL
Total time: 7 seconds

7. A továbblépéshez tudatnunk kell a CoIDE fejlesztői környezettel, hogy Nu-Link programozó és hibavadász eszközt akarunk használni. Csatlakoztassuk a Nu-Link-Me eszközt és kattintsunka fogaskerék ikonra, vagy a View menüben nyissuk meg a Configuration abalakot! Kattintsunk a Debugger fülre, és az Adapter felirat melletti legördülő listából válasszuk ki a Nu-Link eszközt! Az alapértelmezett beállítás (Port: SWD és a Max Clock(Hz): 1M) megfelelő lesz számunkra.


8. Kattintunk a Download code to flash gombra, vagy a Flash menüben válasszuk ki a Program  Download menüpontot!  Sikeres kapcsolódás esetén a program letöltődik és automatikusan elindul: A céláramkörön az A port 10-es lábára kötött LED villogni kezd.



A program rövid ismertetése

Ahogy fentebb már említettem, a projekt main.c kódját a Nuvoton honlapjáról letöltött NUC100SeriesBSP_v1.05.003.zip csomagból vettem át (a Smpl_NUTINY_140.c  állományból). A program listája a szükséges fejléc állományok becsatolásával kezdődik. Az stdio.h állomány becsatolása tulajdonképpen fölösleges, ebből a projektből kihagyható. Minden Nuvoton NUC100-as sorozatú mikrovezérlő esetén kötelezően a NUC1xx.h fejléc állománynal kell kezdni a becsatolásokat. Mivel a meghajtók közül mi csak a GPIO-t választottuk ki, ennek a becsatolásával kell foglalkoznunk. A Driver\DrvGPIO.h fejléc állomány deklarálja számunkra a programban használt DrvGPIO_ClrBit() és DrvGPIO_SetBit() függvényeket.  

A delay_loop() függvénnyel egy nagyon primitív késleltetést valósítunk meg. Mivel egyelőre fogalmunk sincs róla, hogy a CPU alapértelmezetten milyen frekvencián jár, s hogy a for ciklus szervezése hány CPU ciklust vesz igénybe, a késleltetés csak kísérleti úton, próbálgatással állítható be.

1. lista: A 01_Binky/main.c  program listája (a Nuvoton Smpl_NUTINY_140.c mintapéldája alapján)
/*-------------------------------------------------------------------
*
* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.
*
*-------------------------------------------------------------------
*/
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"

void delay_loop(void)
{
uint32_t j;
for(j=0;j<60000;j++);
for(j=0;j<60000;j++);
for(j=0;j<60000;j++);
for(j=0;j<60000;j++);
}


/*-------------------------------------------------------------------*/
/* MAIN function */
/*-------------------------------------------------------------------*/

int main (void)
{
DrvGPIO_Open(E_GPA,10, E_IO_OUTPUT); //set GPA10 output mode

while(1)
{
DrvGPIO_ClrBit(E_GPA,10); //set output low (LED is on)
delay_loop(); //some delay
DrvGPIO_SetBit(E_GPA,10); //set output high (LED is off)
delay_loop(); //some delay
}
}
A főprogram inicializáló részében az A port 10. bitjét digitális kimenetnek állítjuk be. A DrvGPIO függvények leírása a kibontott NUC100SeriesBSP_v1.05.003.zip csomag Doc mappájában, a  NuMicro NUC100 Series Driver Reference Guide kézikönyvben található meg.

A főprogram végtelen ciklusában felváltva alacsony, illetve magas szintre állítjuk az A10 kimenetet a DrvGPIO_ClrBit() és a DrvGPIO_SetBit() függvények ismételt hívásával. Mivel a LED anódja a tápfeszültségre van kötve, a LED akkor fog világítani, amikor alacsony szintre állítottuk a kimenetet.

A céláramkör kapcsolási rajza a NuTiny-SDK-NUC140 User Manual 11. és 12. oldalain található.