http://vision.fe.uni-lj.si/classes/GSPV
GSPV (8)
HCS12, V/I in
vrata H,(P,J)
Stanislav Kovačič
Univerza v Ljubljani
Fakulteta za elektrotehniko
V/I prenosi V/I prenosi
Dve napravi, na primer: mikrokrmilnik z drugim mikrokrmilnikom, mikrokrmilnik s tipkovnico, mikrokrmilnik s stikalom, mikrokrmilnik z ventilom, ....
načeloma komunicirata na enega od dveh načinov: brez usklajevanja (“neusklajen” način) ali z usklajevanjem (“usklajen” način).
V/I – neusklajen način V/I – neusklajen način
Brez usklajevanja (“neusklajen” način): Prenašajo se samo podatki brez nadzornih signalov, to je
ena naprava enostavno postavi signale in druga jih odčita. Med napravama se ne prenašajo (nadzorni) signali,
kdaj naj ena naprava da podatek in kdaj, če sploh, naj
ga druga prevzame. Na primer: mikrokrmilnik odčita stanje stikala, ali mikrokrmilnik
prižge LED diodo (ni potrebe po usklajevanju).
Oddajna
naprava
Sprejemna
napravaPodatki
V/I – usklajen način V/I – usklajen način
Z usklajevanjem (angl. Hand Shaking): Prenos podatkov spremlja izmenjava nadzornih signalov,
načeloma takole:
1. Oddajna naprava zahteva od sprejemne naprave naj
se pripravi na prevzem podatka.
2. Sprejemna naprava javi pripravljenost na sprejem podatka.
3. Oddajna naprava pošlje podatek in javi prisotnost podatka.
4. Sprejemna naprava prevzame podatek in javi
prevzem podatka....
Obstaja več načinov usklajevanja, včasih jih imenujemo
tudi “delno” usklajen, (“polno”) usklajen in
“dvojno” usklajen....
V/I – usklajen način V/I – usklajen način
1. Oddajna naprava postavi podatek.
2. Oddajna naprava postavi nadzorni signal “podatek je prisoten”.
3. Sprejemna naprava zazna nadzorni signal in prevzame podatek.
Opomba:
Temu načinu bi lahko rekli tudi delno usklajen (Angl. Strobed I/O).
Oddajna
naprava
Sprejemna
naprava
Podatki1
2
3
V/I – usklajen način V/I – usklajen način
1. Oddajna naprava postavi podatek.
2. Oddajna naprava postavi nadzorni signal “podatek prisoten”.
3. Sprejemna naprava zazna nadzorni signal in prevzame podatek.
4. Sprejemna naprava javi prevzem podatka.
Opomba: to lahko (hkrati) pomeni zahtevo za pošiljanje (novega)
podatka oziroma pripravljenost na prevzem naslednjega podatka.
Oddajna
naprava
Sprejemna
naprava
Podatki1
2
3
4
V/I prenosi in CPE V/I prenosi in CPE
V/I prenos poteka načeloma na enega od naslednjih načinov: S posredovanjem procesorja (pod nadzorom programa):
Enostavno brez preverjanja stanja V/I. S preverjanjem stanja V/I vmesnika. Z zahtevo za prekinitev.
Brez posredovanja procesorja: Z neposrednim dostopom do pomnilnika (DMA).
V tem primeru opravi prenos (namesto procesorja)
krmilnik za neposreden dostop (o tem ne bomo govorili).
Vmes-
nik
Zuna-
nja
napra-
va
CPE
Pomnilnik
V/I V/I – brez preverjanja stanja– brez preverjanja stanja
Enostavno prevzamemo (beremo) ali postavimo (pišemo) V/I
sponke (signale) – to je torej neusklajen način.
.........
LDAA PortA ;beremo stanje na vhodu
......... Ta način je primeren, kadar sinhronizacija z drugo napravo
(npr. stikalom ali lučko) ni potrebna (o tem smo že govorili).
VmesnikZunanja naprava CPE
PodatekLDAA PortA
V/I V/I – s preverjanjem stanja– s preverjanjem stanja
Pred prenosom podatka, preverimo prisotnost podatka:
CAKAJ: LDAA PortStatus ;zanima nas stanje V/I
BITA #$80 ;je podatek prisoten (b7 =1)?
BEQ CAKAJ ;ne, čakaj podatek
; Ali bolj kompaktno
; CAKAJ: BRCLR PortStatus,#$80,CAKAJ
LDAA PortData ;da, prevzemi podatek Ta način je primeren, kadar je potrebna sinhronizacija z zunanjo
napravo – ko pride podatek, ga je potrebno prevzeti pred prihodom
naslednjega podatka, i.t.d.
VmesnikZunanja naprava CPE
Podatek
LDAA PortStatusStanje
LDAA PortA
V/I V/I – s preverjanjem stanja– s preverjanjem stanja
Preverjanje stanja – druga možnost
;
LDAA PortStatus ;zanima nas stanje V/I
BITA #$80 ;je podatek prisoten (b7 =1)?
BEQ NAPREJ ;ne, nadaljuj z delom
;Ali kar BRCLR PortStatus,#$80,NAPREJ
LDAA PortData ;da, prevzemi podatek
NAPREJ: .......... ;npr. preveri drugo napravo
Ta način je primeren, kadar imamo več V/I naprav, ki
jim strežemo ‘v zanki’ s predvidenim taktom.
V/I – s prekinitvijo V/I – s prekinitvijo
; --- poljuben program
....... ;ustrezno pripravimo V/I vmesnik
CLI ;omogočimo I maskirane zahteve
PROG: ....... ;kadarkoli lahko nastopi prekinitev
BRA PROG
; --- prekinitveni strežnik V/I
ISR: LDAA PortData ;prevzamem podatek
STAA Nekam ;nekaj naredim z njim in
RTI ;se vrnem v prekinjeni program
VmesnikZunanja naprava CPE
Podatek
Zahteva za
prekinitev
Stanje
LDAA PortA
HCS12 – PIMHCS12 – PIM (Port Integration Module)(Port Integration Module)
Sponke
(signali)
vrat P, H, J
lahko
služijo
tudi kot
prekinitveni
vhodi.
HCS12 – HCS12 – vrata P, H in Jvrata P, H in J
Vrata P, H in J so si v vlogi splošno namenskih vrat (GPIO)
enakovredna.
Lahko jih uporabljamo podobno, kot npr. vrata A in B,
ki smo jih že spoznali.
Omogočajo pa tudi proženje zahtev za prekinitev, kar
npr. vrata A in B ne omogočajo.
Sicer pa vrata (P,H,J) služijo oz. so prek njih dosegljivi
tudi (drugi) notranji periferni moduli: Vrata P: za PWM in SPI, Vrata H: za SPI, Vrata J: IIC in CAN.
HCS12HCS12––vrata H kot splošnonamenski V/Ivrata H kot splošnonamenski V/I
8 digitalnih vhodov ali izhodov, posamično programljivih za vhod
ali izhod s pomočjo smernega registra.
Vhodi z/brez zaključnega upora na napajanje/maso.
Polna ali zmanjšana gonilna moč izhodov.
Možnost proženja zahteve za prekinitev pri aktivnem prehodu
signala na kateremkoli od 8 vhodnih (v tem primeru prekinitvenih)
sponk.
HCS12 – HCS12 – vrata H – registri vrat vrata H – registri vrat
S stališča programerja zadostuje poznavanje V/I registrov in
njihovega pomena (pravzaprav to velja za vse V/I prenose). Registri vrat H spadajo k modulu PIM
Skica je izrezana iz dokumenta 9s12DP256BDGV2.pdf
HCS12 – HCS12 – vrata H – registri vrat vrata H – registri vrat
Naslovi registrov = Osnovni (začetni) naslov + Odmik Osnovni naslov modula PIM = $0240 Naslov registra PTH je $0240 + $20 = $0260 Naslov registra PTIH je $0240 + $21 = $0261 i.t.d. (Ta skica je v bistvu ponovitev prejšnje, izrezana iz dokumentacije PIM )
ODMIK POMEN
HCS12 – HCS12 – vrata H – vektor vrata H – vektor
Pri streženju prekinitvenih zahtev iz teh vrat pa moramo poznati
še naslov pripadajačega prekinitvenega vektorja.
Opomba: To je del tabele vektorjev (glej prejšnje predavanje)
HCS12 – HCS12 – vrata H: V/I registervrata H: V/I register
V primeru, da so sponke vrat programirane kot izhodne, bo
operacija branja vrnila vsebino tega registra. V nasprotnem primeru operacija branja vrne stanje sponk.
HCS12–HCS12–načelna skica sponke vratnačelna skica sponke vrat
V primeru, da so sponke vrat programirane kot izhodne, bo
operacija branja vrnila vsebino tega registra. V nasprotnem primeru operacija branja vrne stanje sponk.
Celica (bit) smernega registra
Celica (bit) V/I registra
HCS12 – HCS12 – vrata H: vhodni registervrata H: vhodni register
Branje tega registra vedno vrne stanje (vhodnih) sponk.
Na ta način se da ugotoviti tudi preobremenjenost ali kratek stik,
kadar so sponke programirane kot izhodne.
HCS12 – HCS12 – vrata H: smerni registervrata H: smerni register
Vsebina smernega registra izbere smer pripadajoče (istoležne)
sponke:
vrednost bita = 0 vhodna sponka
vrednost bita = 1 izhodna sponka Možna je poljubna kombinacija vhodnih/izhodnih sponk.
HCS12 – HCS12 – vrata H: register RDRHvrata H: register RDRH
Register za zmanšanje izhodne gonilne moči sponke na tretjino:
vrednost bita = 0 polna moč
vrednost bita = 1 zmanjšana moč
HCS12 – HCS12 – vrata H: register PERHvrata H: register PERH
Register za priklop zaključnega upora vhodne sponke:
vrednost bita = 0 upor odključen
vrednost bita = 1 upor priključen
HCS12 – HCS12 – vrata H: register PPSHvrata H: register PPSH
Izbira polaritete. Register ima dvojni pomen: Za zaključni upor:
vrednost bita = 0 upor na napajalno napetost
vrednost bita = 1 upor na maso Za proženje zahteve za prekinitev:
vrednost bita = 0 prehod navzdol
vrednost bita = 1 prehod navzgor
HCS12 – HCS12 – vrata H: register PIEHvrata H: register PIEH
Omogočanje zahtev za prekinitev na posameznih sponkah
vrednost bita = 0 prekinitev ni omogočena
vrednost bita = 1 prekinitev je omogočena
HCS12 – HCS12 – vrata H: register PIFHvrata H: register PIFH
Register zastavic:
vrednost bita = 0 ni zahteve
vrednost bita = 1 zahteva Stanje bita 1 je posledica aktivnega prehoda na pripradajočem
vhodu. Bit brišemo z vpisom enice.
HCS12 – HCS12 – vrata H – primer 1/3vrata H – primer 1/3
PimBase EQU $0240 ;Port Integration Module
PortHoffset EQU $0020 ;Odmik od PimBase za vrata H
PortHbase EQU PimBase+PortHoffset
PTH EQU PortHbase ;V/I register
PTIH Equ PortHbase+1 ;vhodni register
DDRH EQU PortHbase+2 ;smerni register
RDRH EQU PortHbase+3 ;zmanjsana gonilna moc
PERH EQU PortHbase+4 ;izbira zakljucnih uporov
PPSH EQU PortHbase+5 ;izbira prožile fronte
PIEH EQU PortHbase+6 ;omogočanje prekinitev
PIFH EQU PortHbase+7 ;zastavice prekinitev
;
PHIV EQU $FFCC ;vektor za vrata H
HCS12 – HCS12 – vrata H – primer 2/3vrata H – primer 2/3
; zacetna vzpostavitev --- poljubno zaporedje ukazov
;
.......
; sedaj priprava vrat H
CLRA
STAA DDRH ;vse sponke so vhodne
STAA PPSH ;aktiven prehod navzdol – za vse vhode
COMA
STAA PERH ;vklopimo zakljucne upore na napajanje
LDAA #$01
STAA PIEH ;omogočimo zahtevo za prekinitev na sponki PH0
CLI ;omogočimo prekinitve
.........
; poljubno zaporedje ukazov
BRA * ;čakamo na prekinitev
HCS12 – HCS12 – vrata H – primer 3/3vrata H – primer 3/3
; --- strežnik prekinitve
;
ISR: ......... ;
LDAA PIFH ;
ANDA #$01 ;zahteva na PH0?
BEQ ISR0 ;ne
STAA PIFH ;da, brišemo zahtevo
......... ;npr. prevzamemo podatek, i.t.d.
ISR0: RTI
; --- vektor prekinitve
ORG PHIV ;definicija vektorja vrat H
FDB ISR
HCS12 – HCS12 – vrata H – programcek 1/3vrata H – programcek 1/3
;********************************************************************************************************
;* Preprost primer zehteve za prekinitev na vratih H, sponka PH0. Ob vsaki zahtevi za prekinitev
;* spremenimo stanje vrat A, kamor je prikljucen 7 segmentni LED element, tako da se pikica izmenicno
;*priziga in ugasa. Program dela pod D-Bug12
XDEF Entry
ABSENTRY Entry ;vstopna tocka
; definicije konstant
RamStart EQU $1000 ;Zacetek pomnilnika RAM
RamEnd EQU $2000 ;Konec pomnilnika RAM
RomStart EQU $2000 ;Zacetek pomnilnika za program
; Vrata H
PimBase EQU $0240 ;zacetek naslovov modula PIM
PortOff EQU $0020 ;zacetek naslovov vrat H
PortBase EQU PimBase+PortOff
PTH EQU PortBase ;V/I register
PTIH EQU PortBase+1 ;V register
DDRH EQU PortBase+2 ;smerni register
RDRH EQU PortBase+3 ;zmanjsanje gonilne moci
PERH EQU PortBase+4 ;vklop uporov
PPSH EQU PortBase+5 ;izbira prozenja
PIEH EQU PortBase+6 ;omogocanje prekinitev
PIFH EQU PortBase+7 ;zastavice
PortHvect EQU $3e4c ;Pomni, to je d-bug12 psevdo vektor
HCS12 – HCS12 – vrata H – programcek 2/3vrata H – programcek 2/3
; vrata A
PORTA EQU $0000
DDRA EQU $0002
; --- podatkovni del in sklad
ORG RamStart
ds.b $100
Sklad: equ *
; --- Program
ORG RomStart
Entry:
lds #Sklad ;tu bo zacetek sklada
jsr InitPortA ;priprava vrat A
JSR InitH ;priprava vrat H
CLI ;omogocimo prekinitve
loop:
BRA loop ;neskonca zanka
; --- priprava vrat A
InitPortA:
ldaa #$FF
staa DDRA
ldaa #$7f ;na vratih je 7-segmentni LED,
staa PORTA ;prizgemo piko
rts
HCS12 – HCS12 – vrata H – programcek 3/3vrata H – programcek 3/3
; --- priprava vrat H
InitH: clra
staa DDRH ;vhodi
staa PPSH ;obcutljivost na zadnji rob
ldaa #$FF
staa PERH ;vkljucimo upore
ldaa #$01
staa PIEH ;omogocimo prekinitev na PH0
ldaa #$FF
staa PIFH ;brisemo morebitne postavljene zastavice
rts
; --- prekinitveni streznik zahteve za prekinitev na vratih H
IsrH: LDAA #$ff ;brisemo kar vse zastavice
STAA PIFH
ldaa PORTA
eora #$80
staa PORTA ;spremenimo LED prikaz
rti
; --- Vektor vrat H
ORG PortHvect
FDB IsrH