Download as pdf or txt
Download as pdf or txt
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