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