You are on page 1of 75

ARM Cortex magú mikrovezérlők

4. System Control Block

Scherer Balázs

Budapest University of Technology and Economics


Department of Measurement and Information Systems
© BME-MIT 2021
Az ARM7 magú vezérlők felépítésének
fejlődése
2003 - 2008

© BME-MIT 2021 2.
Az első ARM7 magú vezérlők belső felépítése
2003: LPC210x

On-chip memory
ARM7 core

Vector Interrupt
Controller
AHB bridge

AHB bus

AHB/APB bridge

APB bus

Periph 1 Periph 3

Periph 2 Periph 4

© BME-MIT 2021 3.
AHB vs APB

 Mindkettő az ARM Advanced Microcontroller Bus


Architecture (AMBA) szabványhoz tartozik.

 AHB Advanced High-  APB Advanced Peripheral


performance Bus Bus
o Van Pipelining o Nincs Pipelining
o Multiple master o Single master
o Burst-ös átvitel o Kis interfész-komplexitás
o Full-duplex parallel komm. o Kis fogyasztás
o 32 bites buszszélesség

© BME-MIT 2021 4.
Az utolsó szériás ARM7 magú vezérlő
2006: LPC23xx

On-chip memory
Fast I/O ARM7 core

USB DMA Vector Interrupt


memory controller Controller

AHB bridge
AHB bridge

AHB1 bus

AHB/APB bridge
Ethernet Ethernet USB
AHB ot AHB
with DMA memory with DMA
bridge APB bus

Periph 1 Periph 3

Periph 2 Periph 4

© BME-MIT 2021 5.
A legelterjedtebb Cortex-M3 sorozatok

belső felépítése és felépítésük fejlődése

© BME-MIT 2021 6.
ARM7, Cortex-M3, M0 összehasonlítás:
memória-hozzáférés

ARM7TDMI Cortex M3

© BME-MIT 2021 7.
Első generációs Cortex-M3

2006: Luminary LM3S102


iCode
ARM Cortex M3
8 Kbyte
Proc iData Flash
20MHz

System Bus

2 Kbyte
APB bridge SRAM

APB bus

GPIO Periph 3

Periph 2 Periph 4

© BME-MIT 2021 8.
Második generációs Cortex-M3
2007: STM32F103 (Max 72 MHz)

• APB1: max. 72MHz


• APB2: max. 36MHz

© BME-MIT 2021 9.
Több master a buszon
Slave
Master
Arbiter

Megosztott AHB Master Slave


Busz

Master Slave

Master Master Master

Slave

AHB Busz Matrix


Slave

Slave

© BME-MIT 2021 10.


Mi történik a pontoknál?
 Arbitráció: általában round-robin

© BME-MIT 2021 11.


Harmadik generációs Cortex-M3
2009: STM32F107 (Max 72 MHz)

© BME-MIT 2021 12.


Harmadik generációs Cortex-M3
• 2009: Az LPC1768 belső
architektúrája

© BME-MIT 2021 13.


Negyedik Cortex-M3 generáció
• 2010: Az STM32F2xx belső architektúrája

© BME-MIT 2021 14.


Negyedik Cortex-M3 generáció
• 2010: Az STM32F2xx belső buszszerkezete

© BME-MIT 2021 15.


Negyedik Cortex-M3 generáció
 LPC18xx

© BME-MIT 2021 16.


A legelterjedtebb Cortex-M0 sorozatok
belső felépítése

© BME-MIT 2021 17.


ARM7, Cortex-M3, M0 összehasonlítás
memória-hozzáférés

ARM7TDMI Cortex M3 Cortex M0

© BME-MIT 2021 18.


LPC800

 AHB-Lite
o Redukált bus
specifikáció
o 1 Master/layer
 Switch Matrix

© BME-MIT 2021 19.


LPC800-as sorozat

© BME-MIT 2021 20.


STM32G0x0 sorozat

© BME-MIT 2021 21.


A legelterjedtebb Cortex-M4 sorozatok
belső felépítése

© BME-MIT 2021 22.


STMF4xxx

© BME-MIT 2021 23.


Az LPC4300 család
 Cortex-M4 alapú Digital Signal Controller
 Cortex-M0 alrendszer a perifériafunkciókra
 max. 1 MB Flash
o Két bankos Flash
 Max. 200 kbyte SRAM
 High speed USB
 Pin kompatibilis az M3 sorozattal
 További tulasdonságok
o 10/100 Ethernet MAC
o LCD panel controller (max. 1024H × 768V)
o 2x 10-bit ADCs és 10-bit DAC at 400ksps
o 8 csatornás DMA vezérlő
o Motor Control PWM, Quadrature Encoder
o 4x UARTs, 2x I2C, I2S, CAN 2.0B, 2x SSP/SPI

© BME-MIT 2021 24.


LPC4300 belső felépítése

© BME-MIT 2021 25.


LPC43xx
 Dual Core

© BME-MIT 2021 26.


LPC43xx memóriarendszere
 Dual Core
o Az M4 és M0 is tud
Flash-ből kódot
végrehajtani
összeakadás nélkül
o M0 a saját RAM-jából
futtatni
o ROM code Thumban
van, mindkettő tudja
futtatni
o M4 MPU-ja tudja
védeni az M0 által
használt memóriákat

© BME-MIT 2021 27.


LPC4300 memória
Flash
 Két 512K byte-os flash memóriablokk
o Lehet összefüggő 1 Mbyte-os blokként használni.
 256 bites memóriavezérlő
o 150 MHz

© BME-MIT 2021 28.


LPC4300 memória
SRAM
 Max. 256 KB SRAM
 Sok blokkra osztva
o Párhuzamos DMA
o Két core működés

© BME-MIT 2021 29.


A legelterjedtebb CortexM7 sorozatok
belső felépítése

© BME-MIT 2021 30.


STM32F7xx belső felépítése

© BME-MIT 2021 31.


STM32F7xx belső felépítése

© BME-MIT 2021 32.


System Control Block

© BME-MIT 2021 33.


System Control Block
 A rendszerórajel forrásának kiválasztása
o Külső kvarc, belső RC oszcillátor, órajel kvarc
 PLL (Phase Locked Loop)
o A rendszerórajel meghatározása
 Egyes perifériabuszok órajelének meghatározása
o Core órajel és a különböző periféria-órajelek közötti viszony
 Gyorsabb vezérlőknél a Flash-hozzáférés szabályozása
o Flash-gyorsítás, wait-ciklusok száma stb.
 Perifériák tápellátásának engedélyezése
o A modern vezérlőkben gyakorlatilag periféria szinten kapcsolhatóak
le az egységek.
 Lábak alternatív funkcióinak meghatározása

© BME-MIT 2021 34.


Reset

© BME-MIT 2021 35.


A reset és az elindulás folyamata
 A reset forrása
o Power-on
o Watchdog
o Brown-out
o Külső láb
o Szoftveres
 A reset forrása egy regiszterből kiolvasható.

 Mi történik, mi indul el a reset hatására?

© BME-MIT 2021 36.


Az NVIC ugrótábla
 Az ugrótábla a címtartomány alján a 0x00000004-ről indul.
o A 0x00000000-án a kezdő stack pointer van, hogy minél hamarabb lehessen C-t
használni.
Type of
No. Exception Type Priority Descriptions
Priority
1 Reset -3 (Highest) fixed Reset

2 NMI -2 fixed Non-Maskable Interrupt

3 Hard Fault -1 fixed Default fault if other hander not implemented

4 MemManage Fault 0 settable MPU violation or access to illegal locations

5 Bus Fault 1 settable Fault if AHB interface receives error

6 Usage Fault 2 settable Exceptions due to program errors

7-10 Reserved N.A. N.A.

11 SVCall 3 settable System Service call

12 Debug Monitor 4 settable Break points, watch points, external debug

13 Reserved N.A. N.A.

14 PendSV 5 settable Pendable request for System Device

15 SYSTICK 6 settable System Tick Timer

16 Interrupt #0 7 settable External Interrupt #0


Gyártó
…… ………………….. ………………….. settable …………………..
specifikus
256 Interrupt#240 247 settable External Interrupt #240

© BME-MIT 2021 37.


A reset utáni elindulás folyamata

© BME-MIT 2021 38.


Beépített boot code

 Az első on-chip flash-es ARM7-től


o A flash-programozás nem triviális.
• RAM-ba letölteni a programot, majd onnan
futtatva felprogramozni a Flash-t
o JTAG-elés az első időkben végképp problémás
volt.
 Beépített bootkód, amely valamilyen
módon támogatja a Flash programozását.
o Hol van ez a bootmód és hogyan indul el?

© BME-MIT 2021 39.


Hol helyezkedik el a boot code?
 STM32F107

© BME-MIT 2021 40.


STM32Fxxx boot konfiguráció
 Két külső láb függvénye

© BME-MIT 2021 41.


STM32F107 viselkedése bootnál

© BME-MIT 2021 42.


Flash-gyorsító modul

© BME-MIT 2021 43.


Flash-memória
 A Flash-memóriák kisebb helyet foglalnak el, mint a
RAM-ok, de lassabbak.

 Flash-memória hozzáférési idők


o 30 ns – 50 ns (33 – 25 MHz)

 Ez kevés a 60, 72, 120, 180, 200,300 MHz-ről való


működéshez.

 Megoldások
o Futtassunk kódot RAM-ból!
• A RAM drága és sokat fogyaszt.
o Emeljük meg a Flash-hozzáférés bitszámát!
• 64 bit, 128 bit
• Valamilyen interfészt igényel.

© BME-MIT 2021 44.


Az STM32F10x megoldása (2009)
 2 db 64 bites prefetch buffer
 A wait ciklusok számát fel kell programozni.

© BME-MIT 2021 45.


Az LPC1768 megoldása (2010)
 8 darab 128 bites szó
 Nem csak utasításokat, hanem adatokat is fel tud hozni.
 Wait-ciklusok számát fel kell programozni.

© BME-MIT 2021 46.


LPC1768 megoldás eredményei

 RAM-ból való kódvégrehajtással összevetve


o A végrehajtási sebesség 16% -on belül marad.
o A fogyasztás 25%-al kevesebb.

 A régi ARM7-es verziónál használthoz képest


o Sima 128 bites Flash interfész
o 45% teljesítménynövekedés

© BME-MIT 2021 47.


Relative performance

0
0.5
1
1.5
2
2.5
3

a2time
aifftr
aifirf
aiifft
basefp
bitmnp
cacheb
canrdr

© BME-MIT 2021
idctrn
iirflt

EEMBC Benchmark
matrix
pntrch
puwmod
rspeed
tblook
ttsprk
Benchmark eredmények

LPC2376

M3 Comp
LPC17XX

48.
STM32F2xx/STM32F4xx megoldása
Branch manegement és cache újdonság

© BME-MIT 2021 49.


STM32F2xx / STM32F4xx megoldása

© BME-MIT 2021 50.


Órajelelosztás

© BME-MIT 2021 51.


Órajelszétosztás problémái
 Követelmény: sokféle alapórajel
o Kvarc
• Pontos, stabil, drága
o RC oszcillátor
• Pontatlan, olcsó
 Sokféle perifériaigény
o Alap perifériablokkok
o I/O lábak
o Ethernet
o USB

© BME-MIT 2021 52.


Cortex M3 magú vezérlő belső felépítése
2009: STM32F107 (Max 72 MHz)

© BME-MIT 2021 53.


Az STM32F107 megoldása

HCLK
8MHz up to 72MHz
HSI RC
PCLK1
up to 36MHz
/2

OSC_OUT PLLCLK SYSCLK AHB APB1 If (APB1 pres


4 -16 x2...x16
HSE Osc Prescaler Prescaler =1) x1 TIMxCLK
MHz PLL
OSC_IN up to 72 /1,2…512 /1,2,4,8,16 Else x2
/2 MHz TIM2,3,4

PCLK2
up to 72MHz

CSS APB2 If (APB2 pres


Prescaler =1) x1 TIM1CLK
/1,2,4,8,16 Else x2

/128
ADC
Prescaler ADCCLK
OSC32_IN /2,4,6,8
32.768KHz
LSE OSc RTCCLK
OSC32_OUT USB USBCLK
Prescaler 48MHz
/1,1.5
~40KHz
LSI RC IWDGCLK

© BME-MIT 2021 54.


Az LPC1768 megoldása

© BME-MIT 2021 55.


STM32F4xx

© BME-MIT 2021 56.


Az LPC43xx megoldása

© BME-MIT 2021 57.


Órajelszétosztás problémái
 Egy egyszerű LED villogtatás is minimum 1 órajel
engedélyezését igényli, de akár 3-4-et is
igényelhet.

© BME-MIT 2021 58.


Periféria-tápellátás engedélyezése
 Nagyon gyártófüggő a filozófia

© BME-MIT 2021 59.


Alternatív funkciójú lábak
 Nagyon hasonló a filozófia a gyártóktól függetlenül

© BME-MIT 2021 60.


CMSIS
Cortex Microcontroller
Software Interface Standard

© BME-MIT 2021 61.


Fejlesztési költségek alakulása

© BME-MIT 2021 62.


Egy általános beágyazott rendszer
szoftverarchitektúrája
Application

Libraries Hardware független mitmót API


Felhasználói project

DPY-TRM

COM-R04

MIKROP
ISO C

Math

Kernel
MCU-ARM API
Hardware
Device Drivers I/O kezelés Előre fordított
Abstraction Layer
eCos distribúció
SPI
interrupts Serial

I2C
Exceptions

© BME-MIT 2021 63.


CMSIS szerkezete (v1.3) ~2008

© BME-MIT 2021 64.


CMSIS szerkezete (v3) ~2012

© BME-MIT 2021 65.


CMSIS szerkezete (v3) ~2012

© BME-MIT 2021 66.


CMSIS szerkezete (v5) ~2019

© BME-MIT 2021 67.


CMSIS Core
 Hardware Abstraction Layer (HAL): Az összes Cortex-M variánshoz
egy standardizált periféria- és regiszterkészlet-kezelés a SysTick,
NVIC, System Control Block, MPU, FPU registerszterekhez
 Rendszerkivétel nevek: A rendszerkivételekhez, interruptokhoz
való hozzáférés definiálása
 Header file szervezés definíciók: Elnevezési konvenciók a
mikrokontroller-specifikus interruptokhoz és header file-okhoz
 Rendszerindítás: Mikrovezérlő-független inicializáló függvény
interfész. Standardized SystemInit() függvény
 Speciális utasítások támogatása
 Globális változó a system clock frekvencia meghatározására

© BME-MIT 2021 68.


A CMSIS file-jai és könyvtárstruktúrája

File Szolgáltató Leírás


A mikrovezérlő perifériáinak definítciója. Ez a file include-olhatja az összes többi
device.h Mikrovezérlő gyártó
mikrovezérlőhöz tartozó firmware headert.
core_cm0.h ARM (fordítófüggő részekkel) A Cortex-M0 alapperifériáinak és regisztereinek definítciója
core_cm3.h ARM (fordítófüggő részekkel) A Cortex-M3 alapperifériáinak és regisztereinek definítciója
core_cm0.c ARM (fordítófüggő részekkel) A Cortex-M0 alapperifériáinak és regisztereinek kezelőfüggvényei
core_cm3.c ARM (fordítófüggő részekkel) A Cortex-M3 alapperifériáinak és regisztereinek kezelőfüggvényei
ARM, de a mikrovezérlő, vagy compiler
startup_device A Cortex-M mikrovezérlő startupkódja és a teljes mikrovezérlő függő ugrótábla
gyártó adoptálhatja és testreszabhatja
ARM, de a mikrovezérlő gyártó, Mikrovezérlő függő inicializációs rész. Tipikusan a PLL és egyébb órajelforrások
system_device
adoptálhatja és testreszabhatja inicializálása történik itt.

© BME-MIT 2021 69.


CMSIS core struktúra

© BME-MIT 2021 70.


A device.h szerepe
 Az egyetlen szükséges include file a felhasználó
számára (az induláshoz)

CMSIS

core_cm3.h stdint.h

stm32f10x.h

device.h
system_stm32f10x.h

© BME-MIT 2021 71.


A startup_device file
 Fordítófüggő
 Startup Code, ugrótábla
 A GCC megvalósításnál a ugrótáblákhoz
úgynevezett weak pragmákat használnak.

DCD USART1_IRQHandler, /* USART1 */


Majd az így definiált nevet egy weak pragmával ráhuzalozzuk egy default handlerre:

#pragma weak USART1_IRQHandler = Default_Handler

© BME-MIT 2021 72.


A system_device.c
 Minden Cortex-M3 vezérlő azonos módon
elindítható legyen
 Minimum szolgáltatások

Függvény definició Leírás


A mirovezérlő elindulásához szükséges rutinok végrehajtása. Tipikusan ez a
void SystemInit (void) függvény konfigurálja a PLL-t. Ez a függvény tipikusan a startup_device-ból híódik
meg, de lehet, hogy a felhasználónak kell meghívnia.
void SystemCoreClockUpdate (void) Beállítja a PLL-t a SystemCoreClock változó értékének megfelelően.

Változó definítció Leírás


uint32_t SystemCoreClock A rendszer órajel frekvenciáját tartalmazza.

© BME-MIT 2021 73.


A CMSIS coding guideline-jai
 A CMSIS szabvány a MISRA 2004-es guideline-jainak
betartásával készül.
 A CMSIS az adattípusokként az <stdint.h> -ba definiált
típusokat használja.
 A kifejezéseket tartalmazó #define-okat zárójelezni kell.
 A Core Peripheral Access Layer (CPAL) összes függvénye
re-entráns kell, hogy legyen.
 A Core Peripheral Access Layer (CPAL) nem tartalmazhat
blokkoló kódot.
 Az összes interrupt-kezelő függvények az _IRQHandler
utótaggal kell záródnia.

© BME-MIT 2021 74.


A CMSIS coding guideline-jai 2.
 Nagybetűvel jelöl minden core- vagy perifériaregisztert,
illetve assembly utasítást.
 Az ún. CamelCase jelölést használja a perifériakezelő
függvények és interrupt-függvények számára.
 PERIFÉRIA_ perfixet kell használni a perifériához tartozó
függvényekhez (tehát a függvény neve előtt nagybetűvel
fel kell tüntetni a periféria nevét).
 Doxygen kommentekkel kell minden függvényt ellátni.
o A minimális komment a következő:
• Egy soros brief leírás
• Kifejtett paraméter komment a param-mal
• Kifejtett visszatérési érték komment a ret paraméterrel.
• Kifejtett leírás a függvény működéséről.
© BME-MIT 2021 75.

You might also like