Programowanie mikroprocesorów jednoukładowych

Transkrypt

Programowanie mikroprocesorów jednoukładowych
Programowanie mikroprocesorów
jednoukładowych
Firmware
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
1 / 14
Plan I
Firmware
Etapy działania firmware’u
Sandstone
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
2 / 14
Etapy działania firmware’u
Poziomy
Podstawowe ustawienia systemu
Powłoka sprzętowo-programowa
Wgrywanie bootowalnego obrazu
Porzucenie kontroli
Undefined Instruction
Mariusz Naumowicz
Cechy
Programowanie sprzętowych rejestrów systemu
Identyfikacja platformy sprzętowej
Diagnostyka
Dostraczanie interfejsu debuggowania
Interpereter linii komend
Hardware ABstraction Layer
Sterowniki urządzeń
Podstawowy system
Ustawienie pc na adres nowego obrazu systemu
undefined
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
3 / 14
Sandstone
Cecha
Kod
Toolchain
Rozmiar obrazu
Kod źródło
Pamięć
Mariusz Naumowicz
Konfiguracja
Wyłącznie instrukcje ARM
ARM Developer Suite 1.2
700 bajtów
17 KB
remapowana
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
4 / 14
Struktura kodu
Krok
1
2
3
4
5
Mariusz Naumowicz
Opis
Wywołanie wyjątku Reset
Początek inicjalizacji urządzeń
Remapowanie pamięci
Inicjalizacja sprzętu komunikacyjnego
Bootloader - ładowanie i oddanie działania
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
5 / 14
Krok1: Uruchamianie wyjątku Reset I
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AREA s t a r t , CODE, READONLY
ENTRY
sandstone_start
B sandstone_init1 ; reset vector
B ex_und ; u n d e f i n e d v e c t o r
B ex_swi ; swi v e c t o r
B ex_pabt ; p r e f e t c h a b o r t v e c t o r
B ex_dabt ; d a t a a b o r t v e c t o r
NOP ; n o t u s e d . . .
B int_irq ; irq vector
B int_fiq ; fiq vector
ex_und B ex_und ; l o o p f o r e v e r
ex_swi B ex_swi ; loop f o r e v e r
ex_dabt B ex_dabt ; l o o p f o r e v e r
ex_pabt B ex_pabt ; l o o p f o r e v e r
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
6 / 14
Krok1: Uruchamianie wyjątku Reset II
16
17
int_irq B int_irq ; loop f o r e v e r
i n t _ f i q B i n t _ f i q ; loop f o r e v e r
Rezultatem działania powyższego kodu jest:
I
ustawienie obsługi wyjątków w systemie
I
przekazanie kodu do inicjalizacji urządzeń
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
7 / 14
Krok 2: Początek inicjalizacji sprzętu I
1
2
3
4
sandstone_init1
LDR r3 , =SYSCFG ; where SYSCFG=0 x 0 3 f f 0 0 0 0
LDR r4 , =0 x 0 3 f f f f a 0
STR r4 , [ r 3 ]
Rezultatem działania powyższego kodu jest:
I
rejestry systemowe są ustawione z poziomu adresu bazowego – 0x03ff0000.
I
wyświetlacz wielosegmentowy jest skonfigurowany aby móc wyświetlać postęp pracy
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
8 / 14
Krok 3: Remapowanie pamięci I
Typ pamięci
Flash ROM
SRAM bank 0
SRAM bank 1
1
2
3
4
5
6
7
8
9
10
Początek adresu
0x00000000
niedostępne
niedostępne
Koniec adresu
0x00080000
niedostępne
niedostępne
Rozmiar
512K
256K
256K
LDR r14 , =s a n d s t o n e _ i n i t 2
LDR r4 , =0x01800000 ; new f l a s h ROM l o c a t i o n
ADD r14 , r14 , r 4
ADRL r0 , memorymaptable_str
LDMIA r0 , { r1−r 1 2 }
LDR r0 , =EXTDBWTH ; =(SYSCFG + 0 x3010 )
STMIA r0 , { r1−r 1 2 }
MOV pc , r 1 4 ; jump t o remapped memory
sandstone_init2
; Code a f t e r s a n d s t o n e _ i n i t 2 e x e c u t e s @ +0x1800000
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
9 / 14
Krok 3: Remapowanie pamięci II
Typ pamięci
Flash ROM
SRAM bank 0
SRAM bank 1
Początek adresu
0x01800000
0x00000000
0x00040000
Koniec adresu
0x01880000
0x00040000
0x00080000
Rozmiar
512K
256K
256K
Rezultatem działania kodu jest:
I
pamięć została zmapowana wg tabeli powyżej.
I
prejestr pc wskazuje na kolejny krok do wykonania. Adres ten jest zlokalizowany dla
zmapowanej pamięci Flash ROM.
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
10 / 14
Krok 4:Inicjalizacja sprzętu komunikacyjnego I
Wynik działania tego etapu:
Sandstone Firmware (0.01)
- platform ......... e7t
- status ........... alive
- memory ........... remapped
+ booting payload ...
Rezultatem działania powyższego kodu jest:
I
port szeregowy jest zaincjalizowany – 9600 baud, no parity, one stop bit, and no flow
control.
I
wysłane jest wiadomość przez port szergowoy potwierdzająca jego prawdiłową konfigurację
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
11 / 14
Krok 5: Booloader - kopiowanie kodu systemu i jego uruchomienie I
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sandstone_load_and_boot
MOV r13 ,#0 ; d e s t i n a t i o n a d d r
LDR r12 , p a y l o a d _ s t a r t _ a d d r e s s ; s t a r t a d d r
LDR r14 , p a y l o a d _ e n d _ a d d r e s s ; end a d d r
_copy
LDMIA r 1 2 ! , { r0−r 1 1 }
STMIA r 1 3 ! , { r0−r 1 1 }
CMP r12 , r 1 4
BLT _copy
MOV pc ,#0
payload_start_address
DCD s t a r t A d d r e s s
payload_end_address
DCD e n d A d d r e s s
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
12 / 14
Krok 5: Booloader - kopiowanie kodu systemu i jego uruchomienie II
Rezultatem działania powyższego kodu jest:
I
kopiowanie kodu systemu do pamięci SRAM pod adres 0x00000000
I
ustawienie rejestru pc na adres początkowy nowego kodu; pc=0x00000000
I
system jest całkowicie załadowany i uruchomiony
Wynik działania do końca tego etapu:
Sandstone Firmware (0.01)
- platform ......... e7t
- status ........... alive
- memory ........... remapped
+ booting payload ...
Simple Little OS (0.09)
- initialized ...... ok
- running on ....... e7t
e7t:
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
13 / 14
References
Andrew Sloss, Dominic Symes, and Chris Wright.
ARM System Developer’s Guide: Designing and Optimizing System Software.
Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2004.
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
4 grudnia 2016
14 / 14