Wykład 3

15
Wykład 3 Mapa pamięci mikrokontrolera (Memory Map) SAB80C537 dr inż. Andrzej Przybył Katedra Inżynierii Komputerowej Politechnika Częstochowska

description

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. - PowerPoint PPT Presentation

Transcript of Wykład 3

Page 1: Wykład 3

Wykład 3

Mapa pamięci mikrokontrolera(Memory Map)

SAB80C537

dr inż. Andrzej PrzybyłKatedra Inżynierii Komputerowej

Politechnika Częstochowska

Page 2: Wykład 3

2

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.

Page 3: Wykład 3

3

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średniegomov A, 10 ;odczyt zawartości komórki 10 do akumulatoramov 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 akumulatoramov 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ż zapismov @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.

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.

poznane tryby adresowania: bezpośredni i pośredni

Page 4: Wykład 3

4

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)

Page 5: Wykład 3

5

Pamięć wewnętrzna – sposób użycia w assemblerze środowiska Keil uVision

NAME PROGRAM$INCLUDE (REG517.INC) ;dolaczenie pliku definicji rejestrow procesora 80C537PROGRAM SEGMENT CODE ;definicja segmentu o nazwie PROGRAM, zawierającego kod (CODE) programuIRAM 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 jedenadd a,#1mov ZMIENNA1, A

mov R0,#ZMIENNA3 ;zwiększenie zmiennej z pamieci HIGH_IRAM o jedenmov A,@R0add a,#1mov @R0, A

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 IRAMZMIENNA3: DS 1END

poznane słowa kluczowe: CODE, IDATA, DATA, DSpoznana składnia: struktura projektu z segmentami

Page 6: Wykład 3

6

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 xxxx – 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.

Page 7: Wykład 3

7

Stos – sposób użycia w assemblerze środowiska Keil uVision

NAME PROGRAM$INCLUDE (REG517.INC) ;dolaczenie pliku definicji rejestrow procesora 80C537PROGRAM SEGMENT CODE ;definicja segmentu o nazwie PROGRAM, zawierającego

;kod (CODE) programuIRAM 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, RETpoznana struktura: struktura projektu z definicją stosu

Page 8: Wykład 3

8

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ęciclr 40.7; skasowanie bitu nr 7 w komórce o adresie 40cpl 32.7 ; zamiana stanu bitu na przeciwnyjb 32.3, ETYKIETA ;skok warunkowy zależny od stanu

;wskazanego bitujnb 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

Page 9: Wykład 3

9

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 programuBITS 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_1PETLA:

...

cpl flaga_1jmp PETLA

RSEG BITSflaga_1: DBIT 1

END

poznane słowa kluczowe: BIT, DBIT

poznana technika: wykorzystanie zmiennych z obszaru bitowo-adresowalnego

Page 10: Wykład 3

10

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

Page 11: Wykład 3

11

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).

Page 12: Wykład 3

12

Pamięć zewnętrzna XRAMsposó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

Page 13: Wykład 3

13

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.

Page 14: Wykład 3

14

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 programuZEWN_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,#1movx @dptr, A

mov A,#0mov DPTR,#zmienna_C1movc A,@A+dptr

mov A,#0mov DPTR,#zmienna_C2movc A,@A+dptr

jmp PETLA

;aktualny segment to segment kodu - mozna w nim umiescic wprost zmiennezmienna_C1: ds 1 ;zarezerwowanie 1 bajtu na zmienna

zmienna_C2: db 22 ;zarezerwowanie jednego bajtu na zmienna i ustanowienie wartosci poczatkowej = 22

RSEG ZEWN_RAMzmienna_X1: DS 1

END

poznane instrukcje: MOVC, MOVX

poznane techniki: wykorzystanie stałych oraz zmiennych z obszaru zewnętrznej pamięci kodu

oraz zewnętrznej pamięci danych

Page 15: Wykład 3

15

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