Přednáška 1_2

Přednáška 1_2
Přednáška 1,2
A4B38NVS
Návrh vestavěných systémů ,2012,
J. Fischer, katedra měření, ČVUT - FEL, Praha
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
1
Informace
Toto je grafický a heslovitý podkladový materiál určený pouze k přednášce
A4B38NVS.
Neobsahuje vlastní výklad, ani další informace, které jsou prezentovány při výkladu
„křídou“ na tabuli, jeho čtení nenahrazuje účast na přednášce.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
2
Náplň předmětu A4B38NVS - přednášky
•
•
•
•
•
•
•
•
•
HW návrh vestavěných systémů, komponenty a jejich využití, procesor
jako součástka
Logické obvody a jejich vlastnosti z hlediska spolupráce s mikrořad.
(odběr, typové řady, rychlost z hlediska spolupráce s mikroprocesorem,
spolupráce rychlých logických obvodů, vedení, odrazy, zemnění, rozvody
napájení, blokování).
Bloky komunikace s obsluhou (tlačítka, klávesnice, LED a LCD
zobrazovače
Mikrořadiče (Microcontroller) pro vestavěné systémy
Obvody a periferie na čipu mikrořadičů (vstupy, výstupy, rozhraní SPI,
I2C, I2S, USART převodníky A/D, převodníky D/A),
Vnější periferie a jejich připojování (připojení vnějších řadičů – Ethernet,..)
Vnější paměťové obvody a jejich připojování k mikroprocesoru
Dohlížecí obvody a monitorovací obvody pro zajištění spolehlivé funkce
vestavěného systému.
Napájení – síťové napájení, bateriové napájení vestavěných systémů,
stabilizace napájení
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
3
Náplň předmětu A4B38NVS - cvičení
(práce samostatně -1 student)
• Seznámení s IDE Keil pro ARM, pro STM32F100
• Konfigurace výstupních bran STM32F100, ovládání výstupů a LED,
• Generování impulsního signálu, čtení tlačítka
• Časovací jednotka (schodišťový automat)
• Ovládací jednotka se 7- seg. LED, ovládání posuvného registru
74HCT595, (1. hodnocená úloha) + zpráva
• Sériová komunikace, využití UART, komunikace s RS232, zobrazení dat na
LCD a PC (terminál) (2. hodnocená úloha) + zpráva
•
Samostatný projekt: Návrh systému pro sběr dat a monitorování
3._hodnocená úloha, studie k projektu, návrh a realizace, závěrečná
zpráva),
(práce 1 stud., příp. skupina 2 st.)
• Logické obvody CMOS- stat. parametry a jejich určení (skup. 2 stud.)
• Logické obvody CMOS – dyn. parametry a jejich určení , buzení obvodu
procesorem STM32, generování signálu o dané frekvenci (skup. 2 st.)
Test v semestru – 9. týden společný termín - na přednášce (v míst. 340)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
4
STM32VLDiscovery kit – používaný na cvičení
STM32F100RB microcontroller,
32-bit ARM Cortex-M3 core
128 KB Flash, 8 KB RAM
64-pin LQFP
STlink ( v1)
STM32F103 – pouzdro 48 pinů, horní
- ladicí procesor
STM32F100 – pouzdro 64 pinů, dolní
aplikační ( uživatelský) procesor
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
5
STM32F0Discovery kit
STM32F051R8T6 microcontroller
32-bit ARM Cortex-M0 core
64 KB Flash, 8 KB RAM
STlink / V2
+ prototypová deska
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
6
STM32LDiscovery kit
STM32L152RBT6 microcontroller
ARM CORTEX - M3 core
pouzdro LQFP64
128 KB Flash, 16 KB RAM, 4 KB EEPROM
LCD malé segmenty
kapacitní klávesnice
STlink / V2
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
7
STM32F3Discovery kit
STM32F303VCT6 microcontroller
32-bit ARM Cortex-M4F core
(podpora floating. poit. arit.)
256 KB Flash, 48 KB RAM
LQFP100 package
STlink / V2
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
8
STM32F4Discovery kit
STM32F407VGT6 microcontroller
32-bit ARM Cortex-M4F core,
(podpora floating. poit. arit.)
1 MB Flash, 192 KB RAM
LQFP100 package
STlink / V2
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
9
Cvičení – poznámky
Možno osadit – zapájet minimodul s STM32 a využít jej v projektu
Ladění – „boot loader“, nebo pomocí SWD z kitu STM32VL Discovery
Zapůjčení modulů STM32VLDiscovery, příp. i kont. pole na celý semestr
Potřebné vybavení napájení + 5V ( např. z USB), příp. multimetr
Minimum potřebného vybavení – PC s USB a nainstalovaným SW Keil,
mini USB kabel,
Vhodný doplněk - převodník USB na RS232 (dostupné např. v NC
computers za 160 - 220 Kč, www.nc.cz, využitelné i pro práci s jinými
mikroprocesory pro vestavěné systémy – pro funkci Boot Loader)
kit STM32VL Discovery- obsahuje ladicí nástroj STlink
kity: STM32F0Discovery, STM3Discovery, STM32F4Discovery,
STM32LDiscovery – obsahuje ladicí nástroj STlink/V2 (novější)
Možnost využití pro ext. ladění
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
10
Hodnocení
Účast na cvičeních povinná
1. + 2. hodnocená úloha (5 +5 b)., studie + samostatný projekt (5 +10),
zprávy, nutno řešit i nebodované úlohy + zpráva
samostatná práce studentů, uvedení případ. informačních zdrojů),
plagiátorství – ne !!!
Domácí příprava – studium zadání, příprava programů, vývojový diagram,
schéma
V laboratoři – odladění úlohy, využití přístrojového vybavení
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
11
ARM - historie
ARM - RISC procesory
původ – firma Acorn, výroba stolních počítačů
později vývoj vlastního procesoru ARM1 v r. 1985,
ARM1 - 25 000 tranzistorů, 3 um technologie 4 MHz hod. sig.
ARM2
ARM 3
Založena nová firma - Advaced RISC Machines Ltd.
(majet. účast Apple a Acorn)
změna názvu architektury
z „Acorn RISC Machine“ na „Advaced RISC Machine“
ARM 6 , procesor ARM610 pro PDA (Personal Digital Assistent) firmy Apple
ARM7 v r. 1993, používán v PDA PSION firmy Acorn
ARM7 TDMI doplnění ladicí rozhraní (D,I debug. interface)
rozšířené možnosti násobičky (M)
Thumb instrukční sada (T) - navíc 16- bitové instrukce
ARM7 TDMI – nejlépe prodávaný procesor ( jádro) u ARM
ARM – orientace na přenosná zařízení, mobilní telefony,… rozvoj
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
12
ARM - historie
ARM7 TDMI – - architektura ARM v 4T ( pozor, trochu se plete)
ARM7TDMI používán i ve formě „microcontroller“ – jednočipový mikropočítač
firma Philips (nyní navazující NXP) LPC 2105 procesor ARM7TDI, Flash, RAM,
periferie, řadič přerušení
další firmy využívající ARM7TDMI:
ATMEL, STMicroelectronics, Texas Instruments, Analog Devices,,….
chybí dobrá podpora a spolupráce - řadič přerušení - jádro
Firma ARM – úprava architektury pro potřeby „embedded“ microcontrollerů
Architektura ARM V7M Cortex ,
doplněn NVIC Nested Vectored Interrupt Controller
ARM - Cortex M3 - architektura ARM v7M, náš procesor na cvičeních
Architektura ARM v4T – ovlivnila ARM v7M, ,
(občas bude na ni odkaz při vysvětlování instrukcí)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
13
ARM
ARM - RISC procesory (pojem RISC)
ARM7TDMI 32- bitový procesor, data 32 bitová, (tedy registry 32 bitů)
adresa 32 bitů, adresní prostor 232 = 4 GByte
ARM instrukční kód konstantní délky 32 bitů
v těchto 32 bitech uložen:
kód vlastní instrukce,
případně - registr, přímá data, adresa
? jak řešit do 32 bitů kód i adresu
přímé adresování relativně s omezeným rozsahem
adresování registrem
v jedné instrukci – pouze jedna operace s pamětí
aritmetické a logické operace pouze s registrem
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
14
ARM
ARM7TDMI
instrukční sada ARM - 32 bitů
instrukční sada THUMB – 16 bitů (úsporný kód, větší omezení na
přímá data či adresy)
Přepínání módu, procesor běží buď:
v módu ARM (vykonává instrukce ARM 32 - bitové)
v módu THUM (vykonává instrukce THUMB 16 - bitové)
instrukce ARM a THUMB není možno „míchat“,
přesun do módu THUM skok na adresu, kde nejnižší bit adresy je A0=1
(kód instrukce je 16- bitový, tak reálná adresa má A0 =0, ale právě
požadavek skoku na adresu s A0=1 signalizuje požadavek na skok a
přepnutí do režimu THUM
používají se instrukce BX Rn , kde registr Rn obsahuje požadovanou
adresu s příslušně nastaveným bitem D0 = 0, nebo D0=1
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
15
Instrukční sada THUMB-2 v návaznosti na instrukce ARM
ARM CORTEX-M3
instrukční sada THUMB-2
procesor je stále v režimu THUMB, avšak instrukční sada obsahuje 16 –
bitové instrukce i 32 – bitové instruce.
Vše dohromady je označeno jako THUMB-2
Protože je procesor stále v režimu THUMB-2 , musí být při požadavku
skoku vždy nejnižší bit adresy A0= 1
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
16
Jádro ARM Cortex – M3
Firma ARM - nevyrábí vlastní procesory,
pouze návrh jádra,
Jádro v rámci licencí využívá mnoho
výrobců (ST, NXP, TI, Atmel,..)
ARM Cortex- M3 - definováno:
vlastní jádro CPU
řadič přerušení
rozložení v adresním prostoru
(kde- SRAM interní, externí, kde
vnitřní sběrnice
spolupráce s rozhraním pro ladění
(debug) JTAG, SWD
Výrobci individuálně doplňují paměti a různé
periferie přístupné v daném
adresním prostoru
více na www.arm.com
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
17
Jádro ARM Cortex – M3
Volně dostupné materiály:
Sadasivan S.: An Introduction to the ARM Cortex-M3 Processor (www.ARM.com)
DUI 0552A_Cortex - M3 devices generic user Guide (www.ARM.com)
DDI 0337E Cortex -M3 Revision: r1p1 Technical Reference Manual (www.ARM.com)
DDI 0403 ARM v7-M Architecture Reference Manual (www.ARM.com dostupný po
zaregistrování)
(podrobný popis architektury ARMv7M do které spadá i ARM Cortex M3)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
18
STM32F100x
Volně dostupné materiály:
katalogový listk STM32F100x:
STM32F100x4 STM32F100x6,STM32F100x8 STM32F100xB – (Doc ID 16455 Rev 5)
podrobný referenční manuál:
RM0041 Reference manual STM32F100xx advanced ARM-based 32-bit MCUs
(www.st.com)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
19
Literatura
The Insider’s GuideTo The STM32 ARM®Based Microcontroller
An Engineer’s Introduction To The STM32 Series
www.hitex.com
• Velmi zkrácený přehled architektury ARM Cortex M3
z hlediska, implemetace do STM32
• Přehledný zkrácený popis periferií STM32
• Doporučeno pro získání prvního přehledu
k použití periferiíSTM32, následně detailní studium
referenčního manuálu k STM32,
• Insiders Guide - dobrý proto to, zjistit, co se má
vlastně hledat v dalších podrobných manuálech
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
20
Pojem instrukce - Thumb - 2
ARM Cortex M3
návaznost na procesory ARM
procesory ARM: 16 – bitové instrukce Thumb
32 – bitové instrukce ARM
(přepínání v programu, jaká sada instrukcí se používá)
ARM Cortex M3 - instrukce Thumb doplněné 32- bitovými instrukcemi
sada označená jako Thumb 2,
ARM Cortex M3 – používá sadu Thumb – 2 bez přepínání, Pokus o přepnutí do
režimu instrukcí ARM (32 – bitových vyvolá chybu)
16 – bitové instrukce Thumb – omezené možnosti – např. ve vzdálenosti
adresy pro skok
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
21
Registry ARM Cortex M3
R0 – R12 obecné registry
Dolní registry (low reg.) R0 – R7 přístupné
všemi instrukcemi s přístupem k registrům.
Horní registry (high reg.) R8 – R12
přístup pouze 32 bitovými instrukcemi s
přístupem k registrům
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
22
Registry R13 až R15
Stack pointer Registr R13 -Stack Pointer (SP) ukazatel zásobníku.
R13 – dvě formy:
• hlavní SP (SP main)
• procesní SR (SP_process)
Link register Registr R14 je užíván při volání podprogramů
(subroutine Link Register - LR).
Do LR se uloží návratová adresa z PC při instrukci při vykonání instrukcí
Branch and Link (BL) or Branch and Link with Exchange (BLX).
LR je využit také při návratu z obsluhy výjimky (exception return).
R14 – možno obsluhovat jako obecný registr
Programový čítač (Program counter - PC) registr R15
Bit [0] je vždy, takže instrukce jsou zarovnány na hranice slova (4 Byte) nebo
poloviční slova (2 Byte). (pozor. adresa skoku Bit [0] = 1, viz Thumb mód)
Stavový reg. programu (Program Status Registers xPSR) stavových
registr příznaků (Flags)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
23
Příznakový registr, příznaky
-
Příznaky - 1 indikuje aktivní stav
N - negativní nebo menší než
Z - Nula
C - Carry/ Borrow – výpůjčka
V - přetečení overflow
Q - sticky saturation
(při aritmetice se saturací)
Využití příznaků – podmíněné
vykonání instrukce, větvení programu
(BZ, BEQ)
konstrukce „if then else“
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
24
Adresový prostor ARM Cortex – M3,
4 GByte
-
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
25
Struktura proc. STM32F100 – použit v STM32VLDiscovery kitu
JTAG/SW
JTAG/SWDebug
Debug
Nested
Nestedvect
vectIT
ITCtrl
Ctrl
11xxSystick
SystickTimer
Timer
11xxDMA
DMA
77Channels
Channels
FlashI/F
I/F
Flash
Cortex-M3
Cortex-M3
CPU
CPU
24
24 MHz
MHz
ARMLite
LiteHi-Speed
Hi-SpeedBus
Bus
ARM
Matrix
/
Arbiter
(max
24MHz)
Matrix / Arbiter (max 24MHz)
-
16-128kB
16-128kB
Flash
FlashMemory
Memory
XTAL
XTALoscillators
oscillators
32KHz
32KHz++3~25MHz
3~25MHz
4kB-8kB
4kB-8kBSRAM
SRAM
20B
20BBackup
BackupRegs
Regs
Clock
ClockControl
Control
Bridge
Bridge
Bridge
Bridge
1x
1xSPI
SPI
1x
1xUSART/LIN
USART/LIN
Smartcard/IrDa
Smartcard/IrDa
Modem-Ctrl
Modem-Ctrl
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
(max 24MHz)
Up
Upto
to80
80I/Os
I/Os
ARM Peripheral Bus
Synchronized
SynchronizedAC
ACTimer
Timer
Up
Upto
to16
16Ext.
Ext.ITs
ITs
Int.
Int.RC
RCoscillators
oscillators
40KHz
40KHz++8MHz
8MHz
PLL
PLL
RTC
RTC//AWU
AWU
2x
2xWatchdog
Watchdog
CRC
CRC
1x6x
1x6x16-bit
16-bitPWM
PWM
Power
PowerSupply
Supply
Reg
Reg1.8V
1.8V
POR/PDR/PVD
POR/PDR/PVD
ARM Peripheral Bus
(max 24MHz)
(independent
(independent&&window)
window)
33xx16-bit
16-bitTimer
Timer
1x16-bit
1x16-bittimer
timerwith
with22
IC/OC/PWM
IC/OC/PWM
HDMI
HDMICEC
CEC
2x16-bit
2x16-bittimer
timereach
each
with
1
IC/OC/PWM
with 1 IC/OC/PWM
2x
2xSPI
SPI
22xx12bit
12bitDAC
DAC
1x
1x12-bit
12-bitADC
ADC
16
channels
16 channels//
850ksps
850ksps
Temp
TempSensor
Sensor
2x
2xUSART/LIN
USART/LIN
Smartcard
Smartcard//IrDa
IrDa
Modem
ModemControl
Control
2x
2xI2C
I2C
26
V/V brány v STM32
Standardní vstupně výstupní brány (ne + 5 V tolerantní)
Odhad chování pinu ( ne + 5V tolerantního) brány STM32f100x na základě
podoby s chování vstupů 74HC04 poznatků z lab. úlohy
Diskuse, možné důsledky nevhodného zapojení, důsledky - cvičení
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
27
STM32F100 IO brány
vstup brány + 5 V tolerantní
RM0041
str. 102
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
28
Tlačítko a LED na STM32VL Discovery
Tlačítko – v klidu L, Pull down rezistor
stisk – čte se 1 , viz manuál UM0919
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
29
Konfigurace brány STM32F100x
Po reset – jsou V/V brány neaktivní (i při zápisu dat do výstupního
registru brány se na výstupu nic neprojeví)
Nejdříve - aktivace hodinového signálu pro výstupní bránu
(viz demo příklad na cvičení – použití brány PC)
LDR R0, =RCC_APB2ENR
; Kopie adresy RCC_APB2ENR (APB2 peripheral clock enable register) do R0
LDR R1, [R0]
; Nacteni stavu registru RCC_APB2ENR do R1
LDR R2, =0x10
; Konstanta pro zapnuti hodin pro branu C
ORR R1, R1, R2
; Maskovani
STR R1, [R0]
; Ulozeni nove hodnoty
Následně – nutnost konfigurace každého používaného pinu V/V brány
zápisem do konfiguračního registru
Zápis dat do výstupního registru brány se projeví na výstupu pouze u pinů
konfigurovaných jako výstupy.
(Poznámka: pokud výstupní nebo vstupní pin, či další perierie, nereagují na zápis
dat, je třeba zkontrolovat, zda je přiveden hodinový signál a pin správně
konfigurován!!!)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
30
Umístění registrů
str. 36 RM0041
umístění konf. reg.
v adresním prostoru
PA 0x4001 0800
PC 0x4001 1000
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
31
Registry V/V bran
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
32
Registry V/V bran
GPIO General Purpose Input Output
GPIO_CR
= GPIO - Control Register
(4 bity na pin brány), celkem 16 pinů x 4 = 64 bitů rozděleno do dvou registrů
GPIO_CRH a GPIO – CRL ,
GPIO_CRH contr. reg. pro horní polovinu prány Px [15 až 8]
GPIO_CRH contr. reg. pro dolní polovinu prány Px [15 až 8]
GPIO_IDR
= - GPIO - Input Data Register čtení stavu pinů
GPIO_ODR = - GPIO- Output Data Register výstupní datový registr
GPIO_BSRR = - GPIO - Bit Set Reset Register (vybrané piny do 1 nebo 0)
GPIO_BRR = - GPIO - Bit Reset Register (vybrané piny do 0)
GPIOx_LCKR = GPIO - Port config. lock register (zablok. proti změnám
stavu pinu až do reset proc.- využití. pro spoleh. syst. + výklad)
bezpečnost technolog. sytémů, ..
Pozor - zápis do výstupních pinů – možný pouze do pinů nakonfigurovaných
jako výstupy a s přivedenými „hodinami“, (častá chyba ….)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
33
Konfigurace bitů 7 až 0 (dolní Byte) – low
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
34
konfigurace bitů 15 až 8 (horní Byte) - high
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
35
Konfigurace jednoho pinu brány STM32F100
manuál RM0041
str. 103
4 bity pro konfig.
jednoho bitu brány
shodný způsob:
STM32F103
STM32F105, 107
pouze odlišné adr.
(další procesory
STM32F050,
STM32F407,..
odlišná konf.)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
36
Zápis dat do výstup. registru brány GPIOx_ODR (Output Dta Reg.)
Tlačítko v kitu připojeno na PA0, LED na PC8, PC9
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
37
Ovládání jednotlivých bitů brány (set/ reset) GPIOx_BSRR
Zápis 1 do B [31 až 16] nastavuje přísl. bit do 1 (set),
1 do B [15 až 0] nastavuje přísl. bit do 0 (reset), záp. 0 – nic nezmění
zápis 0 – příslušný výst. bit se neovlivní (analog. - dva hřebeny proti sobě, vylom. zub.)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
38
Ovládání jednotlivých bitů brány – (reset) GPIOx_BRR
Zápis 1 do B [15 až 0] nastavuje přísl. bit do 0 (RESET),
zápis 0 do registru neaktivní – neovlivní stav výstupu
Vhodné
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
39
Čtení stavu registru vstupní brány - GPIOx_IDR ( input. data reg.)
Pro čtení tlačítka na PA0
Vhodné
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
40
Určení adresy daného registru GPIOx
Potřeba znát základní adresu periferie (brány) –z Tab. 1 na str. 36
offset pro příslušný registr z tab. 48 (str. 129)
zákl. adr. pro GPIOC 0x4001 1000
zákl. adr. pro GPIOA 0x4001 0800
kontrol. reg. pro GPIOx_CRL pro bity 7 až 0 má offset 0x00
kontrol. reg. pro GPIPx_CRH pro bity 15 až 8 má offset 0x04
vstup. dat. reg. GPIOx_IDR
offset 0x08
výst. dat. reg
GPIOx_ODR
offset 0x0C
kontr. reg bit set/reset GPIOx_BSR
offset 0x10
kontr. reg. bit reset GPIOx_BRR
offset 0x14
0x40011000 GPIOC + offset 0x04 = 0x40011004
0x40011004 GPIOC_CRH (konfigurace PC15 až PC8)
výstupní registr brány PC + offset pro GPIOx_ODR
0x40011000 GPIOC + offset 0x0C = 0x4001100C
0x4001100C GPIOC_ODR výstupní registr pro PC
0x400110808 GPIOA_IDR registr vstupní brány PA
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
41
Používané adresy – pro úvodní cvičení
0x4001 1004 GPIOC_CRH konfigurace PC15 až PC8
0x4001 100C GPIOC_ODR výstupní registr pro PC
0x400110808 GPIOA_IDR registr vstupní brány PA
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
42
Modifikace bitů slova v SRAM nebo výstupní brány
Funkce – čtení modifikace bitů zápis (read modify write)
do 1 OR 1
do 0 AND 0 v daném bitu, viz příklad na cvičení
? riziko – příchod přerušení v procesu čtení , modifikace a zápisu
(read, modify, write), zákaz přerušení
Pro ovládání jednotlivých vybraných bitů
brány STM32 jediným zápisem
viz funkce set, reset
obr. viz. Hitex: Insiders Guide….
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
43
Adresování jednotlivých bitů pam. a vst/výst. metodou Bit Banding
Možnost adresovat jediný bit v oblasti „bit banding“ zápisem celého slova
(32 bitů) do oblasti bit band alias (analogie velké kl. + hrot. na bit)
oblast 1MByte adres. prostoru bit band v paměti SRAM adresovaná jako
32 MByte v bit band alias
oblast 1MByte bit band v prostoru I/O v STM32 adresovaná jako 32 MByte
v bit band allias
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
Bit B(0) slova na adr. 0x2000 0000 odpovídá slovu (4 B) na adr. 0x2000 0000
Bit B(1) slova na adr. 0x2000 0000 odpovídá slovu (4 B) na adr. 0x2000 0004
mapování bitu B(2) ze slova v SRAM na adrese, 0x2000 0300 do oblasti alias :
0x2200 0000 (zač. B.B. Alias)+ (0x300*32) + (2*4) = 0x2200 6008
Zápis na adresu 0x2200 6008 má stejný efekt jako čtení,modifikace bitu a zápis bitu
2 z byte v SRAM na adrese 0x2000 0300.
význam má nejnižší bit B(0) ze slova (32 bitů)
Čtení z adr. 0x2200 6008 vrátí hodnotu (0x000 0001 nebo 0x0000 0000) podle
stavu bitu 2 ze slova v SRAM na adr. 0x2000 0300
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
44
Adresování Bit Banding
Bit banding –
obr. dle Hitex: Insiders Guide …
celá vnitřní SRAM a periferie v
STM32 - dosažitelné pomocí
„Bit banding“
SRAM Bit band oblast (celkem 1 MByte)
Bit Band Alias
od 0x2000 0000 do 0x200F FFFF,
od 0x2200 0000 do 0x23FF FFFF
Periferie Bit band oblast (celkem 1 MByte)
Bit Band Alias (celkem 32 MByte)
od 0x4000 0000 do 0x400F FFFF
od 0x4200 000 do 0x43FF FFF
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
(celkem 32 MByte)
45
Adr.prostor ARM Cortex – M3 Bit banding, Bit band. alias
-
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
46
Procesory s jádrem ARM, kódování instrukce
Architektura ARM, postupný vývoj ARMv x
Architektura ARM instrukce – kódování 32 bitové
Kódování instrukcí ve strojovém kódu ARM je pouze v jednom slovu
32 bitů, procesor načte kompletní kód instrukce naráz
Za kódem instrukce ARM nenásledují další informace o datech či adrese
skoku (jako to je např. u procesoru 8051 jedno, dvou , tří bajtové
instrukce,signálových procesorů ADSP Blackfin …a dalších)
Všechny informace jsou součástí instrukčního kódu
Instrukce operuje s jedním nebo více registry,
V jedné instrukci je pouze jediný přístup k datům v paměti (není instrukce, kde
by se dva operandy načítaly z paměti, nebo kde by se operand četl z paměti a
do paměti by se ukládal)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
47
Procesory s jádrem ARM, instrukce skoku
Dotaz? jak se řeší skoky, když adresní prostor je 32- bitový a současně se má
celá instrukce kompletně zakódovat do 32 bitů?
Skoky (kde je informace o cíli skoku součástí instrukčního kódu) jsou relativní
(skok o danou vzdálenost dopředu, či dozadu – tato vzdálenost je součástí
instruk. kódu) vzhledem k aktuální adrese právě čteného instrukčního
kódu
Relativní skoky – omezený rozsah skoku („omezená vzdálenost“)
Dotaz? jak se řeší „delší“ skoky, když adresní prostor je 32- bitový
a současně se má celá instrukce kompletně zakódovat do 32 bitů?
Skok s větším rozsahem adresy (na „větší vzdálenost“) s využitím adresy
předem uložené v registru (32 bitů)
(Pozn.: u ARM – Cortex M3 musí být nejnižší bit adr. skoku uložené v registru = 1)
Důvod – nejnižší bit adresy A0 = 1 signalizuje činnost v režimu Thumb)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
48
Instrukční sady ARM a THUMB
Kódování instrukcí ve strojovém kódu ARM nebo THUMB pouze v jednom
slovu 32 bitů, nebo jednom polovičním slovu (za kódem instrukce
nenásledují další informace o datech či adrese skoku – jako to je např. u
8051,…jedno, dvou , tří bajtové instrukce)
Pokud je potřeba v instrukci zadat adresu 32 bitů, není to součástí
instrukce,ale použití pseudoinstrukce. Instrukce se odkazuje na další
slovo v paměti vygenerované uložené překladačem.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
49
Plnění reg. konstantou 32 bit , pseudoinstrukce LDR R0, = ….
Pokud je potřeba v instrukci zadat adresu 32 bitů, není to součástí
instrukce, ale použitím pseudoinstrukce.
Instrukce se odkazuje na další slovo v pam. vygenerované (a uložené)
překladačem.
LDR
R0, =RCC_CR ; toto je pseudoinstrukce
po překladu bude ve výpisu
0x08000130 4828
LDR
r0, [pc,#160] ; @0x0800 01D4
ulož do R0 hodnotu, která je umístěna v paměti na adrese, která se získá jako
součet příští volné adresy (pro slovo 4 Byte) a čísla 160 dekadicky
tato instrukce je uložena na adrese 0x0800 0130, další volná adresa (se
zarovnáním na hranici 4 Byte) je od 0x0800 0130 + 4 = 0x0800 0134
s posunem 160 ( dekadicky)= 0xA0 ( hex.)
tedy hledaná hodnota je umístěna na adrese
0x0800 0134 + 0xA0 = 0x0800 01D4 , což indikuje zápis adresy
@0x0800 01D4 v protokolu o překladu
(možno pozorovat v okně disass. IDE Keil)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
50
PojmyBbyte, Halfword, Word z hlediska instrukcí ARM
Opakování názvosloví používané v dokumentaci ARM:
Byte
- 8 bitů 1B (jeden bajt)
Halfword - 16 bitů 2 B (dva bajty)
Word
- 32 bitů 4 B (čtyři bajty)
tedy instrukce ARM (a 32 bitová instrukce Thumb2) je kódovaná ve word
instrukce Thumb je kódovaná v halfword
(nejnižší byte kódu instrukce musí mít bit A(0) = 0 …“sudá adresa“)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
51
Instrukční sada THUMB-2
ARM CORTEX- M3, instrukční sada pouze Thumb- 2
obsahuje původní Thumb 16 bitové, doplněné 32 bitovými inst.
nepodporuje sadu ARM
Thumb efektivnější využití pam. programu, (také zrychlení při čtení z FLASH,
čtení 32 bitů – dvě instrukce, vysvětlení později)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
52
Kódování instrukcí Thumb
příklad instrukce MOVS
MOV (immediate) s nastavením příznaků je inst. MOVS
MOVS <Rd>, #<imm8>
MOVS R0, # 0x0 se přeloží jako 2000 ( hex strojový kód)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
53
Kódování instrukcí THUMB
opcode
00xxxx
010000
010001
01001x
0101xx
011xxx
100xxx
10100x
10101x
1011xx
11000x
11001x
1101xx
11100x
Instruction or instruction class
Shift (immediate), add, subtract, move, and compare
Data processing
Special data instructions and branch and exchange
Load from Literal Pool, see LDR (literal)
Load/store single data item
Generate PC- relative address, see ADR
Generate SP- relative address, see ADD (SP plus immediate)
Miscellaneous 16-bit instructions
Store multiple registers, see STM / STMIA / STMEA
Load multiple registers, see LDM / LDMIA / LDMFD
Conditional branch, and supervisor call
Unconditional Branch
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
54
Kódování THUMB, instrukce MOV
opcode
000xx
001xx
010xx
01100
01101
01110
01111
100xx
101xx
110xx
111xx
Instruction
Logical Shift Left LSL (immediate)
Logical Shift Right LSR (immediate)
Arithmetic Shift Right ASR (immediate)
Add register ADD (register)
Subtract register SUB (register)
Add 3-bit immediate ADD (immediate)
Subtract 3-bit immediate SUB (immed.)
Move MOV (immediate)
Compare CMP (immediate)
Add 8-bit immediate ADD (immediate)
Subtract 8-bit immediate SUB (immediate)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
5 bitů „opcode“ umístěných
do bitů D13 až D9 následuje
za bity D15 =0, D14=0
pro MOV (immed.) 100xx
bude kód instrukce
00 100xx x xxxx xxxx
tedy
001 000 rrr iiii iiii
rrr – kodování registru
iiii iiii přímá 8-bitová data
55
Kódování Thumb, příklad instrukce MOVS
MOV (immediate) Thumb instrukce
MOVS <Rd>, #<imm8>
MOVS R0, # 0x0 se přeloží jako 2000 ( hex strojový kód)
5 bitů „opcode“ umístěných
do bitů D13 až D9 následuje
za bity D15 =0, D14=0
pro MOV (immed.) 100xx
bude kód instrukce
001 00 xxx xxxx xxxx
tedy
001 000 rrr iiii iiii
rrr – kodování registru
iiii iiii – přímá 8-bitová data
001 00 rrr iiii iiii tedy binárně 000 0000 0000
0000
i
rrr – kodování registru (R0 je kódován jako
000 binárně)
iiii iiii – přímá 8-bitová data
proto není možno v Thumb instrukci uložit
přímá data větší než 8 bitů,
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
56
Kódování – příklad určení strojního kód instrukce Thumb -2
32-bit Thumb – kódování instrukce
op1 musí být různé různé od 00,
pokud je op1 = 00 (bin) – jedná se o 16 - bitovou instrukci Thumb
tak ARM Cortex –M3 rozliší instrukce
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
57
Kódování – příklad určení strojního kód instrukce Thumb-2
op1 op2
op
01 00 xx0xx
01 00 xx1xx
01 01xxxxx
01 1xxxxxx
10 x0xxxxx
10 x1xxxxx
10 xxxxxxx
11 000xxx0
11 00xx001
11 00xx011
11 00xx101
11 00xx111
11 010xxxx
11 0110xxx
11 0111xxx
11 1xxxxxx
x
x
x
x
0
0
1
x
x
x
x
x
x
x
x
x
Instruction class
Load Multiple and Store Multiple
Load/store dual or exclusive, table branch
Data processing (shifted register)
podle operandů
Coprocessor instructions
OP1 a OP2
Data processing (modified immediate)
vznikne kód instrukce
Data processing (plain binary immediate)
použitelné i pro zpětný
Branches and miscellaneous control
překlad –
Store single data item
disassembling)
Load byte, memory hints
Load halfword, memory hints
Load word
UNDEFINED
Data processing (register)
Multiply, multiply accumulate, and absolute difference
Long multiply, long multiply accumulate, and divide
Coprocessor instructions
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
58
Kódování – příklad určení strojního kód instrukce Thumb -2
.
OP1, OP2, OP se doplní na příslušná místa kódu instrukce,
10
x0xxxxx
0
Data processing (modified immediate)
další bity představují kódování použitých registrů, podmínky a přímá data
příklad
LDR R0, =0x0 se přeloží do Thumb- 2
F04F 0000 (hex) (nalezne se v protokolu o překladu soubor xxx.LST)
F
0
4 F
0
0
0
0 (hex)
1111 0000 0100 0000 0000 0000 0000 0000 bin)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
59
Instrukce MOV pro instrukce Thumb a Thumb - 2
op1 op2 op Instruction class
MOV (immediate) MOVS <Rd>,#<imm8> Thumb instrukce
(dle jazyka UAL S. nast .-příznaky
( požadavek na Thumb, inst. která
je pouze s nastavením příznaků,
Thumb- 2 instrukce MOV{S}<c>.W <Rd>, #<const> ( S nast. přízn.), cS instrukce má nastavit příznakové bity, .W chci kódovat do Thumb -2, 32 bit
c- podmínky – vykonání ínstrukce podle příznak. bitů
Thumb- 2 MOV.W<c> <Rd>, #<imm16>
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
60
Instrukce skoku
32- bit Thumb – kódování instrukce
A 16-bit conditional branch instruction, with a branch range of –256 to +254 bytes.
A 32-bit conditional branch instruction, with a branch range of approximately ± 1MB.
B<c>.W <label>
B<c>.W <label>
kódování podmínky – volba stavových bitů (cond) zabírá 4 bity,
proto je menší rozsah adresy skoku 21 bitů, +/- 1 MByte
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
61
Kódování instrukcí do strojního kódu
Pro detailní výklad problematiky – viz lit
ARM DDI 0403C_ARM®v7-M Architecture Reference Manual, část
Chapter A5 Thumb Instruction Set Encoding
Poznámka:
Pohled na způsob kódování instrukcí může částečně napomoci představě, jak v
procesoru ARM probíhá dekódování instrukčního kódu a jeho provedení
Může také napomoci vysvětlení způsobu zpětného překladu – disassemblingu
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
62
Srovnání instrukce skoku v Thumb a Thumb - 2
16- bit Thumb – kódování instrukce skoku
A 16-bit conditional branch instruction, with a branch range of –256 to +254 bytes.
.
16-bit Compare and Branch on Zero and Compare and Branch on Nonzero
instructions, with a branch range of +4 to +130 bytes. See CBNZ, CBZ
E7F3
B
1110 0111 1111 0011
D0F2
BEQ
1101 0000 1111 0010
GPIO_CNF
GPIO_CNF
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
bez podmínky adresa 11 bitů
s podmínkou adresa 8 bitů
63
Mapa paměti v STM32F100x
od 0x00 paměť Flash
od 0x4000 0000 periferie
od 0x2000 0000 interní SRAM
výkon programu začíná podle „reset handler“ adresa uložena na
0x0000 0000 (stack pointer) výchozí hodnota pro nast. ukazatele zásobníku
0x0000 0004 (reset handler) v našem programu tam je 0x0800 00ED
0x0000 0008 NMI handler adr. obsluhy nemaskovatelného přerušení NMI
??? proč 0x0800 00ED , program přeci začíná na 0x0800 00EC
0x0800 00EC …….1110 1100
0x0800 00ED … .1110 1101 ??? nejnižší bit odlišný
instrukce kódovány 16 bitově (THUMB) nebo 32 bitově (THUMB- 2)
takže by bit 0 měl být vždy 0, historicky od ARM, bit 0, pokud je v 0, znamená
to přechod do módu klasické instruce ARM ( 32 bitů)
bit 0 = 1 znamená režim Thumb, zde i Thumb -2
nejnižší bit adresy skoku u CORTEX – M3 musí být proto vždy 1 (význam pro
jednotku dekódování instrukce)
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
64
Možnosti využití analyzátoru v simulátoru
Použití simulátoru , výklad na přednášce
analysis window
disassembly window
setup
přidat signál – který se vyskytuje v programu
např. gpio_odr zobrazí se 16- bitově
možno nastavit rozsah setup Min/Max
gpio_odr.8 zobrazí pouze bit 8
zobrazení analog, bit, state (klik „pravá myš“ na graf)
v režimu state nastavení zobrazení hodnot dekadicky, hexadecimálně
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
65
Simulátor
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
66
Simulátor
zadání masky pro zobrazení bitů
zadání GPIOC_ODR.8 zobrazení pouze bitu 8
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
67
Použití simulátoru Keil – zobrazení průběhů
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
68
Použití simulátoru Keil – zobrazení průběhů
Použití log. analyzátoru je pouze při simulaci
při běhu programu – při break pointu – zobrazení stavu pinů
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
69
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
70
Simulace – zobrazení velikosti čísla, analog. zobrazení (DAC)
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
71
.Posun o 8 bitů doprava – jako dělení hodnotou 0x100
zobrazení kombinací bitů PC9 a PC8 jako čísel 0, 1, 2, 3
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
72
.
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
73
. Zobrazení kombinace výstupů v režimu „state“ jako hodnoty
A4B38NVS, 2012, J.Fischer, kat. měření, ČVUT - FEL
74
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement