MSP430X
Godziny kontaktowe:
wt. 13 - 15
śr. 11 - 13
slau056g.pdf
slac050q.zip
MSP430X zawiera elementy specjalnie przeznaczone do nowoczesnych
technik programowania takich jak wyliczane rozkazy skoków i rozgałęzień,
przetwarzanie tablicowe. Jest przystosowany do wykorzystania języków
wysokiego poziomu takich jak C.
MSP430X może bezpośrednio adresować do 1 MB pamięci bez
stronicowania. W porównaniu do MSP430 – MSP430X ma kilka przerwań o
mniejszej liczbie cykli, program może być większy objętościowo. MSP430X
jest w pełni kompatybilny z poprzednimi mikrokontrolerami.
Właściwości CPU mikrokontrolerów MSP430X:
- architektura RISC
- architektura ortogonalna
- pełny dostęp do rejestrów w tym do licznika rozkazów (PC), rejestru
statusowego (SR)
i rejestru stosu (SP)
- jednocyklowe operacje na rejestrach
- duża liczba rejestrów zmniejszająca liczbę odwołań do pamięci
- 20-bitowa magistrala adresowa umożliwiająca bezpośredni dostęp do
całego obszaru pamięci bez stronicowania.
- 16-bitowa magistrala danych pozwalająca na bezpośrednie
operowanie na argumentach typu słowo.
- generator 6 najczęściej używanych stałych
- bezpośrednie przesyłanie danych pomiędzy pamięcią bez używania
rejestrów
pośredniczących.
- adresowanie bajtu, słowa, i 20 bitowego słowa adresowego.
Wektory przerwań zawierają 16-bitowe adresy wskazujące na niższą 64
KB pamięć. Oznacza to, że wszystkie programy obsługi przerwań muszą
się zaczynać w tym obszarze pamięci.
Podczas przerwań licznik rozkazów i rejestr statusowy są chowane na
stos tak jak na poniższym rysunku:
Gdy jest wykonywana instrukcja RETI odtwarzana jest pełna 20
bitowa zawartość licznika rozkazów. Umożliwia to powrót do
dowolnego miejsca w obszarze pamięci programu.
Licznik programu
PC może być adresowany każdą instrukcją i każdym trybem
adresowania:
MOV.W #LABEL,PC ;
skok do etykiety LABEL (dolny obszar
pamięci 64 KB)
MOVA #LABEL,PC ;
skok do etykiety LABEL (pamięć 1MB)
MOV.W LABEL,PC ; skok do adresu wskazanego w słowie LABEL ;
(64 KB)
MOV.W @R14,PC ; skok pośredni do adresu w R14 (dolny obszar
pamięci 64 KB)
ADDA #4,PC ;
przesunięcie o 2 słowa (1 MB memory)
Instrukcje BR i CALL zerują 4 najbardziej znaczące bity licznika
rozkazów. Stąd odnoszą się one tylko do dolnych 64 KB pamięci. Do
górnej części pamięci należy używać tylko rozkazów BRA i CALLA.
Rozkaz CALL chowa na stos 16 bitów PC, A rozkaz CALLA pełne 20
bitów
Rozkaz RET odtwarza 16 bitów, rozkaz RETA – 20 bitów
Rejestr stosu (SP)
Rejestr stosu jest 20 bitowym rejestrem używanym do przechowywania
adresów powrotu z podprogramów lub programów obsługi przerwań.
Rejestr stosu można stosować wszystkie instrukcje i sposoby
adresowania.
PUSHX.A
Rejestr Statusowy (SR)
CLR dst
> MOV R3,dst
INC dst > ADD 0(R3),dst
Rejestry ogólnego przeznaczenia R4 to R15
Operacje 8
bitowe
Operacje 16
bitowe
20 bitowe operacje
adresowe
MSP430 i MSP430X instrukcje
Instrukcje MSP430 są to instrukcje w liczbie 27 zaimplementowane w
jednostce centralnej MSP430. Instrukcje te mogą być używane w całym
zakresie 1 MB pamięci z wyjątkiem przypadków, gdy wymagany jest
zakres większy niż 16 bitów.
Instrukcje MSP430X są używane gdy adresowanie operandów lub
dane przekraczają zakres 16 bitowy.
Istnieją trzy możliwości wyboru między instrukcjami MSP430 a
MSP430X:
1. Używanie tylko instrukcji MSP430 z wyjątkiem CALLA i RETA. Może
być to realizowane przy spełnieniu poniższych reguł
- umieszczanie wszystkich danych, tablic itd. W dolnych 64 KB.
Wykorzystuje się wtedy tylko instrukcje MSP z 16 bitowym
adresowaniem danych.
- umieszczanie danych stałych podprogramów bezpośrednio za
podprogramem. Umożliwia to użycie adresowania symbolicznego z 16
bitowym indeksem do adresowania w zakresie +/- 32 KB.
2. Użycie tylko instrukcji MSP430X. Niedogodnościa tego sposobu jest
zmniejszenie prędkości działania programu związane z dodatkowymi
cyklami i zwiększenie objętości programu spowodowane koniecznością
rozszerzenia niektórych instrukcji o dodatkowe słowo.
3. Optymalne użycie obydwu typów instrukcji.
ADDX.A
dodawanie dwóch adresów 20 bitowych
ADDX[.W]
dodawanie dwóch słów
ADDX.B
dodawanie dwóch bitów
Syntax ADDX.A src,dst
ADDX src,dst ADDX.W src,dst
ADDX.B src,dst
// RAM memory.
//
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=1100-
20FF
-Z(DATA)CSTACK+_STACK_SIZE#
// ---------------------------------------------------------
// Read only memory.
//
// Information memory (FLASH)
// -------------------------------------------------------------------
-Z(CODE)INFO=1000-10FF
-Z(CODE)INFOA=1080-10FF
-Z(CODE)INFOB=1000-107F
// -----------------------------------------------
// Constant data.
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT=2100-FFBE
// -----------------------------------------------
// Code.
-Z(CODE)CSTART,ISR_CODE,IVCODE=2100-FFBE
-P(CODE)CODE=2100-FFBE,10000-1FFFF
// -----------------------------------------------
// Interrupt vector.
-Z(CODE)INTVEC=FFC0-FFFF
-Z(CODE)RESET=FFFE-FFFF
Kompilator C lokuje programy obsługi przerwań w segmencie
ISR_CODE. Segment ten musi być utworzony w obszarze pamięci
poniżej 64 KB poprzez odpowiednią deklarację w pliku sterującym
linker. Jeżeli przerwanie wystąpi gdy program jest realizowany w
pamięci powyżej 64 KB to funkcja obsługi przerwania powinna zawierać
polecenie
--save_reg20
Odpowiednie polecenie w asemblerze ma postać
__save_reg20