Motorola MC68HC11, mikrokontrolleri
[edellinen sivu]
[seuraava sivu]
[sisällysluetteloon]
[etusivulle]
MC68HC11, kutsumanimeltään HC11, on Motorolan 8-bittinen mikrokontrolleri.
Suoritusteholtaan se kuuluu tehokkaampien 8-bittisten joukkoon, joskin
CPU:n arkkitehtuurissa voidaan katsoa olevan toivomisen varaa, sillä
sen juuret ulottuvat 1974 julkaistuun Motorolan ensimmäiseen
mikroprosessoriin M6800.
CPU on vain pieni osa mikrokontrollerista. Mukana olevat muistit,
I/O-ominaisuudet ja muut toiminnot ratkaisevat usein sopivan
mikrokontrollerin valinnan. 68HC11-kontrollerista tuotetaan useita
erilaisia malleja erilaisilla ominaisuuksilla varustettuna.
Alla on esitettynä perusmallin "A8" rakenne.
MC68HC11-kontrollerista tuotettavat eri mallit
erotetaan toisistaan tuotenimen jälkeen tulevalla mallitunnuksella
(esim. A1 = MC68HC11A1 ja E1 = MC68HC11E1 ovat eri malleja). Kaikissa malleissa
on sama CPU, mutta I/O- ja muistiominaisuudet vaihtelevat.
Huom. HC- ja 11-merkintöjen välissä voi esiintyä kontrolleriin
sisällytettyä muistitekniikkaa kuvaava numero, esim. MC68HC711 sisältää
maski-ROM-muistin sijasta EPROM-muistia, mutta kyseessä on silti
HC11-perheen jäsen. EPROM-muistillisia prosessoreja valmistetaan
myös ikkunattomissa koteloissa (ns. OTP = one-time programmable,
kertakäyttöinen malli, jonka muistia ei voi tyhjentää).
Alla esitellyt A-, E-, D- ja F-sarjat muodostavat malliston
perustan. Näiden lisäksi on saatavana suuri joukko muitakin malleja.
Tarkempaa tietoa niistä löytyy Motorolan WWW-palvelimesta
[http://freeware.aus.sps.mot.com/amcu/home.html].
A-sarja
A-sarjan malli A8 on koko tuotelinjan "kantaisä". Muut mallit on
saatu tästä edelleenkehittämällä. Niinpä esim. erittäin täydellinen
HC11-perhettä kuvaava Motorolan
M68HC11 Reference Manual [Mot93]
käsitelee pääsääntöisesti vain A8-mallia. Muiden mallien poikkeamat
A8:sta on kerrottu niiden Technical data-kirjoissa.
MC68HC11A8 sisältää:
-
8 kilotavua ROM-muistia
-
256 tavua RAM-muistia
-
512 tavua EEPROM-muistia (ohjelmallisesti tavuittain purettavaa
ja uudelleenohjelmoitavaa ROM-muistia)
-
Asynkronisen sarjaliitännän (SCI, serial communications unit)
-
Synkronisen sarjaliitännän, joka on tarkoitettu ulkoisten
I/O-laitteiden liittämiseen (SPI, serial peripheral interface)
-
Monipuolisen ajastinsysteemin
-
Sisäisiä aputoimintoja, kuten vahtikoiran (COP watchdog)
-
8-kanavaisen 8-bittisen A/D-muuntimen
-
40 I/O-linjaa, joista osan käyttötarkoitus vaihtelee
riippuen kontorollerin toimintatilasta
-
MC68HC11 CPU:n, tietysti.
Muut A-sarjan prosessorit ovat A0 ja A1, joista edellisestä
puuttuu sekä ROM että EEPROM ja jälkimmäisestä ROM-muisti
(itse asiassa kumpikin kontrolleri on mallia A8, mutta EEPROM-pohjaisen
config-rekisterin kautta on ko. ominaisuuksien käyttö estetty).
Kaikkia malleja (A0,A1,A8) voidaan käyttää siten, että prosessorista
saadaan data- ja osoiteväylät ulos ja prosessori suorittaa ulkoiseen
muistipiiriin talletettua ohjelmaa.
E-sarja
E-sarja vastaa A-sarjaa muutamin täydennyksin:
-
RAM-muistia on 512 tavua (A-sarjassa vain 256 tavua)
-
Ajastinsysteemiä on parannettu hieman.
E-sarjan perusmalli on E9, 12 kilotavun ROM-malli. E0 ja E1 vastaavat
A0 ja A1-malleja ominaisuuksien eston osalta.
D-sarja
D-sarjan prosessorit ovat A-sarjasta ominaisuuksia karsimalla tehtyjä
"halpamalleja": A/D-muunnin ja EEPROM-muistit on poistettu ja RAM-muistia
vähennetty 192 tavuun. Perusmalli D3 sisältää vain 4 kilotavua ROM-muistia.
F1
F1-malli sisältää A-sarjaan verrattuna monia hyödyllisiä laajennuksia:
-
RAM-muistin määrää on kasvatettu yhteen kilotavuun
-
Kontrolleriin sisältyy chip select-generaattori,
jolta saadaan piirinvalintasignaalit kahdelle ulkoiselle
muistipiirille (esim. ulkoinen RAM ja ROM), sekä kahdelle
ulkoiselle I/O-laitteelle.
-
Kontrollerista saadaan osoite- ja datalinja multipleksoimattomina
ulos (muissa malleissa datalinjat ja 8 alinta osoitelinjaa on
multipleksoitu, jolloin tarvitaan ulkoinen latch-piiri niiden
erottamiseksi).
-
I/O-linjoja on enemmän.
68HC11-kontrollereja voidaan käyttää pääsääntöisesti vain kahdessa
ulkoisesti erilaisessa tilassa:
-
Expanded-tilassa CPU:n väylä saadaan kontrollerista
ulos. Väylään voidaan liittää muisti- ja I/O-piirejä.
-
Single chip-tilassa väylää ei saada kontrollerista
ulos, vaan expanded-tilassa väylänä käytettävät linjat
toimivat yleiskäyttöisinä I/O-linjoina.
Expanded/Single chip valinta tehdään kontrollerin ulkopuolelta
MODA-valintasignaalilla.
Kummastakin toimintatilasta on vielä kaksi variaatiota,
normaali- ja erikoistilat, joista edelliset on tarkoitettu sovelluksen
normaalia suorittamista varten ja jälkimmäiset lähinnä
laitteistotestien suorittamista varten. Haluttu variaatio
valitaan kontrollerin ulkopuolelta MODB-valintasignaalilla.
Valittu toimintatila variaatioineen ratkaisee myös ohjelman suorituksen
aloituspaikan seuraavasti:
-
Normal Expanded-tilassa ohjelman suoritus alkaa muistiavaruuden
loppuun, osoitteisiin 0xFFFE ja 0xFFFF talletetusta osoitteesta
(reset-vektorin osoittamasta paikasta).
Useimmiten tämä osoite sijaitsee ulkoisessa muistissa, mutta mikään
ei estä sen lukemista kontrollerin sisäisestä ROM-muistista,
jos sisäinen ROM on enabloitu.
-
Normal single chip-tilassa ohjelman suoritus alkaa myös
muistiavaruuden loppuun talletetusta osoitteesta. Tässä tapauksessa
muistin on kuitenkin oltava kontrollerin sisäistä.
-
Special Test-tilassa (=Special Expanded)
ohjelman suoritus alkaa osoitteisiin 0xBFFE ja 0xBFFF talletetusta
osoitteesta, joka useimmiten sijaitsee ulkoisessa muistissa.
-
Special bootstrap-tilassa (=Special single chip)
kotrolleri ottaa käyttöön pienen ROM-muistin, johon
on talletettu bootstrap-ohjelma ja aloittaa sen suorituksen.
Tämä ohjelma ottaa vastaan asynkronisesta sarjaliitännästä
tavuja, jotka se tallettaa kontrollerin RAM-muistiin ja hyppää
lopuksi sen alkuun.
Tämän toimintatilan avulla on mahdollista rakentaa laite, joka
käyttää kontrolleria single chip-tilassa siten, ettei
ohjelman tallettamiseen tarvita erillistä ohjelmointilaitetta.
Sen sijaan RAM-muistiin ensimmäiseksi ladattavana ohjelmana
voidaan käyttää ohjelmaa, jolla ohjelmoidaan varsinainen ohjelma
esim. kontrollerin EEPROM-muistiin.
Yksi edellämainituista toimintatiloista mahdollistaa yleensä myös
sisäiseen EEPROM-muistiin talletetun ohjelman käynnistämisen suoraan.
Toiminnon toteutus riippuu kuitenkin kontrollerin mallista.
Edellä kuvattujen, kontrollerin ulkopuolelta valittavien
toimintatilojen lisäksi HC11:ssa on muutamia kiinteästi ohjelmoitavia
tilavalintoja (mm. onko sisäinen EEPROM käytössä), joiden valinnat on
talletettu EEPROM-tyyppiseen konfiguraatiorekisteriin.
Kontrolleriin sisältyy myös lukuisia tilavalintoja, jotka ovat
ohjelmallisesti asetettavissa, mutta nollautuvat aina käynnistyksen
yhteydessä. Yleensä ne liittyvät eri alijärjestelmien toiminnan
ohjaamiseen.
68HC11:n eri mallit tarjoavat runsaan joukon erilaisia I/O-ominaisuuksia.
Kontrolleri sisältää joukon erilaisia alijärjestelmiä, kuten ajastimen ja
sarjaliitännän, joiden palvelut ovat käytettävissä I/O-linjojen kautta.
Pääsääntöisesti kaikkien I/O-linjojen kohdalla voidaan valita,
käytetäänkö linjaa yleiskäyttöisenä I/O-linjana (jolloin tila on
luettavissa tai kirjoitettavissa suoraan) vai alijärjestelmän ohjaamana.
Osalla linjoista on linjan suunta (in/out) määrättävissä
ohjelmallisesti, osalla se on määrätty kiinteästi olemaan vain toinen näistä.
Seuraavassa esitellään lyhyesti tärkeimmät alijärjestelmät.
Ajastin
Useimmissa perinteisissä mikrokontrollereissa on yksi tai useampia, esim. 3,
ohjelmoitavaa laskuria, joiden toiminta perustuu ulkoisten tai kontrollerin
sisäisten tapahtumien laskemiseen. Sellaisista
laskureista saadaan yleensä keskeytys haluttaessa,
kun laskurin arvo pyörähtää
ympäri, samalla kun laskuri aloittaa laskemisen uudestaa jostakin ennalta
määrätystä arvosta.
68HC11:n ajastin eroaa näistä perinteisistä toteutuksista oleellisesti.
Se perustuu yhteen vapaasti juoksevaan, 16-bittiseen laskuriin, sekä
viiteen vertailu- ja kolmeen kaappausrekisteriin (E- ja F-malleissa
voidaan käyttää myös neljä+neljä -moodia). Ajastimen käyttäminen
vaatii tyypillisesti jatkuvaa ohjelmallista tukea keskeytyksien kautta,
mutta toisaalta mahdollistaa asioita, joiden tekeminen perinteisellä
laskuritoteutuksella olisi mahdotonta.
Ajastimen sydän, vapaasti juokseva laskuri, nollataan kontrollerin
käynnistyessä. Sen jälkeen sen arvoon ei voi ohjelmasta käsin vaikuttaa.
Laskurin arvoa kasvatetaan yhdellä prosessorin kellon mukaisesti
(1,4,8 tai 16 kellojakson välein - laskuria ohjaa ohjelmoitava esijakaja).
Ajastimella saadaan tuotettua keskeytyksiä ja/tai ulkoisia tapahtumia,
esim. pulsseja, siihen sisältyvien vertailurekisterien avulla.
Tapahtuma suoritetaan, kun rekisterin ja laskurin arvot ovat samoja.
Tapahtumaa seuraava keskeys käynnistää tyypillisesti ohjelman, joka
lukee vertailurekisterin, lisää siihen sopivan määrän ja tallettaa takaisin
seuraavaa vertailua varten.
Kaappausrekisterien toiminta on päinvastainen: Ulkoisen tapahtuman
seurauksena laskurin arvo kopioidaan rekisteriin ja aktivoidaan keskeytys.
Keskeytyspalvelu saa siten tietoonsa tarkan hetken, jolloin tapahtuma
rekisteröitiin (keskeytyksen käsittelyyn menevästä ajasta huolimatta).
Ajastimeen sisältyy myös kolme sivutoimintoa:
-
Pulssilaskuri (pulse accumulator) on 8-bittinen laskuri, joka
vastaa osittain perinteisiä kontrollerien laskuritoteutuksia.
Sillä voidaan laskea pulssien määrää tai mitata niiden pituutta.
-
Periodinen keskeytys on tarkoitettu lähinnä säännölliseksi reaaliaikapalvelujen
aktivointimenetelmäksi
-
Watchdog mahdollistaa koko kontrollerin resetoinnin, ellei sen
vaatimia tarkistusoperaatioita suoriteta säännöllisesti (kaksi
kirjoitusoperaatiota sen kontrollirekisteriin tyypillisesti
enintään 15ms..2s kuluessa edellisestä kirjoituksesta).
SCI, asynkroninen sarjaportti
SCI sisältää normaalia asynkronista sarjaliikennettä varten
tarvittavat toiminnot, mukaanlukien kellogeneraattorin, joka
mahdollistaa yleisimpien siirtonopeuksien (esim. 9600 bps) generoimisen
yleisimmistä kidevaihtoehdoista (esim. 8 MHz).
SCI ei sisällä mitään ns. hienoja ominaisuuksia, kuten FIFO-puskureita
lähetystä ja vastaanottoa varten. Sen sijaan se tarjoaa ominaisuksia,
joista voi olla enemmänkin hyötyä sulautetuissa järjestelmissä:
SCI tukee esimerkiksi yksinkertaisen kontrolleriverkon (bus,
kaikki lähettäjät ja vastaanottajat kytketty toisiinsa) rakentamista
9-bittisen tiedonsiirron avulla. Käytännössä tämä tarkoittaa, että
vastaanotto voidaan sammuttaa, kunnes vastaanotetaan tavu, jonka
9. bitti on asetettu herättämään kaikki vastaanottajat.
Tavu voi silloin sisältää esim. seuraavan vastaanottajan osoitteen.
SPI, synkroninen sarjaportti
SPI, serial peripheral interface, on erittäin yksinkertainen
synkroninen liitäntä. Se koostuu lähinnä kahdesta 8-bittisestä
siirtorekisteristä, toinen lähetysta ja toinen vastaanottoa varten.
Suoraan SPI-liitäntään sopivia I/O- ja muistipiirejä on saatavissa.
Esim. useat A/D- ja D/A-muuntimet soveltuvat liitettäviksi siihen.
Liitäntää voidaan käyttää myös normaalien siirtorekisterien kanssa
I/O liitäntöjen laajentamiseen.
SPI-liitännän avulla on myös toteutettu pieniä kontrolleriverkkoja.
A/D-muunnin
A/D-muunnin sisältää 8 kappaletta 8-bittisiä kanavia.
Kanavat on yhdistetty kontrollerin porttiin E, jota voi lukea
myös digitaalisena input-porttina.
Muuntimen erotustarkkuus ei ole erityisen hyvä.
Rekisterit
CPU sisältää
-
Kaksi 8-bittistä akkua (A ja B), joita voidaan käyttää yhtenä
16-bittisenä akkuna (D, jossa A on enitenmerkitsevä osa)
-
Kaksi 16-bittistä indeksirekisteriä (X ja Y)
-
16-bittisen pino-osoittimen (SP)
-
16-bittisen ohjelmalaskurin (PC)
-
8-bittisen lippurerkisterin (CCR, jossa liput C (carry), V (overflow),
Z (zero), N (negative), I (I interrupt mask), H (half-carry),
X (X interrupt mask) ja S (stop disable))
Osoitusmuodot
CPU tukee kuutta eri osoitusmuotoa. Käskyn tyypistä riippuu, mitkä
osoitusmuodot ovat kunkin käskyn yhteydessä käytettävissä.
Osoitusmuodot ovat:
- Immediate (IMM), jossa käskyn tarvitsema argumentti
löytyy käskyä seuraavasta muistipaikasta, esim.
LDAA #2 ; Lataa akkuun A luku 2
- Extended (EXT), jossa käskyn tarvitsema argumentti
löytyy käskyä seuraavan osoitteen osoittamasta muistipaikasta, esim.
STAA $F000 ; Talleta akun A sisältö
; osoitteeseen F000 (hex)
- Direct (DIR), jossa käskyn tarvitsema argumentti
löytyy käskyä seuraavan osoitteen osoittamasta muistipaikasta.
Käskyyn liittyvän
osoitteen pituus on 8 bittiä, ylimmät kahdeksan ovat aina 0. Esim.
LDAA $C0 ; Lataa akun A sisältö
; osoitteesta 00C0 (hex)
(Huom. käytettävästä assembler-kääntäjästä riippuu, miten
direct- ja extended-muodot eroitetaan toisistaan. Osa kääntäjistä
päättää automaattisesti, osalle pitää erikseen ilmoittaa direct-muodon
käyttämisestä. Näillä osoitusmuodoilla ei ole muuta eroa kuin
että direct-osoitusta käyttävä käsky on lyhyempi
ja nopeampi suorittaa)
- Indexed (INDX, INDY), jossa käskyn tarvitsema argumentti
löytyy muistipaikasta, jonka osoite saadaan lisäämällä
indeksirekisterin sisältöön 8-bittinen etumerkitön vakio. Esim.
ADDA 12,X ; A = A + mem[X+12]
SUBB 0,Y ; B = B - mem[Y+0]
Huom. Jokainen käsky, jossa käytetään Y-indeksirekisteriä, on
yhden tavun vastaavaa X-rekisteriä käyttävää käskyä suurempi sekä
hieman hitaampi suorittaa. Kannattaa siis käyttää X-rekisteriä
aina kun se on mahdollista.
- Inherent (INH), jossa käsky ei tarvitse erillisiä argumentteja
(kaikki tarvittava tieto sisältyy käskykoodiin). Esim.
INX ; X = X + 1
PSHA ; "push A": mem[SP] = A; SP = SP - 1
- Relative (REL) on osoitusmuoto, jota ehdolliset hyppykäskyt
käyttävät. Siinä käskyyn liittyy 8-bittinen etumerkillinen vakio,
jota käytettään hypyn kohdeosoitteen laskentaan.
BMI LBL1 ; hyppää osoitteeseen LBL1, jos
; edellisen laskutoimituksen
; tulos negatiivinen (MI = minus)
Relative-muotoa käyttävät myös BRA (ehdoton lyhyt hyppy) ja BSR
(ehdoton, lyhyt aliohjelmakutsu).
Käskykanta
CPU:n käskykanta voidaan jakaa operandien,
käyttötarkoituksen ja mahdollisten osoitusmuotojen
perusteella kuuteen loogiseen osaan:
Tässä esitetty jako on vain yksi mahdollinen. Motorolan julkaisema
kirjallisuus ei yleensä jaa käskyjä ollenkaan, vaan esittää kaikki
käskyt aakkosjärjestyksessä.
Keskeytysten käsittely
Keskeytyksen tapahtuessa prosessori
-
tallettaa kaikki rekisterit pinoon
-
hakee keskeytysvektorin ja lataa sen ohjelmalaskuriin
-
asettaa keskeytystä vastaavan estobitin (I tai X)
CCR-rekisterissä, jos ko. keskeytys on estettävissä
Keskeytyksestä palaaminen tapahtuu RTI-käskyllä, joka lataa
kaikki rekisterit pinosta.
[edellinen sivu]
[seuraava sivu]
[sisällysluetteloon]
[etusivulle]
[versio 1.5, 1996/03/10 20:08:32]
[Lähetä palautetta Laurille]
Copyright © 1996 Lauri Aarnio.
All Rights Reserved.