Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
I MICROPROCESSORI
2
INTRODUZIONE I MICROPROCESSORI sono circuiti sequenziali molto complessi. La sua introduzione sul mercato nel 1971 ha rivoluzionato il mondo DELL’ELABORAZIONE DEI DATI e quello DEI CONTROLLI PROGRAMMABILI E DEI PROCESSI. Le applicazioni sono molteplici; le più importanti sono: - l’automazione industriale - la strumentazione - sistemi di telecomunicazione - macchine per ufficio - elettronica di consumo I MICROPROCESSORI sono chiamati anche: SISTEMI A LOGICA PROGRAMMATA
3
LOGICA CABLATA E PROGRAMMATA
I circuiti logici si distinguono in due grandi categorie: circuiti a LOGICA CABLATA e circuiti a LOGICA PROGRAMMATA. I CIRCUITI A LOGICA CABLATA sono i circuiti analogici e logici che POSSONO SVOLGERE UNA SOLA FUNZIONE BEN DEFINITA. Il funzionamento complessivo è determinato solo dal “cablaggio” dei componenti e il campo degli utilizzi è ben definito dalle specifiche. I CIRCUITI A LOGICA PROGRAMMATA non hanno un ben definito campo di utilizzo. Il loro cablaggio interno varia in seguito all’esecuzione di un’istruzione del programma che ne regola il funzionamento. Il programma è una successione di codici ogni uno dei quali impone una riconfigurazione interna del circuito. E’ come se il circuito in logica programmata cambiasse continuamente cablaggio
4
LOGICA CABLATA E PROGRAMMATA
Vantaggi e svantaggi della logica cablata e programmata: - i circuiti a logica cablata per assolvere una ben definita funzione sono generalmente molto più veloci più affidabili e molto più economici. - i circuiti a logica programmata possono essere impiegati in molte funzioni, anche non tutte previste a priori, con il veloce cambiamento del “programma”
5
LOGICA CABLATA E PROGRAMMATA
Fin dall’inizio i problemi di prezzo furono subito risolti grazie al grande utilizzo di tali componenti in quasi tutti i settori dell’elettronica che ne ammortizzarono subito il costo. L’utilizzo della logica cablata oggi è rimasta solo quando si vuole: - realizzare circuiti semplici molto economici, molto veloci e molto affidabili
6
ARCHITETTURA DI UN MICROCOMPUTER
La struttura generale di un elaboratore di piccole dimensioni basata su microprocessore è la seguente:
7
ARCHITETTURA DI UN MICROCOMPUTER
La memoria contiene la sequenza dei codici digitali (programma) che acquisiti e decodificati dalla CPU determinano le fasi del processo di elaborazione. Essa contiene inoltre i dati iniziali intermedi e finali dell’elaborazione. I dispositivi di ingresso ed uscita rappresentano una vastissima serie di dispositivi che consento l’introduzione dei dati all’interno del microcomputer ed il prelievo dei risultati. Tra questi possiamo elencare la tastiera, il video, la stampante ed anche le memorie di massa. La CPU è l’unità di controllo che guida il microcomputer e che varrà analizzata approfonditamente in seguito.
8
ARCHITETTURA DI UN MICROPROCESSORE
Supponiamo di avere inserito in maniera opportuna il “programma” nella memoria indirizzata dal microprocessore precedente, descriviamo ora quali sono le operazioni che la CPU svolge in successione ed il ruolo che hanno i vari blocchi contenuti all’interno.
9
I REGISTRI <---- Indirizzo B7 B6 B5 B4 B3 B2 B1 B0 1 1 1 1
Sono delle celle di memori contenenti un certo numero di bit, manipolabili singolarmente. I registri sono caratterizzati dall’ampiezza (quanti bit per cella) e dall’indirizzo (dove si trova la cella). < Indirizzo B7 B6 B5 B4 B3 B2 B1 B0 Ogni bit puo’ contenere un valore 0 oppure 1. Ad esempio nel registro seguente il bit n. 5 contiene il valore 1 mentre il bit n.6 contiene il valore 0 1 1 1 1
10
I REGISTRI Un certo numero di registri (di uguale numero di bit) è raggruppato in INSIEME DI REGISTRI chiamato BANCHI. Ogni registro è individuato da un indirizzo diverso. Facciamo un esempio di banco con 8 registri (cassettiera di 8 cassetti ogn’uno dei quali ha 8 scomparti) < Indirizzo 000 < Indirizzo 001 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
11
Scomparto n. 3 del cassetto 011
I REGISTRI Scomparto n. 3 del cassetto 011 Banco = cassettiera < cassetto 000 < cassetto 001 < cassetto 010 < cassetto 011 <---- cassetto 100 < cassetto 101 < cassetto 110 <---- cassetto 111 scomparto n.7 scomparto n.0
12
bit n. 3 del registro di indirizzo 011
I REGISTRI bit n. 3 del registro di indirizzo 011 Banco (di registri) < < < < < < < < bit n.7 bit n.0
13
I REGISTRI Le operazioni che si possono fare sui registri sono semplici, facciamo alcuni esempi di istruzioni : - poni nel registro di indirizzo 110 tutti i bit a zero (azzera il registro 110) < Indirizzo 000 < Indirizzo 001 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
14
I REGISTRI - poni nel registro di indirizzo 010 tutti i bit a uno, i valori dei bit begli altri registri rimangono invariati < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 1 1 1 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
15
I REGISTRI x x x x 1 x x x B7 B6 B5 B4 B3 B2 B1 B0
- poni nel registro di indirizzo 010 il bit 3 uno, i valori dei bit negli altri registri rimangono invariati < Indirizzo 000 < Indirizzo 001 x x x x 1 x x x < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
16
I REGISTRI - poni nel registro di indirizzo 010 la stringa binaria b, oppure poni il 151d , oppure 97h < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
17
I REGISTRI La stringa binaria può essere espressa come numero decimale ma è meglio esprimerla come numero esadecimale: - poni nel registro di indirizzo 010 il numero 255 o equivalentemente il numero FFh, < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 1 1 1 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
18
I REGISTRI Altro tipo di operazione è il trasferimento tra registri: - copia il contenuto del registro di indirizzo 010 nel registro 110 < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 1 < Indirizzo 010 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 1 1 1 1 1 1 < Indirizzo 110 < Indirizzo 111 B7 B6 B5 B4 B3 B2 B1 B0
19
I REGISTRI Altro tipo di operazione è l’operazione aritmetico o logica tra registri: - somma il contenuto del registro di indirizzo 010 con quello del registro 011 < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 < Indirizzo 010 1 1 < Indirizzo 011 <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 L’operazione viene svolta da un circuito interno che si chiama ALU e da
20
<---- Indirizzo 011 (va posto nell’ACC.)
I REGISTRI Le operazioni aritmetiche come la somma richiedono l’utilizzo di un registro particolare che si chiama ACCUMULATORE di cui parleremo in seguito, in poche parole un dato (ex quello dell’indirizzo 011) ed il risultato devono transitare per l’accumulatore. < Indirizzo 000 < Indirizzo 001 1 1 1 1 1 < Indirizzo 010 1 1 < Indirizzo 011 (va posto nell’ACC.) <---- Indirizzo 100 < Indirizzo 101 < Indirizzo 110 < Indirizzo 111 L’operazione viene svolta da un circuito interno che si chiama ALU e da (va nell’ACCUMULATORE)
21
I REGISTRI Cosa contengono i registri? I registri contengono stringhe binarie. Le stringhe binarie possono rappresentare due cose concettualmente completamente molto diverse: - possono rappresentare un NUMERO in codifica binaria (un dato numerico) - possono rappresentare un comando per il microprocessore e cioè UNA ISTRUZIONE Ad esempio la stringa seguente può rappresentare il numero 129 oppure un comando (ad esempio “ferma il programma”) 1 1 < Indirizzo 000
22
ARCHITETTURA DI UN MICROPROCESSORE
Fondamentale per l’esecuzione di un programma è un registro chiamato PROGRAM COUNTER (PC). Questo registro contiene sempre un indirizzo. Questo indirizzo è quello della prossima istruzione che il processore eseguirà. All’accensione della CPU in questo registro viene a trovarsi l’indirizzo della prima istruzione che dovrà essere eseguita chiamata istruzione di START.
23
ESECUZIONE DI UNA ISTRUZIONE: FASE DI FETCH
Per eseguire l’istruzione il contenuto del PROGRAM COUNTER viene copiato nel ADDRESS REGISTER (registro indirizzo istruzioni). L’unità di controllo pone il contenuto dell’address register del address bus e va a leggere il valore nella locazione di memoria indirizzata. Mette poi il dato letto dalla locazione nel data bus. Il valore del data bus viene inserito nell’istruction register IR (registro istruzioni). A questo punto abbiamo la decodifica dell’istruzione e la sua esecuzione. Tutto quello elencato sopra viene chiamato FETCH dell’istruzione e viene ripetuto per ogni istruzione
24
FETCH La fase di FETCH di un’istruzione consiste quindi nelle seguenti fasi: 1) porre il valore del PROGRAM COUNTER (P.C.) nel MEMORY ADDRESS REGISTER (M.A.R.) 2) porre il contenuto del M.A.R. nel ADDRESS BUS (A.B.) 3) prelevare il dato dalla cella indirizzata e porlo nel DATA BUS (D.B.) 4) porre il valore del DATA BUS nel INSTRUCTION REGISTER (I.R.)
25
ESECUZIONE DI UNA ISTRUZIONE: FASE DI DECODE
La fase di DECODE di un’istruzione consiste nel: 1) decodificare l’istruzione presente nell’I.R. 2) eseguirla In base al contenuto presente nell’I.R. la CPU provvederà a effettuare delle operazioni determinate da un microcodice caratteristico di ciascuna CPU ed in maniera trasparente al programmatore.
26
FASE DI EXECUTE Dopo che l’istruzione viene decodificata in base al microcodice presente all’interno di un microprocessore questo provvede ad eseguirla (FASE DI EXECUTE). L’esecuzione dell’istruzione dipende dal tipo di istruzione. Le istruzioni possono essere distinte in 1) trasferimento dati tra memoria e registri o viceversa 2) operazioni aritmetiche o logiche 3) manipolazione dei bit presenti nei registri interni alla CPU (clear, set, rotazione …) 4) manipolazione del registro contatore di programma (P.C.) per eseguire istruzioni di salto o cicli. 5) gestione dei dispositivi di I/O
27
EXECUTE Alla fine della fase di execute viene incrementato il P.C. per leggere la prossima istruzione in base alla lunghezza dell’istruzione precedentemente eseguita.
28
RISC E CISC Le CPU si distinguono in RISC cioè CPU che hanno un numero (set) ridotto di istruzioni, e CISC che hanno un set più completo d’istruzioni. Le CPU di tipo RISC eseguono però molto velocemente le poche operazioni ma sono più difficili da programmare.
29
CICLI TEMPORALI In base a quanto detto in precedenza la CPU per l’esecuzione di un’istruzione semplice esegue le tre fasi: 1) fase di fetch/decode (che avvengono contemporaneamente) 2) fase di execute Ogni fase viene chiamata ciclo macchina la cui durata è misurata in colpi di clock. Non sempre l’esecuzione di un’istruzione si completa con una sola fase di fetch/decode ed una di esecute ma talvolta sono necessarie più fetch/decode prima della fase di execute.
30
REGISTRI INTERNI ALLA CPU
Vediamo meglio i più importanti registri interni alla CPU: Il contatore di programma P.C. (program counter): tale registro contiene l’indirizzo della prossima istruzione da prelevare ed eseguire. Il valore contenuto in questo registro viene inizializzato con un valore ben preciso in seguito all’accensione del dispositivo. In seguito viene automaticamante incrementato dalla fase di execute in base alla lunghezza dell’istruzione se il programma prosegue in sequenza o viene forzato ad un valore diverso in seguito ad un’istruzione di salto che modifica il flusso normale del programma.
31
REGISTRI INTERNI ALLA CPU
Il registro istruzioni I.R. (instruction register): In tale registro viene caricata l’istruzione prelevata dalla memoria. In particolare questo registro conterrà quella parte dell’istruzione che si chiama codice operativo (op-code) che è una parte dell’istruzione completa. L’altra parte dell’istruzione sono ad esempio gli indirizzi dei dati da trattare o i valori dei dati.
32
REGISTRI INTERNI ALLA CPU
Il registro indirizzi di memoria M.A.R. (memory address register): Tale registro contiene l’indirizzo da porre nell’address bus per effettuare una lettura o una scrittura dalla memoria. Durante la fase di prelievo dell’istruzione da eseguire (fetch) in tale registro viene copiato il contenuto del P.C. Questo registro può essere usato anche durante l’esecuzione dell’esecuzione (execute) quando sono necessarie delle letture o scritture dei dati in memoria. In questo caso vi verrà copiato l’indirizzo della cella in questione
33
REGISTRI INTERNI ALLA CPU
Il registro dati di memoria M.D.R. (memory data register): Tale registro contiene il dato da porre nel data bus per effettuare scrittura nella memoria o contiene il dato letto dalla memoria. Questo è un registro bidirezionale in quanto contiene i dati da mettere nel data bus oppure contiene i dati prelevati dal data bus.
34
REGISTRI INTERNI ALLA CPU
Il registro di stato S.R. (status register): Tale registro contiene un certo numero di bit chiamati flag (bandierine) che si alzano e si abbassano (cioè vanno a zero o ad 1) a seconda del verificarsi di certi eventi. Gli eventi che vengono controllati nel registro di stato variano da processore a processore ma in generale questi sono: 1) eventi interni al microprocessore. 2) eventi esterni al microprocessore
35
REGISTRI INTERNI ALLA CPU
Il registro di stato S.R. (status register): 1) eventi interni al microprocessore. Gli eventi interni al microprocessore sono quelli legati ai risultati delle operazioni all’interno della ALU e cioè possono essere ad esempio: bit S (segno) indica con 0 o 1 il segno dell’ultima operazione bit Z (zero) indica se l’ultima operazione ha dato risultato zero bit C (carry) indica se l’ultima operazione ha dato un riporto nell’ultimo bit cioè se nella rappresentazione del risultato è avanzato un 1 (vale anche per le operazioni di scorrimento rotazione) bit H (half carry) stessa cosa valutata a metà parola bit O (overflow) segnala il superamento della capacità del regitro in una somma nelle rappresentazioni dei numeri con complemento a 2 bit P (parity) indica se il risultato è pari o dispari bit < (minore) indica se la word A è minore della word B
36
REGISTRI INTERNI ALLA CPU
Il registro di stato S.R. (status register): 2) eventi esterni al microprocessore Il bit di interruzione merita un discorso a parte. Tale discorso verrà fatto in seguito parlando in generale di interruzione (o interrupt) di un microprocessore. Per ora solo un breve cenno. Un microprocessore elabora dati che provengono dall’esterno e quindi ha la necessità di colloquare con il mondo esterno. Una tecnica di colloquio con il mondo esterno è la tecnica dell’interruzione. Se vogliamo che il microprocessore risponda immediatamente alle richieste di interruzioni esterne poniamo il bit a 0 altrimenti se richiediamo che il microprocessore non debba essere disturbato da interruzioni esterne poniamo il bit a zero.
37
REGISTRI INTERNI ALLA CPU
Il registro puntatore di stack S.P. (stack pointer): Lo stack (catasta) è una particolare area di memoria di tipo LIFO (last in fist out) e cioè il l’ultimo dato messo sarà il primo da leggere. Il registro puntatore di stack contiene l’indirizzo della prima locazione libera da utilizzare se voglio inserire un dato in questo stack. Al momento che inserisco un dato il registro puntatore di stack si incrementa, se leggo un dato allora il puntatore di stack si decrementa. Esempio: supponiamo che lo stack sia formato da 5 celle di indirizzo da 1000 a Inizialmente lo stack punta la cella 1000 che è vuota. Se inserisco un dato lo metto nella cella 1000 ed il registro di stack punta Se inserisco un secondo dato lo metto nella cella 1001 ed il puntatore punterà a Se prelevo un dato allora leggerò quello presente in 1001 ed il puntatore punterà ora questo indirizzo ritenendolo vuoto. L’inserimento di un dato si chiama PUSH, il prelievo si chiama POP. L’utilizzo di tale registro è importante nell’esecuzione dei sottoprogrammi.
38
REGISTRI INTERNI ALLA CPU
Altri registri: All’interno dei vari microprocessori sono presenti altri registri il cui numero ed utilizzo varia molto tra i vari modelli. Quello più importante e sempre presente è l’ACCUMULATORE, un registro che è direttamente connesso con l’ALU e dove viene copiato il risultato delle operazioni. Oltre ad esso vi sono altri registri di lavoro utilizzabili per le operazioni, per il trasferimento dati da e per la memoria e per la gestione delle interruzioni.
39
LE ISTRUZIONI Il processo di eleborazione della CPU è determinato dalle istruzioni depositate in locazioni successive di memoria in codice binario, o come si dice, in codice macchina. Il contenuto informativo delle istruzioni riguarda: 1) l’operazione (codice operativo) che la CPU deve eseguire (somma, trasferimento di un dato, confronto tra dati …) 2) il valore dei dati (operandi) o le indicazioni per il reperimento degli stessi (indirizzamento dei dati) Sia il codice operativo che gli operandi sono codificati in binario. Il programmatore che realizza il programma deve scrivere questa rappresentazione binaria ma la ricava con l’ausilio di programmi chiamati “assemblatori” che elaborano automaticamente un listato scritto in linguaggio più evoluto chiamato assembler. Questo sta in un rapporto 1 a 1 con le istruzioni binarie.
40
LE ISTRUZIONI In base al codice operativo si possono distinguere i seguenti tipi di istruzioni: 1) aritmetiche e logiche: operare su due dati e mettere il risultato in un registro ben preciso (spesso nell’accumulatore) 2) rotazione o scorrimento 3) manipolazione di singoli bit di un registro (settaggio, resettaggio ….) 4) controllo del programma: modificare il contenuto del P.C. per variare il flusso del programma. Sono le istruzioni di salto o di chiamata a sottoprogramma e ritorno da sottoprogramma. 5) controllo della CPU: start, arresto, modifica dei flag nel registro di stato.
41
LE ISTRUZIONI In base al tipo di indirizzamento dei dati si possono distinguere i seguenti casi: 1) immediato : il dato è presente assieme all’istruzione 2) diretto : nell’istruzione è presente l’indirizzo del dato 3) diretto da registro : nell’istruzione è indicato il registro entro il quale è contenuto il dato 4) indiretto da registro: nell’istruzione è indicato il registro entro il quale è contenuto l’indirizzo del dato 5) relativo : salto di celle dove trovare il dato 6) indicizzato : il registro contiene l’indirizzo della cella dove c’è l’indirizzo del dato.
42
LE ISTRUZIONI Il programma da eseguire ed i dati risiedono in memoria. In base a quanto detto in precedenza sia il codice operativo delle istruzione e sia i dati da elaborare o gli indirizzi dei dati sono espressi in binario e così devono essere caricati in memoria prima dell’esecuzione. Siccome non è estremamente scomodo scrivere direttamente in binario si ricorre ad un linguaggio simbolico chiamato assembly che è fatto non di bit ma di codici mnemonici più facili quindi da ricordare, ma che sono in un rapporto 1 a 1 con le istruzioni binarie. Provvederà un particolare programma chiamato “assemblatore” che trasformerà il programma assembly in un codice binario. Per programmare un microprocessore occorrerà conoscere le istruzioni nel linguaggio assembly. Il linguaggio assembly varia da processore a processore anche se i concetti di base rimangono sempre gli stessi. Verrà affrontato in seguito il linguaggio assembly di un microcontrollore PIC. Per ora affrontiamo delle problematiche di base comuni a tutti i micro.
43
LE ISTRUZIONI Istruzioni di elaborazione dati del tipo: 1) somma (ADD) o sottrai il contenuto di due registri 2) operazioni logiche AND, OR … tra due registri 3) incrementa (INC) , decrementa (DEC), ruota (ROT) il contenuto di un registro 4) compara (COMP) il contenuto di due registri Istruzioni di controllo del tipo: 1) salta ad una istruzione (GOTO) 2) salta ad un sottoprogramma (CALL) 3) ritorna da un sottoprogramma (RETURN) Istruzioni di trasferimento tra registri interni e collegamento con la memoria 1) sposta (MOV) un dato da un registro ad un altro registro 2) sposta (MOV) un dato dal registro ad una cella di memoria o viceversa Collegamento in lettura e scrittura con dispositivi esterni alla CPU 1) leggi e scrivi su un dispositivo esterno (IN ed OUT)
44
LE ISTRUZIONI Collegamento con le memorie: I microprocessori hanno dei piedini esterni che permettono una connessione diretta alle memorie esterne di tipo ROM e SRAM. I segnali di controllo utilizzati a questo scopo sono: RD : read WR : write MREQ : memory request da collegare ai corrispondenti piedini presenti nei banchi di memoria
45
LE ISTRUZIONI Collegamento con dispositivi di ingresso ed uscita (I/O): Con la sigla I/O si identificano in maniera generica tutti i dispositivi che possono scambiare dati con un microprocessore. I dispositivi sono molto diversi tra loro e per questo motivo hanno bisogno di un dispositivo di adattamento chiamato INTERFACCIA. Il microprocessore si occuperà solamente di scambiare dati con l’interfaccia che a sua volta si preoccuperà di trasformare i segnali provenienti dall’esterno in segnali standard per il microprocessore. Un’interfaccia deve provvedere quindi a: gestire i segnali di controllo immagazzinare i dati separare elettricamente
46
LE ISTRUZIONI Collegamento con dispositivi di ingresso ed uscita (I/O): I dispositivi esterni possono essere indirizzati dalla CPU in due maniere differenti: - come se fossero celle di memoria RAM (indirizzamento mappato in memoria o memory mapped). In questo caso è compito del progettista generare dall’indirizzo del dispositivo un segnale di chip-select distinto per ogni interfaccia indirizzamento di I/O distinto: in questo caso si attiva un segnale specifico chiamato IOREQ (input/output request) che può essere utilizzato per selezionare il dispositivo esterno. Nel caso precedente si attivava il piedino MREQ (memory request e veniva occupato spazio della memoria indirizzabile)
47
MODALITA’ DI SCAMBIO DATI TRA CPU E PERIFERICHE
Quando si devono scambiare dati tra CPU e periferiche possiamo avere tre situazioni diverse: 1) una stessa periferica deve essere condivisa da più processori senza conflitti 2) la periferica è troppo lenta (o troppo veloce) per i tempi della CPU 3) occorre gestire le periferiche con una priorità diversa Le soluzioni sono di tre tipi: 1) Trasferimento programmato (chiamato anche I/O diretto) 2) trasferimento pilotato da interruzione (chiamato interrupt) 3) tecnica di accesso diretto alla memoria (o DMA)
48
TRASFERIMENTO PROGRAMMATO:
Il trasferimento programmato (I/O diretto) è un tipo di trasferimento iniziato ed effettuato sotto la diretta ed incondizionata gestione della CPU. Nello specifico la tecnica usata è chiamata HANDSHAKE e cioè stretta di mano. Il dispositivo esterno ha un flag che prende il significato di bit di READY (pronto) che viene attivato dalla periferica quando è pronta a colloquiare. Se la CPU trova attivo il bit READY disattiva il bit e trasferisce il dato in modo che nessun altro possa accedere alla periferica. Si pone poi in attesa (wait) ed aspetta che la periferica abbia completato il trasferimento. Se vi sono più periferiche da gestire la CPU può adottare la tecnica del POLLING e cioè della verifica ciclica dello stato di richiesta servizio delle varie periferiche che quando hanno eseguito l’operazione precedente attivano il bit READY.
49
TRASFERIMENTO PILOTATO DA INTERRUZIONE:
Il trasferimento pilotato da interruzione (interrupt) è un tipo di trasferimento iniziato dal dispositivo. E’ il dispositivo esterno che invia alla CPU una richiesta di comunicazione, attivando una specifica linea della CPU chiamata IRQ o INTREQ . L’interruzione è cioè un processo mediante il quale il mondo esterno può richiedere alla CPU di interrompere il programma in corso per eseguire una determinata procedura. Gli utilizzi di questa tecnica sono ad esempio: la tastiera che chiede di trasmettere un dato, un convertitore che dichiara di aver pronto il dato etc.. Le segnalazioni di richiesta di interruzione vanno ad attivare un segnale di IRQ sulla CPU che provvederà a gestire tali interruzioni mandando in esecuzione un opportuno programma. La rivelazione delle richieste di interruzione e la loro gestione varia da processore a processore per cui vedremo meglio per il PIC
50
TRASFERIMENTO CON TECNICA DMA:
Il trasferimento con tecnica DMA consente l’accesso diretto alla memoria per il trasferimento dati da e verso le unità periferiche senza passare per la CPU. Il trasferimento è gestito dall’interfaccia del dispositivo esterno che richiede la sospensione delle attività della CPU per assumere il controllo del bus. Questa tecnica si rivela molto adatta per il trasferimento di molti dati con periferiche veloci.
51
GESTIONE DELLE INTERRUZIONI:
Il colloquio tra periferica e CPU tramite la tecnica dell’interruzione ha delle caratteristiche che dipendono dal processore. Innanzitutto occorre dire che la CPU in risposta ad una richiesta d’interruzione deve mandare in esecuzione una routine di servizio interrompendo (da cui il nome) il programma precedentemente in esecuzione normale. Pertanto, all’insorgere di una richiesta d’interruzione, la CPU deve solo completare l’istruzione in corso e procedere all’esecuzione di una routine di gestione dell’interruzione. La CPU deve cioè provvedere a: 1) salvare il contesto (context saving) in una memoria a catasta LIFO (stack) 2) mettere nel PC l’indirizzo della prima istruzione della routine di gestione A gestione dell’interruzione completata (RETURN) la CPU provvederà a ripristinare il contesto (context restore) prelevando in ordine inverso i dati dallo stack. E’ da notare che sono possibili gestione di interruzioni nidificate.
52
GESTIONE DELLE INTERRUZIONI:
Analizziamo ora certe problematiche comuni connessi alla gestione delle interruzioni che sono: 1) il riconoscimento da parte della CPU di una richiesta d’interruzione 2) la modalità con cui la CPU può individuare quale delle periferiche connesse ha generato l’interruzione al fine di localizzare in memoria la routine di servizio (ISR: interrupt routine service) corrispondente 3) la valutazione dei livelli di priorità delle interruzioni ossia la possibilità di stabilire , nel caso vi siano più richieste, contemporanee quale debba essere servita per prima.
53
Riconoscimento da parte della CPU di una richiesta d’interruzione ed individuazione del richiedente
Per la richiesta d’interruzione la CPU presenta delle linee che sono chiamate IRQ e NMI che possono essere connesse assieme tramite una OR logica. La CPU una volta accettata la richiesta di interruzione andrà a leggere il bit di stato di tutte le periferiche collegate e scoprirà quale di esse ha richiesto l’interruzione. A seconda della periferica richiedente manderà in esecuzione l’opportuno programma di gestione. E’ importante che la richiesta di interruzione rimanga attiva fino a che la CPU non ha individuato il richiedente. Un metodo semplice per individuare il richiedente è l’interrogazione ciclica del bit di stato (POLLING). Un altro metodo è quello di far depositare dalla periferica richiedente nel bus dei dati un indirizzo, l’indirizzo dove mettere la prima istruzione di gestione dell’interruzione (TECNICA DELLE INTERRUZIONI VETTORIZZATE). E’ importante che fino a che la CPU non ha individuato il richiedente non si abbia una ulteriore richiesta da un’altra periferica.
54
Gestione delle priorità
Gli eventi esterni di richiesta d’interruzione si verificano in modo casuale ed asincrono e può capitare il caso in cui più periferiche richiedano contemporaneamente il servizio. In questo caso bisogna che il processore individui quale richiesta deve essere soddisfatta per prima mentre le richieste degli altri deve essere ritardata. Questo può essere ottenuto in maniera software effettuando un pollig tale che le periferiche con maggior priorità siano testate per prime, o in maniera hardware utilizzando particolari circuiti o particolari strutture (daisy-chain)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.