Cortex Microcontroller Software Interface Standard (CMSIS) 

A Cortex Microcontroller Software Interface Standard (CMSIS) egy gyártófüggetlen absztrakciós réteg a Cortex-M mikrovezérlők számára. A CMSIS definiálása a különböző chipgyártók  és szoftverfejlesztó cég szoros együttműködésével történt, s egy közös megközelítést ad a perifériák, valós idejű operációs rendszerek és az ún. middleware komponensek (mint pl. USB, filerendszer kezelés, TCP-IP) illesztéséhez. A CMSIS koncepció azt a célt szolgálja, hogy a különböző fejlesztőktől származó szoftver komponenseket kombinálni lehessen.

A CMSIS jelenlegi verziószáma 3.20, s az alábbi komponensekből áll:

CMSIS-CORE: Alkalmazásprogramozási felület (API) a Cortex-M processzormaghoz és a rendszerperifériákhoz.

CMSIS-DSP: Digitális jelfeldolgozó (DSP) programkönyvtár 60-nál több függvénnyel, különféle adattípusokhoz: fixpontos (fractional q7, q15, q31) és szimpla pontosságú lebegőpontos (32-bit).

CMSIS-RTOS API: Egységes alkalmazásprogramozási felület (API) a valós idejű operációs rendszerekhez, ami lehetővé teszi, hogy a szoftver templátok, az ún. middleware komponensek, a programkönyvtárak, és más szoftverkomponensek  a támogatott RTOS rendszerek bármelyikét használhassák.

CMSIS-SVD: Rendszerleíró állományok a perifériákhoz. Az adott mikrovezérlő perifériáinak leíró állománya egy XML fájl formájában, ami hardveres nyomkövetésnél, vagy a fejléc állományok létrehozásánál használható fel a priféria regiszterek és megszakítások számbavételénél. 

CMSIS-DAP: Nxomkövető elérési kapu (Debug Access Port). Szabványosított firmware a herdveres nyomkövetők számára, amely a Cortex-M mikrovezérlőkbe épített CoreSight nyomkövetést támogató áramkörrel kommunikál. A CMSIS-DAP komponens közreadása különálló csomagban történik, a felhasználó közvetlenül nem találkozik vele.

A CMSIS struktúráját az alábbi ábra szemlélteti.



A CMSIS a következő dolgokat egységesíti:

A CMSIS használata NUC140 és CoIDE esetén

A Nuvoton által közzétett támogatói programkönyvtár jelenleg a CMSIS 1.30 verzióját tartalmazza. Ebben még nincs implementálva a DSP könyvtár és az RTOS támogatás. Fel kell hívnunk arra is a figyelmet, hogy a CooCox CoIDE által a projekt létrehozásakor becsatolt CMSIS állományok nem teljesen azonosak a Nuvoton honlapjáról letölthető NUC100Series BSP_CMSIS V1.05.003.zip csomaggal. Utóbbiban például egy startup_NUC1xx.s állomány található, míg az előbbiben pedig egy startup_NUC1xx.c állomány van. Abban viszont megegyeznek, hogy mindkét csomagban hatástalan a system_NUC1xx.c állományban definált SystemInit() függvény (üres a függvénytörzs), így a fentebb említett "egységesített rendszerinicalizás" itt nem működik, a CPU órajelének beállításához a DRV_SYS modul függvényeit kell használni, ahogyan azt a 02_Blinky projektnél láttuk..


A NUC140 CMSIS támogatáshoz CoIDE estén a következő állományok tartoznak:

A fenti állományoknak minden projektben benne kell lennie. Az eszközkezelő meghajtó könyvtárakat csak akkor kell becsatolni, ha szükség van rájuk. A Nuvoton az alábbi felsorolásban szereplő forrásmodulokat tette közzé, részletes leírásuk a NUC100 Series Driver Reference Guide v1.05 dokumentumban található.Szorosan véve nem tartoznak a fenti eszközkezelőkhöz, de a semihosting mechanizmus, illetve a printf() függvény használatakor szükségünk lehet az alábbi állományokra is: