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.