ARM Programlama Temelleri: Temel ARM Cortex-M Yapısı

Yetkin AKYÜZ
3 min readMay 10, 2021

Serinin bu bölümünde, daha önce giriş yaptığımız ARM Cortex-M işlemcilere daha yakından bakarak temel yapılarını inceleyelim.

Bir ARM Cortex-M işlemci yongası, temel olarak ARM lisanslı bir Cortex-M çekirdeği, yonga üreticileri tarafından eklenen çevre birimleri ve çekirdek ile bu çevre birimleri arasındaki iletişim için veri yolları ve köprülerden oluşmaktadır. Yonga üreticilerinin eklediği bu çevre birimlerine I2C, SPI, USART gibi seri haberleşme birimleri, digital-analog converter (DAC) veya analog-digital converter (ADC) gibi bir çok örnek verilebilir. Fakat unutulmamalı ki aynı mimariye sahip, farklı üreticiler tarafından üretilmiş yongaların sahip oldukları çevre birimleri birbirinden farklı olabilmektedir. Hangi çevre birimlerinin bulunacağı tamamen yonga üreticisinin seçimine kalmıştır.

Basitleştirilmiş ARM Yonga Blok Diyagramı [1]

Temel ARM Cortex-M Yonga Organizasyonu

ARM Cortex-M Yongası

Bellek

  • FLASH Bellek: Komut Belleği (Kalıcı)
  • SRAM/DRAM: Veri Belleği (Uçucu)

İşlemci Çekirdeği

  • ALU (Arithmetic Logic Unit)
  • CPU (Central Process Unit)
  • NVIC (Interrupt Controller)
  • Instruction Fetch Unit (Komut Getirme)
  • Instruction Decoder (Çözümleme)
  • Debug Arayüzü (Hata Ayıklama)
  • DSP (Sayısal Sinyal İşleme)
  • FPU (Kayan Nokta Birimi)
  • Bellek Arayüzü

Veri Yolları (Bus)

  • Data Bus (Veri)
  • Instruction Bus (Komut)
  • AHB (Advanced High Performance Bus)
  • APB (Advanced Peripheral Bus)
  • Farklı bus’ları bağlamak için köprüler
  • Bus matrix

GPIO

  • GPIO Portları (GPIO Port A, GPIO Port B,…)

Çevre Birimleri

  • I2C
  • SPI
  • UART/USART
  • USB
  • DAC
  • ADC
  • TIMER
  • OPAMP
  • LCD

DMA (Direct Memory Access)

İşlemci çekirdeği, FLASH, SRAM/DRAM, DMA ve GPIO bağlantı noktaları ile bir bus matrix aracılığıyla haberleşir. Bus matrix, ona bağlı olan birimler arasında eşzamanlı veri akışlarına izin vererek yüksek bir iletişim bant genişliği sağlayan bir ara bağlantı birimidir.

Çevresel birimler, AHB ve APB’yi birbirine bağlayan veri yolu köprüleri aracılığıyla bus matrix’e bağlanır. Genel olarak AHB, yüksek bant genişliğine sahip iletişim için kullanılmaktadır ve GPIO portları AHB’ye bağlıdır. APB ise düşük bant genişliğine sahip iletişim içindir. LCD, USART, I2C, SPI, OPAMP ve zamanlayıcılar gibi birçok çevre birimi APB’ye bağlıdır. AHB ve APB, bu iki veri yolu arasındaki bant genişliği boşluğunu doldurmak için veri ve kontrol sinyallerini tamponlayan ve veri kaybı engelleyen köprüler ile birbirlerine bağlıdır.

Her GPIO pini genellikle birden fazla işleve sahiptir. Bir GPIO pininin işlevi, çalışma sırasında bile yazılım tarafından değiştirilebilir fakat aynı anda yalnızca tek bir işlev için kullanılabilmektedir. Bir pin dijital giriş/dijital çıkış olarak kullanılmasının haricinde ADC, DAC, seri haberleşme, zamanlayıcı işlevleri gibi daha gelişmiş ve karmaşık işlevler için de kullanılabilir. Yonganın sahip olduğu GPIO işlevleri, farklı yongalara göre değişik gösterebileceği gibi farklı yonga üreticilerine göre de değişebilir.

ALU (Arithmetic Logic Unit), AND gibi mantıksal işlemler ve toplama gibi tamsayı aritmetik işlemleri gerçekleştiren birimdir. ALU’nun iki veri girişi ve bir veri çıkışı bulunur.

CPU, multiplexer (çoklayıcı) seçim sinyalleri, ALU’nun kontrol sinyalleri gibi dahili dijital devreler için kontrol sinyalleri üreten ve işlemci çekirdeğinin tüm bileşenlerini koordine eden birimdir.

Kesme denetleyicisi (NVIC), işlemci çekirdeğinin mevcut görevin yürütülmesini durdurup yazılım veya çevresel birimler tarafından oluşturulan özel olaylara veya sinyallere anında yanıt vermesini sağlar.

Instruction Fetch ve Instruction Decoder birimleri, program sayacı tarafından işaret edilen komut belleği adresinden bir makine kodu okur ve işlemci çekirdeğinin hangi işlemleri gerçekleştirmesi gerektiğini belirlemek için komutu çözümler. CPU daha sonra çözümleme sonucuna bağlı olarak karşılık gelen kontrol sinyallerini üretir.

Debug arayüzü, geliştiricilerin bir Cortex-M işlemcideki yazılımı başlatmak veya durdurmak için ana bilgisayarı kullanmasına ve işlemci kayıtlarını, çevre birim kayıtlarını ve belleği gerçek zamanlı olarak izlemesine veya değiştirmesine olanak tanır.

Cortex-M işlemci ailesini tanıdığımız yazımda da bahsettiğim gibi Cortex-M4 çekirdekleri, DSP birimine sahiptir ve isteğe bağlı olarak tek hassasiyetli bir FPU birimine sahip olabilir fakat Cortex-M0/M0+/M1/M3 çekirdeklerinin DSP ve FPU desteği yoktur. Cortex-M4 ile karşılaştırıldığında, Cortex-M7 çekirdeklerideki FPU hem tek duyarlıklı hem de çift duyarlıklı işlemleri destekleyebilmektedir.

Bellek arayüzü, SRAM/DRAM ve FLASH gibi bellek birimlerine erişimden sorumludur.

Kaynaklar

  1. Microdigitaled. ARM Assembly Language Programming & Architecture
  2. Zhu, Y. Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C

Originally published at https://yetkinakyuz.com on May 10, 2021.

--

--

Yetkin AKYÜZ
0 Followers

Düzce Üniversitesi, EEM son sınıf öğrencisiyim. Gömülü sistemler ve ARM mimarisi alanlarında kendimi geliştirmeye odaklandım. Problem çözmekten çok zevk alırım.