w3-sw_w_us - Katedra Inżynierii Komputerowej Politechniki

Download Report

Transcript w3-sw_w_us - Katedra Inżynierii Komputerowej Politechniki

Wykład 3
Mapa pamięci mikrokontrolera
(Memory Map)
SAB80C537
dr inż. Andrzej Przybył
Katedra Inżynierii Komputerowej
Politechnika Częstochowska
Mapa pamięci kontrolera
•
Pamięć adresowana jest bajtowo 1,
każdy bajt (podstawowa komórka
pamięci) ma swój adres.
•
Dzieli się na pamięć wewnętrzną i
zewnętrzną mikrokontrolera
•
Pamięć zewnętrzna jest opcjonalna –
nie musi być stosowana
•
Pewne obszary adresowe są
współdzielone (ang. shared) przez
pamięć wewnętrzną, zewnętrzną i obszar
rejestrów specjalnych SFR (Special
Functions Registers).
Aby uzyskać dostęp do wybranej komórki
pamięci wewnętrznej, zewnętrznej lub
rejestru specjalnego, należy użyć
właściwych dla danego obszaru trybów
adresowania i/lub instrukcji procesora.
1 ) UWAGA –
istnieje tez specjalny obszar pamięci wewnętrznej, który jest adresowalny bitowo.
2
Pamięć wewnętrzna – dolna połówka
•
Dostęp do dolnej połówki pamięci wewnętrznej RAM jest wykonywany
za pomocą trybu adresowania bezpośredniego (ang. Direct Addressing)
oraz pośredniego (ang. Indirect Addressing).
–
Przykład użycia trybu bezpośredniego
mov A, 10 ;odczyt zawartości komórki 10 do akumulatora
mov 20,A ; zapis zawartości A w komórce o adresie 20
–
Przykład użycia trybu pośredniego
;odczyt zawartości komórki 100 do akumulatora
mov R0, #100 ;wpisanie adresu komórki do rejestru R0 (można
użyć też R1)
mov A,@R0 ;właściwy odczyt (tryb pośredni)
;możliwy jest też zapis
mov @R0, A
•
W dolnej połówce pamięci wewnętrznej RAM umieszczony jest również
zestaw rejestrów uniwersalnych R0-R7. Położenie zestawu rejestrów
może by zmieniane przez bity RS0, RS1 zawarte w słowie PSW na
jedną z czterech lokacji (banków rejestrów):
bank 0:adresy[ 0..7]
bank 1:[8..15]
bank 2:[16..23]
bank 3:[24..31])
•
Przełączanie banków rejestrów jest wygodne w krytycznych czasowo
procedurach obsługi przerwań i pozwala na szybkie przełączanie
kontekstu realizowanych zadań (ang. fast context switching) .
•
Domyślną lokalizacją rejestrów R0-R7 jest obszar pamięci wewnętrznej o
adresach 0..7. Należy zadbać o to, aby nie wykorzystywać obszaru
pamięci wewnętrznej zajętego przez rejestry R0-R7 do innych celów.
poznane tryby adresowania: bezpośredni i pośredni
UWAGA w pamięci wewnętrznej (dowolnej połówce) jest też umieszczony STOS. Jest to specjalnie traktowany obszar
pamięci, który nie może być zajęty przez inne dane. Miejsce wierzchołka stosu wskazuje wskaźnik stosu SP (ang. Stack
Pointer). Należy zadbać o właściwe (tj. niekolizyjne) umieszczenie stosu.
3
Pamięć wewnętrzna – górna połówka
•
Dostęp do górnej połówki pamięci wewnętrznej RAM jest
wykonywany wyłącznie za pomocą trybu adresowania
pośredniego (ang. Indirect Addressing).
•
W obszarze górnej połówki adresów (czyli w zakresie
128..255) umieszczone są rejestry specjalne (SFR).
Rejestry te mają swoje dedykowane funkcje dotyczące
sterowania urządzeniami peryferyjnymi mikrokontrolera (np.
portami, przetwornikiem AC, układami czasowo-licznikowymi
tip.).
•
Dostęp do rejestrów specjalnych możliwy jest wyłącznie w
trybie adresowania bezpośredniego.
Przykład:
zapisu portu P1
mov P1, A
jest równoważny z
mov 90h,A
P1 jest zdefiniowane jako liczba 90h w pliku
definiującym rejestry mikrokontrolera (w tym
przypadku plik nazywa się REG517.INC)
4
Pamięć wewnętrzna
– sposób użycia w assemblerze środowiska Keil uVision
NAME PROGRAM
$INCLUDE (REG517.INC) ;dolaczenie pliku definicji rejestrow procesora 80C537
PROGRAM
SEGMENT CODE ;definicja segmentu o nazwie PROGRAM, zawierającego kod (CODE) programu
IRAM
SEGMENT IDATA ;definicja segmentu danych pamięci wewnętrznej RAM (zakres 0..0ffh)
LOW_IRAM SEGMENT DATA ;definicja segmentu danych pamięci wewnętrznej RAM (zakres 0..07fh - dolna połówka)
org 0x0000 ; = równoważne z dyrektywą "CSEG AT 0x0000"
JMP START ;wlasciwa obsluga wektora przerwania RESET
RSEG PROGRAM
;informacja dla linkera - następne dane to kod programu (Z tego miejsca uruchomi sie
program)
START:
....
PETLA:
mov A,ZMIENNA1 ;zwiekszenie zmiennej z pamięci LOW_IRAM o jeden
add a,#1
mov ZMIENNA1, A
mov
mov
add
mov
R0,#ZMIENNA3 ;zwiększenie zmiennej z pamieci HIGH_IRAM o jeden
A,@R0
a,#1
poznane słowa kluczowe:
@R0, A
poznana składnia:
CODE, IDATA, DATA, DS
struktura projektu z segmentami
jmp PETLA
RSEG LOW_IRAM
; zmienne W DOLNEJ POŁÓWCE pamieci wewnetrznej RAM (IRAM: 0..7fh)
; dostęp w trybie BEZPOSREDNIM lub posrednim
; np. MOV A,#ZMIENNA4
;UWAGA - jest to najwygodniejszy sposób w assemblerze !!!
ZMIENNA1: DS 1 ;rozmiar zmiennej to jeden bajt, slowo 'ZMIENNA1' bedzie oznaczalo adres przydzielonej komórki
pamieci ze wskazanego obszaru
; zmienne w pamieci wewnetrznej RAM (IRAM)
; dostep w trybie posrednim (za pomoca rejestru R0 lub R1)
; np. MOV R1,#ZMIENNA1
;
MOV @R1,A
RSEG IRAM
ZMIENNA3: DS 1
END
5
STOS
•
Stos jest specjalnie traktowanym fragmentem pamięci wewnętrznej RAM. Jest to struktura typu
LIFO (ang. Last In First Out).
•
Adres wierzchołka stosu wskazywany jest rejestrem SP (ang. Stack Pointer). Domyślną wartością
(po zresetowaniu procesora) SP jest liczba 7.
•
Ze stosem związane są następujące instrukcje procesora:
PUSH xx
– Zwiększa wskaźnik stosu o jeden a następnie zapisuje do komórki pamięci wskazywanej nową wartością SP
zawartość rejestru xx
xx – oznacza adres rejestru SFR (128..255).
W takim zapisie należy użyć ACC zamiast A do wskazania akumulatora.
POP xx
– odczytuje daną z komórki pamięci wskazywanej aktualną wartością SP do rejestru xx a następnie zmniejsza
wskaźnik stosu o jeden
CALL ETYKIETA (ACALL, LCALL)
– Odkłada na stos 2 bajty oznaczające 16-bitowy adres następnej instrukcji (po instrukcji CALL) oraz przekazuje
sterowanie do miejsca oznaczonego jako ETYKIETA
RET
– zdejmuje ze stosu dwa oznaczające 16-bitowy adres instrukcji i przekazuje sterowanie procesora do tego
adresu
RETI
– analogicznie jak RET ale informuje również procesor, że aktualnie wykonywana procedura obsługi przerwania
została już zakończona. Instrukcja pozwala na obsługę kolejnego zgłoszenia o priorytecie niższym lub równym
do aktualnie zakończonej procedury.
6
Stos
– sposób użycia w assemblerze środowiska Keil uVision
NAME
PROGRAM
$INCLUDE (REG517.INC) ;dolaczenie pliku definicji rejestrow procesora 80C537
PROGRAM
SEGMENT CODE
;definicja segmentu o nazwie PROGRAM, zawierającego
;kod (CODE) programu
IRAM SEGMENT IDATA ;definicja segmentu danych pamięci wewnętrznej RAM
;(zakres 0..0ffh)
LOW_IRAM SEGMENT DATA
;definicja segmentu danych pamięci wewnętrznej RAM
;(zakres 0..07fh - dolna połówka)
org 0x0000 ; = równoważne z dyrektywą "CSEG AT 0x0000"
JMP START ;wlasciwa obsluga wektora przerwania RESET
RSEG PROGRAM
;informacja dla linkera - następne dane to kod programu (Z tego
miejsca uruchomi sie program)
START:
....
mov SP,#DNO_STOSU-1 ;ustawienie wskaźnika stosu na początek zarezerwowanego obszaru
PETLA:
...
jmp PETLA
RSEG IRAM
DNO_STOSU: DS 20h ;zarezerwowanie kolejnych 32 bajtów (20h) w pamiecie IRAM na STOS
...
END
poznane instrukcje: PUSH, POP, CALL, RET
poznana struktura: struktura projektu z definicją stosu
7
Obszar pamięci
bitowo-adresowalny
•
Istnieje fragment pamięci wewnętrznej RAM o adresach bajtowych z
zakresu 32-47 (20h-02fh), który może być bitowo-adresowalny
•
Wybór (zaadresowanie) konkretnego bitu następuje poprzez podanie jego
adresu bajtowego oraz numeru bitu po kropce, np.
• setb 32.3; ustawienie bitu nr 3 w komórce pamięci
clr 40.7; skasowanie bitu nr 7 w komórce o adresie 40
cpl 32.7 ; zamiana stanu bitu na przeciwny
jb 32.3, ETYKIETA ;skok warunkowy zależny od stanu
;wskazanego bitu
jnb 32.5, ETYKIETA ; analogicznie
•
Mechanizm adresowania bitowego może służyć jako wygodny sposób na
wykorzystanie flag bitowych (tzw. zmiennych boolowskich) w programach
8
Obszar pamięci bitowo-adresowalny
sposób użycia w assemblerze środowiska Keil uVision
NAME
PROGRAM
$INCLUDE (REG517.INC)
PROGRAM SEGMENT CODE ;definicja segmentu zawierającego kod programu
BITS SEGMENT BIT ;definicja segmentu danych bitowo-adresowalnych (zakres
0..0ffh)
org 0x0000 ; = równowazne z dyrektywa "CSEG AT 0x0000"
JMP START ;wlasciwa obsluga wektora przerwania RESET
RSEG
PROGRAM ;informacja dla linkera - następne dane to kod programu
;(Z tego miejsca uruchomi sie program)
START:
clr flaga_1
PETLA:
...
cpl flaga_1
jmp PETLA
poznane słowa kluczowe:
poznana technika:
BIT, DBIT
wykorzystanie zmiennych
z obszaru bitowo-adresowalnego
RSEG BITS
flaga_1: DBIT 1
END
9
Obszar pamięci
bitowo-adresowalny, c.d.
•
Bity mogą być adresowane również za
pomocą odpowiadających im analogicznych
adresów: 00-7fh (rysunek z prawej), np:
setb 20h.0
jest równoważne z
setb 00h
10
Pamięć zewnętrzna
• Procesor SAB80C537
może komunikować się
z pamięcią zewnętrzną
(umieszczoną poza
obudową
mikrokontrolera)
• Istnieje dwa
wyróżnione rodzaje
pamięci zewnętrznej:
pamięć kodu (ang.
Code Memory) oraz
pamięć programu
(XRAM).
11
Pamięć zewnętrzna XRAM
sposób dostępu
•
Z punktu widzenia programisty ważny jest sposób dostępu do komórek w/w
pamięci. Dostęp jest zawsze pośredni z użyciem 16-bitowego rejestru
DPTR (ang .Data Pointer):
•
Przykład, zapis zawartości akumulatora do komórki pamięci zewnętrznej
XRAM o adresie 1000
mov DPTR, #1000
movx @DPTR, A
Przykład 2, odczyt komórki o adresie 2000 do akumulatora
mov DPTR, #2000
movx A, @DPTR
12
Pamięć zewnętrzna programu (Code Memory)
sposób dostępu
•
Możliwy jest tylko odczyt z pamięci programu co wynika z faktu, że jest to
pamięć przewidziana do przechowywania niemodyfikowalnego kodu
programu.
Przykład 3, odczyt komórki o adresie 2000 z pamięci zewnętrznej programu do
akumulatora:
mov DPTR, #2000
movc A, @A+DPTR
;Instrukcja zaadresuje komórkę pamięci o adresie powstałym przez niejawne
sumowanie 16-bitowego adresu zawartego w DPTR z 8-bitowa wartością
zawarta w A)
Uwaga: Instrukcje MOVX i MOVC mogą występować tylko w takiej składni jak
podano w przykładach 1-3.
Nie jest możliwy zapis do Code Memory.
13
Pamięć zewnętrzna
– sposób użycia w assemblerze środowiska Keil uVision
NAME PROGRAM
$INCLUDE (REG517.INC)
; dolaczenie pliku definicji rejestrow procesora 80C537
PROGRAM
SEGMENT
CODE ;definicja segmentu zawierającego kod programu
ZEWN_RAM SEGMENT XDATA ; pamięć zewnętrzna XRAM
org 0x0000 ; = równowazne z dyrektywa "CSEG AT 0x0000"
JMP START ;wlasciwa obsluga wektora przerwania RESET
RSEG
PROGRAM
;informacja dla linkera - następne dane to kod programu
;(Z tego miejsca uruchomi sie program)
START:
PETLA:
mov DPTR, #zmienna_X1
mov A,#1
movx @dptr, A
mov A,#0
mov DPTR,#zmienna_C1
movc A,@A+dptr
mov A,#0
mov DPTR,#zmienna_C2
movc A,@A+dptr
poznane instrukcje:
poznane techniki:
MOVC, MOVX
wykorzystanie stałych oraz zmiennych
z obszaru zewnętrznej pamięci kodu
oraz zewnętrznej pamięci danych
jmp PETLA
;aktualny segment to segment kodu - mozna w nim umiescic wprost zmienne
zmienna_C1: ds 1 ;zarezerwowanie 1 bajtu na zmienna
zmienna_C2: db 22 ;zarezerwowanie jednego bajtu na zmienna i ustanowienie wartosci poczatkowej = 22
RSEG ZEWN_RAM
zmienna_X1: DS 1
END
14
Pytania kontrolne
• Podać sekwencję instrukcji na dodanie zawartości dwu
komórek pamięci wewnętrznej RAM o adresach 200 i
201. Wynik należy zapisać do komórki o adresie 202.
• Podać sekwencję instrukcji sumującą 100 kolejnych
komórek z pamięci zewnętrznej XRAM. Adres
początkowy = 2000, wynik zapisać do rej. R7
• Opisać działanie STOS-u procesora w oparciu o
instrukcje PUSH, POP, CALL i RET. Wyjaśnić
podstawowe zakresy zastosowań stosu w systemie
komputerowym
• Odczytać element (bajt) o indeksie 200 z tablicy zawartej
w pamięci zewnętrznej programu. Adres tablicy wynosi
50000.
15