Sunteți pe pagina 1din 4

Curs 6 - MC

Exemple porturi (I8259A) (cont.)

Organigrama programarii I8259A (fig 6 -


http://discipline.elcom.pub.ro/amp2/8259A_PIC_Datasheet.pdf)
Controlerul DMA (principiul)

Discutii despre L1 (cerinte, exemple)

8259A (cont)

Programarea 8259
Fig 6 (http://discipline.elcom.pub.ro/amp2/8259A_PIC_Datasheet.pdf)
Programarea se face prin scrierea unei secvente de cuvinte de programare -> la
aceeasi adresa

Initializarea 8259
- ICW1, ICW2, (ICW3), (ICW4)
Cuvinte de operare si control
- OCW1, OCW2

Fig. 7 (http://discipline.elcom.pub.ro/amp2/8259A_PIC_Datasheet.pdf)

- Adresa de baza -> cuvinte scrise la adresa de baza cu A0 =0 sau cu A0=1

- Obs. -> mod 8080 (vechi) -> adresa de servire (MSW) este tranmisa direct pe bA
-> mod 8086 -> se transmite tipul (MSB) intreruperii !

tip: t7 t6 t5 t4 t3 -> prestabiliti


t2 t1 t0 -> combinatia binara a liniei IR (0-7)

Programarea de baza 8259A (single) -> procesor 8086 ->


ICW1 0001 x001 (A0=0)
ICW2 t7 t6 t5 t4 t3 000 (A0=1)
ICW3 - NU
ICW4 0000 0011 (A0=1)

- de transmis 3 cuvinte -> primul la adresa debaza cu A0=0


- urmatoarele 2 la adresa de baza cu A0=1, succesiv

OCW1 - mascarea intreruperilor pe liniile externe IR0-IR7


OCW1 - 0000 0001 -> se accepta intreruperi doar de la IR0
OCW2 -> modificarae politicii de prioritizare si modul de lucru pe mod slave
OCW3 - moduri speciale de operare

Tema: cum se poate realiza o schema de selectie secventiala (scrierea cuvintelor de


programare la aceeasi adresa)
- avantaj-> schema de decodificare -> mai simpla ? (complexitatea e inclusa in
logica interna de decodificare)

Controlerul DMA - 8237

Principiul DMA -> Fig C5_DMA-1


(https://curs.upb.ro/pluginfile.php/283207/mod_folder/content/0/FigC5_DMA.png?
forcedownload=1)
- 4 canale DMA (programate individual)
- moduri de transfer - MEM - MEM sau MEM -IO
- sincronizare -> polling sau intreruperi
- transfer individual (un cuvint)
- transfer pe bloc

Realizarea unui sistem cu uC si IO

- schema bloc a sistemului


- identificare tipul si numarul porturilor necesare, conform specificatiei
- decizie de utilizare a porturilor standard (oferite de uC, din familie de
porturi IO asociata uC sau realizarea unor porturi IO cu buffere sau registre
- realizarea schemei de selectie a porturilor

- de verificat:
- respectarea specificatiei date (si justificarea acesteia)
- corectitudinea schemei de selectie

- programarea (utilizarea) porturilor


- stabilirea modului de lucru (daca e cazul)
- programarea efectiva (folosind adresele de la punctul anterior)
- elemente simple de operare (operatii pe biti): identificare bit intrare,
identificare front de semnal, scriere bit iesire, generare semnale
binare, masurarea timpului

- de verificat:
- stabilirea corecta a modului de lucru
- folosirea corecta a cuvintelor de programare asociate modului ales
- corectitudinea operatiilor pe biti

- scrierea codului pentru aplicatia impusa (cu elementele de la punctul antrior)


- descriere formala (pseudocod/ organigrama) a aplicatiei -> se pot utiliza
elementele teoretice de ex. protocoalale de comunicatie discutate
- codul in C

- de verificat:
- corectitudinea functionarii
- concordanta dintre specificatie, descriere formala si cod

Exemplu:

Bloc de comanda (din imprimanta) pentru o imprimanta paralela cu specificatiile:


- date - 8 biti
- protocol cu confirmare
- realizare cu porturi simplificate
- sincronizare cu intreruperi

Imprimanta -> Rx
uC -> Tx

Protocol initiat uC (Tx) -> READY -> date gata catre imprimanta
-> ACK -> confirmarea primirii datelor de catre imprimanta

Biti de intrare: 9 biti (8 pt date si 1 READY)


Biti de iesire: 1 bit (ACK)

PORT_DATA -> port de date imprimanta -> buffer, 8 biti - D0-D7, in, selectie cu
CS0/
B1 -> buffer -> D0 (polling), in, selectie cu CS1/ sau
-> semnal intrerupere -> B1 se poate omite
R1 -> registru -> D0, out, selectie cu CS2/

Proiectarea selectiei IO (dupa metodologia data, adresa de baza liber aleasa)


- de specificat initial care e adresa de baza

Elemente de software:

- se poate presupune ca avem doua functii:

char portin(int adr); -> citeste portul de in de adresa adr

a=portin(ADRIO);

void portout(int adr, char val); -> scrie in portul de out de adresa adr, valoare
val

portout(ADRIO, a);

intirzieri-> delay() sau contorizare intreruperi


diagrama de timp (READY, ACK)

in cod -> trebuie sa existe corespondenta dintre adresele proturilor definite si


scema de selectie
-> trebuie sa utilizeze corect functiile

De ex:
ADR_PD -> genereaza CS0/
ADR_B1 -> genereaza CS1/
ADR_R1 -> genereaza CS2/

pseudocod -> se urmareste graful protocolului cu confirmare

sicronizarae cu intreruperi:

SCI_Rx -> cind READY =1 (activ) -> preia datele -> citeste PORT_DATA -> de catre uC
imprimantei
SCI-Tx -> cind ACK = 1 (activ) -> tranamite date -> de catre uC

Next

Lucrarea 1

S-ar putea să vă placă și