CMSIS یک رابط نرمافزاری استاندارد شده برای برنامه نویسی میکروکنترلرهای ARM با هسته Cortex میباشد. این توابع (رابط نرمافزاری استاندارد برای میکروکنترلرهای Cortex ) در سال 2008 توسط شرکت ARM معرفی شدن تا برنامه نویسی این سری از میکروکنترلرها را استاندارد کنن و قابلیت استفاده از نرمافزار را بهبود بخشن یعنی بشه براحتی روی میکروکنترلر شرکت دیگری که با این هسته ساخته شده برنامه را اجرا کرد.
ده شرکت از این هسته ها استفاده میکنن و وجود تنوع تولید کنندهها باعث میشه کار با میکروکنترلر هر شرکت با اون یکی فرق کنه و این کار هزینه نوشتن نرمافزار را افزایش میده در این راستا شرکت ARM وارد عمل شد و CMSIS را معرفی کرد و این مشکلات را از بین برد.
CMSIS دارای یکسری فایلهایی هست که سازنده میکروکنترلر در اختیار برنامه نویسان قرار میده و در پروژه کافیه اونا را فراخوانی کنید. بطور خلاصه CMSIS برنامه نویسی را خیلی آسانتر و هزینه نرم افزار نویسی را پایین میاره.
معرفی لایههای مختلف CMSIS
به عکس بالا دقت کنید به رنگها بیشتر دقت کنید هر رنگ نمایانگر یک لایه میباشد در لایه پایین میکروکنترلر یا سخت افزار قرار دارد و در لایههای بالایی نرم افزار باز هم در لایه نرم افزار یکسری لایهها به سخت افزار نزدیکتر هستند و یکسری به کاربر نزدیک هستن! در زیر به برسی موارد مهم میپردازیم:
لایه CMSIS-CORE
این لایه واسط بین پردازندههای سری Cortex-M و امکانات جانبی میکروکنترلر میباشد. بطور مثال Core_cm3.h و System_lpc17xx.h از این دسته بندی میباشد.
لایه CMSIS-DRIVER
در این لایه درایور و راهاندازهای امکانات جانبی میکروکنترلر وجود دارند. بطور مثال در این لایه lpc17xx_gpio.h و کتابخونههای دیگر وجود دارند که باهاشون بیشتر کار داریم. لایههای CORE-DSP ,CMSIS-RTOS,CMSIS-PACK-CMSIS-SVD,CMSIS-DAP نیز وجود دارند که میتوانید در سایت ARM در مورد اینا بخونید.
اضافه کردن CMSIS به پروژه ها
برای اضافه کردن توابع CMSIS به محیط برنامه نویسی کافیه فایلهای آن را از شرکت سازنده دانلود کنید و طبق راهنمای آن استفاده کنید در این آموزشها ما از کامپایلر Keil استفاده میکنیم و درایور را از لینک زیر دانلود کنید.
افزودن فایلهای Core به پروژه
در Keil وقتی پروژه باز میکنید فایل startup_LPC17xx.s و دوتا فایل Core_cm3.h و System_lpc17xx.h به پروژه خود به خود اضافه میشن و خود به خود به پوشه پروژه کپی میشن و اگر نشدن و یا خودتان میخواهید دستی این کار را انجام دهید در بین فایلهای CMSIS که دانلود کردید یک پوشه به اسم Core هست که داخل آن این فایلها هست کپی کنید و ببرید داخل پوشه پروژه و از قسمت پروژه Keil به پروژه معرفی کنید.
افزودن فایلهای Driver به پروژه
همراه فایلهای CMSIS یک پوشه هست به اسم Drivers که داخل آن کل کتابخونههای درایور برای کار با امکانات میکروکنترلر هستن مثل GPIO ,SPI,USB خب داخل این پوشه بازم دوتا پوشه هست به اسمهای include, source داخل include فایلهای h و داخل source فایلهای C وجود دارند. شما میتونید هر دو پوشه را داخل پروژه کپی کنید تا راحت بشید ولی چون حجم پروژه زیاد میشه میتونید به هر کدام از فایلها که نیاز داشتیم از هر دو پوشه کپی کنید داخل پوشه پروژه.
مثلا : میخواهیم با پورتهای ورودی و خروجی LPC1768 کار کنیم
- روش اول از داخل هر دو پوشه فایلهای زیر را کپی میکنیم به پوشه پروژه lpc17xx_gpio.c , lpc17xx_gpio.h و البته شاید به فایلهای زیر هم نیاز داشته باشیم lpc17xx_libcfg_default.H وlpc_types.h که اینطوری حجم پروژه کم میشه و البته در خروجی هگز تاثیر نداره فقط حجم پوشه پروژه زیاد میشه.
- روش دوم کل پوشههای include, source را بصورت پوشهای کپی میکنیم داخل فایل پروژه و هر فایلی را نیاز داشتیم فراخوانی میکنیم.
فراخوانی کتابخانههای CMSIS در پروژه
خب تا این مرحله یا توابع CMSIS آشنا شدیم و متوجه شدیم چطوری این فایلها را به پروژه اضافه کنیم حالا باید این فایلها را در پروژه فراخوانی کنیم.
از قسمت پروژه فایلهای هدر را به پروژه اضافه کنید مثل شکل زیر که در جلسه قبل توضیح دادیم. فایلهای کتابخونه ها را که با پسوند C هستن را به به پروژه اضافه کنید.
روش اول فایلها در پوشه پروژه هستن نه در زیر پوشه، اون موقع بصورت زیر فراخوانی میکنیم.
#include "lpc17xx_gpio.h"
روش دوم وقتی که فایلهای هدر داخل پوشه هستن مثلا پوشه inc داخل پوشه پروژه باشن:
#include "inc/lpc17xx_gpio.h"
منبع: میکرودیزاینرالکترونیک