CMSIS

CMSIS (Cortex Microcontroller Software Interface Standard), ARM Cortex tabanlı mikrodenetleyiciler için standart bir yazılım arayüzüdür. Bu arayüz, ARM Cortex-M mimarisini kullanan mikrodenetleyicilerin tümü için uyumlu bir yazılım çözümü sunar. CMSIS, tüm üreticilerin aynı kaynak kodunu kullanarak işlemci mimarisiyle ilgili sorunları çözmesini ve uyumlu bir kod geliştirmesini sağlar. Ayrıca, CMSIS, kullanıcılara yazılım portabilitesi, düşük seviye donanım erişimi ve kolay bellek yönetimi gibi faydalar da sağlar.

CMSIS, 4 temel modülden oluşur:

  1. CMSIS-Core: Cortex-M çekirdeği için standart bir donanım soyutlama katmanı (HAL) sağlar.

  2. CMSIS-DSP: Sayısal sinyal işleme (DSP) algoritmalarını uygulamak için bir kütüphane sağlar.

  3. CMSIS-RTOS: Gerçek zamanlı işletim sistemleri (RTOS) ile kullanmak üzere bir API sağlar.

  4. CMSIS-Pack: ARM Cortex-M tabanlı mikrodenetleyiciler için yazılım, dokümantasyon ve örnekleri içeren bir paket formatıdır.

CMSIS, mikrodenetleyici üreticileri tarafından kullanılan yaygın bir arayüz olduğundan, birçok geliştirme ortamı CMSIS desteği sunar. CMSIS kütüphaneleri ayrıca, mikrodenetleyicinin belirli bir fonksiyonunu gerçekleştiren önceden yazılmış kod örnekleri sağlar. Bu örnekler, yeni başlayanlar için harika bir başlangıç noktasıdır ve geliştiricilerin kendi projelerinde kullanabilecekleri öğeleri içerir.

Örneğin, bir ADC'yi başlatmak için, ilgili CMSIS API fonksiyonunu kullanabilirsiniz. Aşağıdaki örnek, ADC'yi başlatır ve sonucunu okur:

// ADC1 Channel 16, Single Conversion, 12-bit resolution ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_InitStructure.ADC_Channel = ADC_Channel_16; ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE);

// Wait for ADC to be ready while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));

// Start ADC Conversion ADC_StartOfConversion(ADC1);

// Wait for ADC conversion to complete while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

// Read ADC Result uint16_t adc_result = ADC_GetConversionValue(ADC1);

Last updated