NUMARATORUL PROGRAMABIL Z80-CTC
Descriere

Z80 este complect static,prin urmare utilizatorul poate stopa pe fiecare ciclu,procesorul pentru depanari sau verificari. Introducerea regimului pas cu pas se face foarte simplu prin oprirea semnalului de tact . Microprocesorul Z80 necesita o singura linie de tact,o singura tensiune, iar cele 3 magistrale apar distinct in exterior. Magistrala de control este subdivizata in linii de control ale sistemului si linii de control ale procesorului. Liniile de control ale sistemului sint:
M1(NON MACHINE CYCLE1) -generat de procesor prin care se indicaa faptul ca ciclul masina in desfasurare este un ciclu de aducere a unei instructiuni.
MREQ(MEMORY REQUEST) -semnal generat de procesor prin care see valideaza adresa de pe magistrala de adrese pentru o operatie de citire/scriere a memoriei
IOREQ(INPUT/OUPUT REQUEST) -semnal prin care se valideaza adresa coorespunzatoare unui dispozitiv de I/E pentru o operatie de intrare/iesire.Tot acest semnal este folosit pe durata primului ciclu masina M1 pentru a confirma recunoasterea unei intreruperi
/RD(NON READ) si /WR(NON WRITE) -indica faptul ca procesorul este in staarea de a citi respectiv de a depune o data din si in memorie sau dispozitive I/E.
RFSH(REFRESH) -semnal prin care se confirma faptul ca pe primele 7 linii ale magistralei de adrese se afla adresa de refresare a memoriei dinamice
/WAIT(WAIT REQUEST) -semnal extern emis de o memorie cu timppul de acces mare sau de un dispozitiv de I/E lent pentru sincronizarea acestora cu functionarea procesorului. Procesorul va trece in starea de asteptare atit timp cit linia /WAIT este validata INT(INTERUPT REQUEST) -este o cerere a unui dispozitiv de I/E pentru o tratare prioritara. Aceasta cerere este onorata numai la sfirsitul ciclului in curs,in conditiile in care bistabilul de acceptare al intreruperilor(ENABLE FLIP FLOP), controlat de soft este activ.
NMI(NON MASCABLE INTERUPT REQUEST) -este o cerere de intrerupere de priorittate mai ridicata si care nu poate fi mascata de bistabilul de acceptare al intreruperilor controlat soft. Aceasta cerere forteaza in PC(Program Counter) adresa 0066 hexa de unde va incepe subrutina de tratare a acestei intreruperi.
/RESET -este un semnal extern folosit pentru innitializarea procesorului si sistemului.


SEMNALELE DE COMANDA A INTRERUPERILOR


IEI,INTERRUPT ENABLE IN ,intrare validare intreruperi.Intrare activa pe '1' ;activa semnifica inexistenta unor cereri de intrerupere prioritare in curs de tratare de catre UC-Z80
IEO,INTERRUPT ENABLE OUT ,iesire validare intreruperi.Iesire activa pe '1' numai cind IEI = 1 si UC-Z80 nu trateaza nici o intrerupere generata de vreunul din canalele de numarare/masurare ale circuitului
/INT,INTERRUPT REQUEST ,cerere intrerupere.Iesire de tip drena-in-gol activa pe '0'.Se activeaza cind oricare din canalele CTC caruia i s-a validat prin program generarea intreruperii trece prin zero
/RESET ,initializare.Intrare activa pe '0' utilizata pentru initializarea hardware a circuitului.Acest semnal opreste numararea in toate canalele,invalideaza generarea intreruperilor,trece iesirile ZC/TO si /INT in starea inactiva,face IEO = IEI si trece circuitele de comanda a magistralei de date in stare de impedanta mare.


SEMNALE DE I/E PE CANALE


CLK/TRG_0..CLK/TRG_3 External Clock/Timer Trigger ,ceas extern/declansare externa . Intrari active pe front pozitiv sau negativ,la alegere prin software de catre utilizator.Cele patru conexiuni externe corespund celor patru canale a CTC.
In modul numarare fiecare front activ al acestor intrari decrementeaza numaratorul-decrementor.
In modul de masurare a timpului frontul activ este utilizat pentru inceperea masurarii.

ZC/TO_0...ZC/TO_2 Zero Count/Timeout ,trecere prin zero/terminare temporizare.Iesire activa pe '0'.
Cele trei conexiuni corespund canalelor 0..2,canalul al treilea neavind o astfel de iesire datorita limitelor impuse de capsula cu 28 de conexiuni externe.
In ambele moduri la aceste iesiri sint generate impulsuri pozitive cind numaratoarele-decrementoare trec prin zero.



DIAGRAME DE TIMP


CICLU DE SCRIERE UC




Cuvintul de comanda ,vectorul de intrerupere sau constanta de timp se transmit conform diagramei de timp.
CTC-Z80 nu are o intrare separata pentru comanda de scriere :acest semnal este generat intern daca intrarea RD e '1' pe durata starii T_1.Intimpul starii T_2 /IORQ si /CE sint pe '0' iar /M1 pe '1' pentru a distinge ciclul de scriere de ciclul de achitare a intreruperii.Valoarea intrarilor CS_0 si CS_1 selecteaza canalul unde se vor scrie datele prezente pe magistrala,cu frontul pozitiv al ceasului din starea T_3.



CICLU DE CITIRE UC


Ciclul de citire ,a carui desfasurare in timp este prezentata ,se utilizeaza pentru citirea continutului numaratorului-decrementor,citire efectuata fara perturbarea decrementarii.
In timpul starii T_2,UC-Z80 initiaza un ciclu de citire activind intrarile /RD,/IORQ si /CE ale CTC-ului.
Valoarea intrarilor CS_0 si CS_1 selecteaza canalul,care va plasa,cu frontul pozitiv al ceasului din T_3, valoarea numaratorului-decrementor pe magistrala de date a sistemului.



MODUL NUMARATOR


In acest mod de lucru decrementarea numaratorului-decrementor se face cu fiecare front activ al intrarii CLK/TRG(aici frontul pozitiv) sincron cu ceasul FI.
Pentru ca decrementarea sa apara pe primul front pozitiv al lui FI,care urmeaza frontului activ al lui CLK/TRG,trebuie respectat un timp de set-up ,de stabilizare ,precizat de catalog ,de exemplu 300 ns pentru versiunea CTC-Z80 fabricata de Zilog (frecventa ceasului FI de 2.5 Mhz).
Daca nu se respecta acest timp,numararea va fi intirziata cu o perioada a ceasului FI.
De asemenea ,impulsul de declansare pozitiv ,este necesar sa aiba o durata minima ,iar perioada semnalului CLK/TRG sa fie cel putin de doua ori mai mare decit perioada ceasului FI.
Iesirea ZC/TO corespunzatoare va fi activata la trecerea pe zero a numaratorului -decrementor.


MODUL TEMPORIZATOR


Masurarea timpului se declanseaza cu al doilea front pozitiv al ceasului FI ce urmeaza frontului activ al intrarii CLK/TRG ,aici pozitiv.
Ca si mai sus,pentru respectarea acestei secvente de timp vor trebui indeplinite conditiile unui timp de set-up intre frontul activ al intrarii CLK/TRG si primul front pozitiv al lui FI si,de asemenea ,cea a unei durate minime a impulsului de declansare a masurarii timpului Daca frontul activ al intrarii CLK/TRG apare mai tirziu decit timpul de set-up ,initierea numararii va fi intirziata cu o perioada de ceas Precizam ca masurarea timpului poate fi declansata si automat fara utilizarea conexiunii externe CLK/TRG,prin transmiterea unei anumite configuratii a cuvintului de comanda.


PROGRAMAREA CIRCUITULUI CTC-Z80

Pentru a programa circuitul CTC-Z80 se transmite cuvintul de comanda,constanta de numarare si,daca se doreste utilizarea intreruperilor,vectorul de intrerupere .Cuvintul de comanda este folosit pentru selectarea modului de lucru si a altor parametri ce vor caracteriza functionarea canalului programat.
Constanta de timp ,o valoare binara cuprinsa in intervalul(1,256) este intotdeauna precedata de un cuvint de comanda.Actualizarea cuvintului de comanda si/sau a constantei de timp se poate face in orice moment pe timpul numararii, cu observatia ca noua constanta de timp va fi incarcata in numaratorul-decrementor ulterior ,la trecerea acestuia prin zero.
Daca cel putin unul din canalele de numarare ale circuitului CTC-Z80 are intreruperile validate,bitul 7 al cuvintului de comanda este '1',procedura de programare va cuprinde si transmiterea vectorului de intrerupere.
Este necesara scrierea unui singur vector pentru intregul circuit deoarece logica de comanda a intreruperilor modifica in mod automat vectorul plasat pe magistrala de catre CTC,in ciclul de achitare,precizind canalul care solicita intreruperea.
Selectia canalului programat se face cu ajutorul intrarilor CS0 si CS1.


CUVINTUL DE COMANDA

Pentru a incarca un cuvint de comanda ,unitatea centrala executa o instructiune de I/E la adresa corespunzatoare canalului ales.Octetul transmis va fi interpretat drept cuvint de comanda si inscris in registrul de comanda al canalului respectiv daca bitul 0 ,cel mai putin semnificativ este '1'.Cu ajutorul celorlalti sapte biti se selecteaza modul de lucru si parametrii de functionare .
Formatul cuvintului de comanda este urmatorul: D7 -validare intreruperi D6 -Mod de lucru D5 -Factor de prescalare D4 -Front activ D3 -Mod de declansare D2 -Urmeaza constanta de timp D1 -Initializare D0 -1

D7 validare intreruperi Daca D7=1 ,canalul respectiv este validat sa genereze o intrerupere la fiecare trecere prin zero a numaratorului-decrementor.In acesta situatie,se incarca in CTC si vectorul de intrerupere.Intreruperile pot fi validate in oricare din cele doua moduri de lucru.Daca se trimite un cuvint de comanda de actualizare la un canal in functionare ,cuvint avind D7=1,validarea intreruperilor nu va fi retroactiva in raport cu o posibila trecere anterioara a numaratorului prin zero.D7=0 inseamna invalidarea intreruperilor ,stergerea intreruperii in asteptare pe canalul respectiv.Ca si la PIO poate aparea un asincronism intre generarea intreruperii de catre CTC si invalidarea ei de catre CTC si invalidarea ei de catre UC ,situatie care,datorita citirii unui vector fals de intrerupere,ar conduce la o eroare de program.Pentru a rezolva aceasta problema se poate utiliza urmatoarea secventa de program:


...
LD A,01H : Incarcare A cu comanda de invalidare
DI : Invalidare intreruperi UC
OUT (CTC),A: Invalidare intreruperi CTC
EI : Validare inreruperi UC
...


D6 mod de lucru Daca D0=1 este selectat modul numarator in care numaratorul-decrementor al canalului se decrementeaza la fiecare front activ al intrarii CLK/TRG respective .In acest mod nu se utilizeaza numaratorul de prescalare.Cind D6=0 se selecteaza modul temporizator in care numaratorul-decrementor este actionat de iesirea numaratorului de prescalare
D5 factor de prescalare Bitul D5,definit numai pentru modul temporizator,precizeaza cu cit trebuie sa se divida frecventa ceasului FI: cu 16,D5=0,sau cu 256,D5=1.
D4 front activ Acest bit stabileste care din fronturile impulsului CLK/TRG va fi utilizat pentru lansarea masurarii timpului in modul temporizator,respectiv pentru decrementare in modul numarator.Frontul pozitiv este selectat cu D4=1 iar cel negativ cu D4=0.
O reprogramare a frontului activ pe durata numararii echivaleaza cu un front activ,conducind la decrementarea numaratorului-decrementor.De asemenea,o schimbare a frontului activ,printr-un cuvint de comanda,printr-un cuvint de comanda de actualizare,in timp ce canalul asteapta sa inceapa masurarea timpului ,conduce la startarea numaratoarelor,echivalind deci cu un impuls de declansare
D3 mod de declansare Definit numai pentru modul temporizator,acest bit specifica modul de declansare ,de incepere a masurarii timpului:D3=1,declansare externa cu ajutorul intrarii CLK/TRG;D3=0,declansare interna ,automata,cind inceperea masurarii timpului se face pe frontul pozitiv al ceasului FI in starea T2 din ciclul-masina urmator celui in care s-a inscris constanta de timp.Dupa declansare,numararea se face in mod continuu,la trecerea prin zero constantele incarcindu-se automat numaratoarele fiind decrementate fara intrerupere sau intirziere pina la o initializare hardware sau software.
D2 urmeaza constanta de timp D2=1 indica faptul ca urmatorul cuvint scris la adresa canalului programat este o constanta de timp,ce poate fi transmisa in orice moment,numaratorul-decrementor continuind decrementarea constantei anterioare pina la trecerea prin zero,dupa care o va incarca pe cea noua.
D2=0 inseamna ca nu urmeaza o constanta.Cuvintul de comanda transmis cu D2=0 este de obicei un cuvint de actualizare a registrului de comanda asociat canalului deja in functiune.Aceasta deoarece un canal nu poate functiona fara sa i se fi transmis in mod corect constanta de timp si singurul mod de a o transmite este prin pozitionarea pe '1' a bitului D2,intr-un cuvint de comanda anterior.
D1 initializare Pozitionarea pe '1' a acestui bit conduce la o initializare software ,canalul oprindu-se din numarare sau din masurarea timpului.Scrierea in D1 a unui impuls de initializare opreste functionarea canalului,dar nu modifica nici unul din bitii registrului de comanda.Daca D2=D1=1,canalul isi va relua functionarea dupa incarcarea constantei de timp.Daca D1=0 canalul isi continua functionarea curenta.


CONSTANTA DE TIMP

Pentru a incepe numararea in oricare din cele doua moduri de lucru ,un canal CTC trebuie sa primeasca o constanta de timp.Constanta de timp poate avea orice valoare intreaga cuprinsa intre 1 si 256,cu 00H interpretat ca 256.Incarcarea unei constante se face in doi pasi:transmiterea unui cuvint de comanda cu bitul D2=1 ,apoi scrierea unui octet avind valoarea constantei.Transmiterea unei constante spre un canal aflat in functiune va conduce la incarcarea ei in registrul pentru constanta,de unde va fi transferata in numaratorul-decrementor ,la terminarea operatiei curente,adica la trecerea prin zero.


VECTORUL DE INTRERUPERE

Vectorul de intrerupere se transmite daca cel putin unul din canalele CTC are intreruperile validate.CTC-Z80 lucreaza in intreruperi la fel ca PIO-Z80,respectind procedura corespunzatoare modului 2 al microprocesorului Z80
Programarea vectorului consta in scrierea unui octet in canalul 0 al CTC.
Acest octet trebuie sa aiba bitul cel mai putin semnificativ D0=0,pentru a fi distins de un cuvint de comanda.Utilizatorul precizeaza in acest octet cei mai semnificativi cinci biti,logica de comanda din CTC urmind a stabili valoarea bitilor D2 si D1 in functie de canalul care solicita intreruperea.
Formatul vectorului de intrerupere este deci urmatorul:
D0 0
D1,2 Indentificator de canal 00 =canal 0
generat ce CTC-Z80 01 =canal 1
10 =canal 2
11 =canal 3
D3,4,5,6,7 Se precizeaza de catre utilizator

WARNING!
Tot cea fost scris pe pagina de mai sus functioneaza chiar daca este in faza de idee.Probabil trebuiesc aduse citeva corecturi Paginile care vor fi adaugate in lunile urmatoare vor apare destul de greu deoarece textele care au fost scrise in anul 1985 trebuiesc corectate si actualizate la anul 2003