Přednáška 3

Přednáška 3
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Přednáška 3
2011, kat. měření, ČVUT - FEL, Praha
J. Fischer
1
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Náplň přednášky
Rekapitulace – log. obvody CMOS, závěry z měření,
výstupy CMOS
specifikace úlohy 3 dle materiálů pro zadání na www stránkách
Ovládání výstupů, čtení, modifikace, zápis
využití funkce Bit Banding v ARM Cortex- M3
Poznámky k architektuře ARM Cortex M3 z hlediska orientace ve stroj. kódu
Využití simulátoru pro sledování běhu programu a simulace ovládání vstupů
a výstupů ( výklad na tabuli a projektorem s použitím IDE Keil)
2
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Modifikace bitů slova v SRAM nebo výstupní brány
Funkce – čtení modifikace bitů
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….
3
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Adresování Bit Banding
Možnost adresovat jediný bit v oblasti „bit banding) zápisem celého slova
(32 bitů) do oblasti bit band alias
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)
mapování bitu 2 z Byte v SRAM na adrese
0x2000 0300 do oblasti alias :
0x2200 6008 = 0x2200 0000 + (0x300*32) + (2*4).
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 0 ze slova ( 32 bitů)
Čtení z addresy 0x2200 6008 vrátí hodnotu (0x01 nebo 0x00) bitu 2 z byte v
SRAM
address 0x2000 0300 (0x01: bit set; 0x00: bit cleared).
4
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Adresování Bit Banding
Bit banding –
obr. dle Hitex: Insiders Guide …
celá vnitřní SRAM a periferie v
STM32 v rozsahu ades
dosažitelném pomocí
„Bit banding“
SRAM Bit band oblast (celkem 1 MByte)
Bit Band Alias
(celkem 32 MByte)
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
5
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Adresový prostor ARM Cortex – M3
-
6
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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)
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
7
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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 musí být nejnižší bit adresy skoku uložené v registru = 1)
Důvod – nejnižší bit adresy A0 = 1 signalizuje činnost v režimu Thumb.)
8
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Procesory s jádrem ARM, instrukce
Architektura ARMv4T implementace ARM7TDMI - zavedeny Thumb
instrukce
Thumb – úsporné kódování 16 bitů (data v registrech a data paměti RAM jsou
i nadále 32 bitová), dvojnásobná hustota kódu.
Omezená sada, omezený rozsah adresace relativních skoků, omezení velikosti
přímých dat zadaných přímo v instrukci
(Menší nárok na rychlost paměti FLASH, naráz čtení 32 bitů kódu.)
ARM7TDMI – instrukce ARM a THUB, přepínání sady podle pepotřeby
9
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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.
10
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Instrukční sady ARM a THUMB
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ěti vygenerované 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
11
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
12
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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 výchozí hodnota pro nastavení ukazatele zásobníku (stack)
0x0000 0004 reset handler ( v našem programu tam je 0x0800 00ED)
0x0000 0008 NMI handler
??? proč 0x0800 00ED , program 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),
13
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Instrukční sada THUMB-2
ARM CORTEX- M3, instrukční sada pouze THUMB- 2
obsahuje původní THUMB 16 bitové, doplněné 3 bitovými
nepodporuje sadu ARM
14
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
15
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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)
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
16
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
rrrr – kodování registru (R0 je kódován jako
0000 binárně)
iiii iiii – přímá 8-bitová data
17
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
18
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
19
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
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)
příklad
20
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Instrukce MOV
op1 op2
op Instruction class
MOV (immediate) MOVS <Rd>,#<imm8> Thumb instrukce
Thumb- 2 instrukce MOV{S}<c>.W <Rd>,#<const> ( S nast. přízn.), c-
Thumb- 2 MOVW<c> <Rd>,#<imm16>
21
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
22
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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
23
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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 – disaasemblingu
24
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
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ě
25
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
.
26
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
zadání masky pro zobrazení bitů
zadání GPIOC_ODR.8 zobrazení pouze bitu 8
27
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Použití simulátoru Keil
.
28
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
. Použití log. analyzátoru je pouze při simulaci
při běhu programu – při break pointu – zobrazení stavu pinů
29
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
.
30
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
.
31
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
.Posun o 8 bitů doprava – jako dělení hodnotou 0x100
zobrazení kombinací bitů PC9 a PC8 jako čísel 0, 1, 2, 3
32
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
.
33
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
. Zobrazení kombinace výstupů v režimu „state“ jako hodnoty
34
A4B38NVS, 2011, kat. měření, J.Fischer, ČVUT - FEL
Používané adresy
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
35
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