### Link1| Link2| Link3 »

# Ismerkedés a NuTiny-SDK-NUC140
fejlesztői modullal

# 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ó.