Memória szervezés
A mikrovezérlő teljes címezhető tartománya 0000h-től FFFFh-ig terjed (64 KB). Minden erőforrást memóriába leképezve kezel. A memória térkép az alábbi:
4.2. ábra: memória térkép.
A belső memória busz 16 illetve 8 bites. A szavas (16 bites) modulok a 16 bites buszhoz, míg a bytos ( 8 bites) modulok a 8 bites buszhoz csatlakoznak. Az MSP430E325 típus 16 Kbyte EPROM és 512 byte RAM memóriát, az MSP430E337 pedig 32 Kbyte EPROM és 1024 byte RAM memóriát tartalmaz.
CPU
A 16 bites CPU 16 általános célú regiszterrel rendelkezik, R0tól -R05-ig. A regiszterek címek és adatok tárolására szolgálnak. Szegmentálás nélkül 64kB memória címzését teszik lehetővé. Az R0, R1, R2 és R3 regiszterek speciális célúak, amint az 5.1. táblázatban látható.
5.1. ábra: CPU regiszterek
PC: Utasítás számláló. 16 bites regiszter, amely a következő utasítás címét tartalmazza. Két címzési módban a következő szó tartalmát felhasználva állítja elő a címet (Közvetlen és szimbólikus módban).
SP stack pointer: a stack memória címregisztere. PUSH és POP utasítások automatikusan kezelik. Megszakításkor az utasítás számlálón kívül a státusz regiszter is a stack memóriába kerül.
SR Státusz regiszter: A CPU állapot bitjeit tartalmazza.
C: átvitel flag
Z: zérus flag
N: negatív flag
GIE: általános megszakítás tiltás bit
CPUOFF: CPU off állapot bit
OSCOFF: oszcillátor off bit
SCG0,SCG1: a rendszer óragenerátor állapot vezérlő bitek, melyek a processzor állapotát is befolyásolják.
V: túlcsordulás flag bit.
A flag biteket az utasítások módosítják, részletes információk a mikrovezérlő kézikönyvében találhatók.
Konstans generátor regiszterek
A leggyakrabban használt konstansok generálhatók az R2 és R3 regiszterekkel, anélkül, hogy ehhez az utasításban egy újabb 16 bites szót kellene felhasználni. A konstansok értékeit az As forrás cím bitek határozzák meg, amint az 5.2. táblátazban látható.
5.2. táblázat: konstans generálás.
Ennek előnyei a következők:
nem szükségesek speciális utasítások,
a 7 konstans nem igényel plusz szavakat,
rövidebb utasítás végrehajtási ciklus.
A konstans generátorok használata lehetővé teszi számos utasítás emulálását, így a RISC ( redukált utasítás készletű gép) jelleg mellett a CPU CISC ( komplex utasítás készletű gép) gépekre jellemző teljes utasítás készlettel rendelkezik. Így összesen 27 CPU alap utasítás elegendő. A megértést segíti az utasítások listája, ahol külön jelöltük az emulált utasításokat, egy külön táblázatban pedig az emuláció módja is szerepel.
Címzési módok
7 címzési mód létezik a forrás operandus és négy a cél operandus megcímzéséhez, ahogy a következő táblázatban összefoglalva látható:
Utasításkészlet
A MSP430 CPU architektúra fejlesztésénél a fő szempontoknak a redukált utasítás készletet és a transzparens utasítás formátumot tekintették . Vannak alap utasítások melyeket a hardver valósít meg, és emulált utasítások, amelyeket a hardver segítségével hatékonyan emulálnak. A emulált utasítás végrehajtásához alap utasítást és a beépített konstans generátorokat, CG1-et és CG2-t használja. Az alábbiakban az alap utasításokat és az emulált utasításokat is bemutatják. Az emulált utasításokat példákkal illusztráljuk.
Az utasítás a program memóriában 1 - 3 szót igényel, attól függően, hogy a címzés mód kombináció milyen. Minden utasítás minimum egy szót (két byte) használ a program memóriában. Az indexelt, szimbolikus, abszolút és közvetlen módok egy további szót foglalnak le. E négy címzési mód lehetséges a forrás operandusok számára. Az indexelt, szimbolikus és abszolút mód használható a cél operandushoz. A forrás és cél operandus kombinációktól függően egy-három szavas lehet az utasítás.
Utasítás készlet
Státusz bitek
V N Z C
* ADC[.W]; ADC.B dst dst + C -> dst * * * *
ADD[.W]; ADD.B src,dst src + dst -> dst * * * *
ADDC[.W]; ADDC.B src,dst src + dst + C -> dst * * * *
AND[.W]; AND.B src,dst src .and. dst -> dst 0 * * *
BIC[.W]; BIC.B src,dst .not.src .and. dst -> dst - - - -
BIS[.W]; BIS.B src,dst src .or. dst -> dst - - - -
BIT[.W]; BIT.B src,dst src .and. dst 0 * * *
* BR dst Branch to ....... - - - -
CALL dst PC+2 -> stack, dst -> PC - - - -
* CLR[.W]; CLR.B dst Clear cél - - - -
* CLRC Clear carry bit - - - 0
* CLRN Clear negative bit - 0 - -
* CLRZ Clear zero bit - - 0 -
CMP[.W];CMP.B src,dst dst - src * * * *
* DADC[.W]; DADC.B dst dst + C -> dst (decimal) * * * *
DADD[.W]; DADD.B src,dst src + dst + C -> dst (decimal) * * * *
* DEC[.W]; DEC.B dst dst - 1 -> dst * * * *
* DECD[.W]; DECD.B dst dst - 2 -> dst * * * *
* DINT Disable interrupt - - - -
* EINT Enable interrupt - - - -
* INC[.W]; INC.B dst Increment cél,
dst +1 -> dst * * * *
* INCD[.W]; INCD.B dst Dupla-Increment cél,
dst+2->dst * * * *
* INV[.W]; INV.B dst Invert cél * * * *
JC/JHS Label Ugrás to Label if Carry-bit is set - - - -
JEQ/JZ Label Ugrás to Label if Zero-bit is set - - - -
JGE Label Ugrás to Label if (N .XOR. V) = 0 - - - -
JL Label Ugrás to Label if (N .XOR. V) = 1 - - - -
JMP Label Ugrás to Label unfeltételesly - - - -
JN Label Ugrás to Label if Negative-bit - - - -
is set
JNC/JLO Label Ugrás to Label if Carry-bit is reset - - - -
JNE/JNZ Label Ugrás to Label if Zero-bit is reset - - - -
Státusz bitek
V N Z C
MOV[.W]; MOV.B src,dst src -> dst - - - -
* NOP No művelet - - - -
* POP[.W]; POP.B dst Item from stack, SP+2 SP - - - -
PUSH[.W]; PUSH.B src SP - 2 SP, src @SP - - - -
RETI Return from interrupt * * * *
TOS SR, SP + 2 SP
TOS PC, SP + 2 SZP
* RET Return from subroutine - - - -
TOS PC, SP + 2 SP
* RLA[.W]; RLA.B dst Rotate left arithmetically * * * *
* RLC[.W]; RLC.B dst Rotate left through carry * * * *
RRA[.W]; RRA.B dst MSB MSB ....LSB C 0 * * *
RRC[.W]; RRC.B dst C MSB .........LSB C * * * *
* SBC[.W]; SBC.B dst Subtract carry from cél * * * *
* SETC Set carry bit - - - 1
* SETN Set negative bit - 1 - -
* SETZ Set zero bit - - 1 -
SUB[.W]; SUB.B src,dst dst + .not.src + 1 dst * * * *
SUBC[.W]; SUBC.B src,dst dst + .not.src + C dst * * * *
SWPB dst swap bytes - - - -
SXT dst Bit7 Bit8 ........ Bit15 0 * * *
* TST[.W]; TST.B dst Test cél * * * *
XOR[.W]; XOR.B src,dst src .xor. dst dst * * * *
Megjegyzés:
A * jelű utasítások emulált utasítások.
Utasítás Formátumok
Két operandusú utasítások)
A két operandusú utasítás formátumok négy mezőből állnak, a 16 bites kódszó az alábbi:
műveleti kód mező 4 bit [OP-Kód]
forrás mező 6 bit [forrásregiszter + AS]
byte művelet azonosító 1 bit [BW]
cél mező 5 bit [dest. regiszter + Ad]
A forrás mező a két címzés bitből (As) és a 4 bites regiszter azonosítóból áll (0....15); a cél mezőt egy címzés bit (Ad) és a 4 bites regiszter cím (0....15) alkotja.
A byte azonosító B/W jelöli, hogy az utasítás byte-ra (B/W=1) vagy szóra (B/W=0) vonatkozik.
Egye operandusú utasítások)
Az egy operandusú utasítás formátum az alábbi mezőkből áll:
műveleti kód mező 9 bit A legfelső 4 helyiérték: 0001
byte művelet azonosító 1 bit [BW]
cél mező 6 bit [cél regiszter + Ad]
A cél mező két címzés bitből és a 4 bites regiszter azonosítóból áll (0....15). A cél mező bit pozíciói azonosak, mint a két operandusú utasítások esetén.
A byte azonosító B/W jelöli, hogy az utasítás byte-ra, (B/W=1) vagy szóra vonatkozik (B/W=0).
Feltételes és feltételnélküli ugró utasítások
A feltételes ugró utasítások két mezőből állnak:
műveleti kód (OP-Kód) mező 6 bit
ugrás offset mező 10 bit
A műveleti kód mező a 3 bites műveleti kódból és a 3 bites feltétel kódból áll.
A feltételes ugrás –511 és +512 szavas ugrást tesz lehetővé a PC aktuális értékéhez viszonyítva. Az assembler kiszámítja az előjeles offsetet és beilleszti a műveleti kódba.
Megjegyzés: a feltételes és feltétel nélküli ugrások nem hatnak a státusz bitekre.
A feltétel teljesülése esetén a PC értéke a következő lesz:
PCnew=PCold + 2 + 2*offset.
Ha a feltétel nem teljesül, a program a következő utasítással folytatódik.
Emulált utasítások
A következő utasítások emulált utasítások, amelyeket a redukált utasítás készlettel hajt végre, a végrehajtás pótlólagos ROM szavakat nem igényel. Az assembler felismeri az emulált utasítások mnemonikus kódját és helyettesíti a megfelelő alap utasítással. Az utasítások emulációja az R2 ésR3 konstans generátorok tartalmának segítségével történik. Az R2(CG1) regiszter a 2 és 4 közvetlen konstansokat, az R3(CG2) regiszter a -1 vagy 0FFFFh, 0, +1 és +2 konstansokat tartalmazza, az As címzés bitek értékétől függően. Az As biteket az assembler állítja be.
Az emulált utasítások összefoglalása
Mnemonikus kód leírás Státuszbitek Emuláció
V N Z C
Aritmetikai utasítások
ADC[.W] dst Add carry to destinationl * * * * ADDC #0,dst
ADC.B dst Add carry to dest * * * * ADDC.B #0,dst
DADC[.W] dst Add carry decimal to dest. * * * * DADD #0,dst
DADC.B dst Add carry decimal to dest. * * * * DADD.B #0,dst
DEC[.W] dst Decrement destinationl * * * * SUB #1,dst
DEC.B dst Decrement dest. * * * * SUB.B #1,dst
DECD[.W] dst Double-Decrement dest. * * * * SUB #2,dst
DECD.B dst Double-Decrement dest. * * * * SUB.B #2,dst
INC[.W] dst Increment dest. * * * * ADD #1,dst
INC.B dst Increment dest. * * * * ADD.B #1,dst
INCD[.W] dst Increment dest. * * * * ADD #2,dst
INCD.B dst Increment dest. * * * * ADD.B #2,dst
SBC[.W] dst Subtract carry from dest. * * * * SUBC #0,dst
SBC.B dst Subtract carry from dest. * * * * SUBC.B #0,dst
Logikai utasítások
INV[.W] dst Invert dest. * * * * XOR#0FFFFh,dst
INV.B dst Invert dest. * * * * XOR.B#0FFFFh,d
RLA[.W] dst Rotate left arithmetically * * * * ADD dst,dst
RLA.B dst Rotate left arithmetically * * * * ADD.B dst,dst
RLC[.W] dst Rotate left through carry * * * * ADDC dst,dst
RLC.B dst Rotate left through carry * * * * ADDC.B dst,dst
Adatkezelő utasítások
CLR[.W] Clear destination - - - - MOV #0,dst
CLR.B Clear dest. - - - - MOV.B #0,dst
CLRC Clear carry bit - - - 0 BIC #1,SR
CLRN Clear negative bit - 0 - - BIC #4,SR
CLRZ Clear zero bit - - 0 - BIC #2,SR
POP dst Item from stack - - - - MOV @SP+,dst
SETC Set carry bit - - - 1 BIS #1,SR
SETN Set negative bit - 1 - - BIS #4,SR
SETZ Set zero bit - - 1 - BIS #2,SR
TST[.W] dst Test dest. 0 * * * CMP #0,dst
TST.B dst Test cél 0 * * * CMP.B #0,dst
Vezérlés átadó és vezérlő utasítások
BR dst Branch to ....... - - - - MOV dst,PC
DINT Disable interrupt - - - - BIC #8,SR
EINT Enable interrupt - - - - BIS #8,SR
NOP No operation - - - - MOV #0h,#0h
RET Return from subroutine - - - - MOV @SP+,PC
Hardver szorzó egység
A hardver szorzó 16 bites periféria modul, nincs a CPU-ba integrálva. Az utasítás készlet nem tartalmaz szorzó utasítást, de a szorzás nem igényel pótlólagos ciklusokat. Az operandusokat a szorzandó regiszterekbe kell tölteni, és az eredmény közvetlenül rendelkezésre áll. 16x16, 8x16, 16x8 és 8x8 bites szorzások lehetségesek. A szorzó elhelyezkedése a mikrovezérlő struktúrájában a 6.1. ábrán látható.
6.1. ábra: a hardver szorzó csatlakozása a belső busz rendszerhez.
A hardver szorzó regiszterei az alábbiak:
6.2. ábra: a hardver szorzó regiszterei.
OP1 és OP2 az összeszorzandó értékeket tartalmazza, az eredmény a RESLO ( alsó 16 bit) és RESHI ( felső 16 bit) tartalmazza. A SumExt az eredmény kiterjesztése, előjelet és túlcsordulást tartalmaz.
Rendszer óra generátor és kristály oszcillátor
A rendszer óragenerátor olcsó és kis fogyasztású. A külső komponens egy általánosan használt 32768 Hz-es kristály (ACLK, 16.1. ábra). Az óragenerátor ezt felszorozva állíja elő a belső működéshez szükséges nagyfrekvenciás jelet ( MCLK).
16.1. ábra: kvarc oszcillátor
Az oszcillátor működését és a mikrovezérlő üzemmódjait az SR státusz regiszter vezérlő bitjei határozzák meg, amint az alábbi táblázatban összefoglalva látható.
A rendszer oszcillátor az alábbi komponensekből áll:
Kristály oszcillátor, DC generátor: DCO (digitálisan vezérelt oszcillátor), FLL (Frekvencia zárt hurok. Az oszcillátor működési módjai egyben a mikrovezérlő működési módjait is meghatározzák.