programmers resources
  http://www.intel-assembler.it/  (c)2017 intel-assembler.it   info@intel-assembler.it
 
Search :  
Lingua Italiana    English Language   
Index
 
just an empty assembly space
just an arrow Intel Platform
just an arrow Article & Guides
just an arrow Download Software


23/01/2009 Featured Article: How to remove Buzus Virus (permalink)




:::3097520:::
Bottone Scambio Directory Pubblicitaonline.it
Home Page | Articles & Guides | Download | Intel Platform | Contacts

Google
 


Bookmark and Share
Download 
Tell a friend



Il Chip 8259: IRQ Controller (NEW)

Un"introduzione sull"8259

(by jes)

Il chip della famiglia Intel 8259A gestisce gli IRQ hardware del computer. Gli IRQ sono dei segnali attraverso i quali diversi componenti del sistema comunicano l'accadimento di un evento e che permettono al software in esecuzione di gestirlo.
This article is online from 3577 days and has been seen 7944 times





     Intel 8259A  PIC
     Programmable Interrupt Controller
     Breve guida all'8259A
     di Julian E.Spina 
     copyright 2001-2007


 . Introduzione
 . Utilizzo di più 8259A collegati in master-slave
 . Corrispondenza tra IRQ ed Interrupt
 . Descrizione IRQ 0-1
 . Redirect dell' IRQ 2
 . La priorità degli interrupt
 . Esempi di programmazione
 . Bibliografia


  ..--== Introduzione ==--..

Il chip della famiglia Intel 8259A gestisce gli IRQ hardware del computer. 
Gli IRQ sono dei segnali attraverso i quali diversi componenti del sistema comu
nicano l'accadimento di un evento e che permettono al software in esecuzione di
 gestirlo. 
Possiamo immaginare l'IRQ come un segnale che viene attivato da qualche parte n
el PC e che viaggia sul proprio canale fino a giungere alla CPU.

Alcuni ricorderanno quando, ai tempi del Windows 95 e 98, si configuravano le n
uove schede inserite nel PC, ad esempio le scheda audio che solitamente si conf
iguravano per utilizzare l'IRQ5 oppure l'IRQ7(*). 
Ebbene i canali 5 oppure 7 sono gestiti dal'8259. 

(*)fino all'avvento del plug&play le schede aggiuntive che venivano inserite ne
gli slot del pc dovevano essere, in alcuni casi, configurate manualmente. Ciò s
ignificava, tra le altre cose, scegliere uno o più IRQ da assegnare (riservare)
 alla scheda.

Per essere precisi, il chip 8259A è in grado di accettare interruzioni provenie
nti da sorgenti esterne riconoscendo, nel caso di più interruzioni contemporane
e, la priorità delle stesse. Un chip 8259A può gestire 8 segnali IRQ. 
Quindi l'IRQ è, realmente, un segnale di <i>Interrupt Request</i> c
ioè una richiesta di interruzione che, giunta all'8259A, sarà notificata immedi
amente alla CPU. 
Quest'ultimo, all'arrivo di un segnale IRQ provvederà ad eseguire il codice del
 corrispondente interrupt software.


  ..--== Utilizzo di più 8259A ==--..

E' un chip molto flessibile che, senza hardware aggiuntivo, permette espansioni
 che aumentano il numero di IRQ gestibili nel PC. 
Dal PC/AT a seguire, si montano due chip 8259 in cascata per ottenere 16 canali
 d'IRQ contro gli 8 che si avrebbero usando un solo chip (il primo PC basato su
 CPU 8088 disponeva di un solo 8259, dal 286 al Pentium si è introdotto il seco
ndo PIC). 
Il collegamento di due chip (o più) nella modalità chiamata master-slave avvien
e mediante il pin IRQ2 del master con il pin INTR dello slave, e così in cascat
a fino ad un massimo di 8 PIC (per ottenere 64 IRQ disponibili).


    I             I
    R             R
    Q             Q
    0 1 2 3 4 5 6 7

    +-------------+
    | 8259 master |
    ---------------
pin 0 1 2 3 4 5 6 7
        |
        |
        I
    +-------------+
    | 8259 slave  |
    +-------------+
pin 0 1 2 3 4 5 6 7 

    I             I
    R             R
    Q             Q
    8 9 A B C D E F


Dal punto di vista dell'hardware ci troviamo con un totale di 16 canali hardwar
e disponibili. 
Saranno usati per gestire funzioni fondamentali del PC come il timer di sistema
, la tastiera o per dispostivi periferici come le porte seriali. 
Alcuni canali saranno lasciati disponibili per schede aggiuntive e messi a disp
osizione tramite la piedinatura degli slot d'espansione. 
Diamo anche un'occhiata per capire cosa e come si programma l'8259A.


  ..--== Corrispondenza tra IRQ ed int ==--..

La mappatura dei 16 canali interrupt hardware della piattaforma Intel e' riport
ata in tab. 1.


    TAB.1 LISTA DEGLI IRQ (Interrupt Request)
                                 hardware     software
    canale nome                  collegato    interrupt      
    --------------------------------------------------------------
    IRQ 0  Clock Generator       pin 8253     int 08h
    IRQ 1  Keyboard input data                int 09h
    IRQ 2  reserved                           int 0Ah
    IRQ 3  Serial port 2                      int 0Bh
    IRQ 4  Serial port 1                      int 0Ch
    IRQ 5  Parallel Port 2                    int 0Dh
    IRQ 6  Floppy Disk Drive                  int 0Eh
    IRQ 7  Parallel Port 1                    int 0Fh
    --------------------------------------------------------------
    IRQ 8  CMOS Real Time Clock  MC146818     int 70h
    IRQ 9  Redirect verso int 0Ah             int 71h
    IRQ 10 Available                          int 72h
    IRQ 11 Available                          int 73h
    IRQ 12 PS/2 Mouse                         int 74h
    IRQ 13 Math Coprocessor                   int 75h
    IRQ 14 Hard Disk                          int 76h
    IRQ 15 Available                          int 77h
    --------------------------------------------------------------
    

Qui è importante notare il legame tra hardware e software : gli IRQ sono sono "
rimappati", ovvero disponibili, sotto forma di interrupt software (isr) e progr
ammabili dunque, tramite l'istruzione assembler <i>int</i>. 

Come ben sappiamo gli interrupt software possono essere manipolati a piacere pe
r svolgere le operazioni che ci necessitano.


  ..--== Descrizione IRQ 0-1 ==--..

L'IRQ 0 e' un canale importante e che in alcuni casi puo' servire anche al norm
ale programmatore. 
E' infatti collegato ad un segnale proveniente dal chip 8253/4 che ha una frequ
enza di 18,2 impulsi al secondo. 
Di conseguenza, l'interrupt software (isr 8) ad esso corrispondente sarà esegui
to circa 18 volte al secondo, int 8 che come abbiamo detto e' a completa dispos
izione del programmatore.  
  
L'IRQ 1 è il segnale utilizzato per la gestione della tastiera. Come si vede ne
lla tab.1 corrisponde all'interrupt software int 09h. Aggiungendo un nostro ges
tore di interrupt "agganciato" all'int 09h potremmo svolgere funzioni per manip
olare la gestione della tastiera.


  ..--== Redirect dell' IRQ 2 ==--..

Una nota la merita l'IRQ 2 che viene perso nella configurazione master-slave de
ll'8259A, in quanto serve come ponte di collegamento tra due chip. Per mantener
e la compatibilità con l'architettura originale del PC, negli slot d'espansione
 del PC/AT il pin che era per l'IRQ 2 venne associato all'IRQ 9. Quindi un segn
ale di interrupt che doveva arrivare all'IRQ 2 arrivava in realtà sul pin dell'
IRQ 9, attivando il codice assembler dell' int 71h.
Per risolvere il problema la IBM ricorse ad uno stratagemma.
Il trucco consiste nell'eseguire un redirect dall' int 71h all' int 0ah. 
Segue un estratto del codice contenuto nel BIOS dell'IBM/AT che mostra il redir
ect dell'IRQ 9 verso l'IRQ 2.

  ; Handler dell' int 71h (IRQ Level 9)
  ; redirect verso l' int 0ah
    RE_DIRECT     PROC NEAR
                  push ax        ; Salva AX
                  mov  al,20h    ; Invia EOI
                  out  0a0h,al   ;   allo slave
                  pop  ax        ; Ripristina AX
                  int  0ah       ; Passa il controllo
                  iret           ; Fine interrupt
    RE_DIRECT     ENDP
  
L'unica cosa rilevante di questo codice è l'invio del comando EOI (End Of Inter
rupt) al PIC slave. Dopodichè viene richiamato l'int 0a.

Così abbiamo visto gli IRQ che sono più utilizzati dai programmatori. 
Per ulteriori informazioni sugli altri IRQ si rimanda agli approfondimenti bibl
iografici.


  ..--== La priorità degli interrupt ==--..

La gestione della priorità dell'interrupt è delegata all'8259A dalla CPU, in qu
anto quest'ultima ha un sono pin dedicato alle interruzioni e quindi non contem
pla la gestione di priorità. 
La priorità serve per decidere quale segnale inoltrare prima alla CPU nel caso 
in cui più interruzioni solo sollevate in contemporanea.
L'IRQ 0 ha la priorità più alta fino all' IRQ 7 che ha la priorità più bassa. 
Essendo l'IRQ 8 (il primo IRQ dell' 8259 slave) collegato sull'IRQ 2 del master
, essa avrà priorità più alta rispetto all'IRQ3. 
Nella tabella sono mostrate le priorità.

    TAB.2 PRIORITA' DEGLI IRQ
                             
    --------------------------------------------------------------
    IRQ 0                                       Priorità più alta
    IRQ 1
    IRQ 8
    IRQ 9
    IRQ 10
    IRQ 11
    IRQ 12
    IRQ 13
    IRQ 14
    IRQ 15
    IRQ 3
    IRQ 4
    IRQ 5
    IRQ 6
    IRQ 7                                       Priorità più bassa
    --------------------------------------------------------------
 

  ..--== Esempi di programmazione ==--..

La programmazione dell'8259A avviene tramite le due porte di I/O (20h e 21h) pe
r il master e due per lo slave (0a0h e 0a1h).

Il seguente codice è contenuto ed eseguito dal BIOS del PC durante la fase di p
ower on.
Serve ad abilitare soltanto alcuni canali IRQ necessari alla partenza del PC, i
n particolare : i dischi (bit 6), lo slave (bit 2), la tastiera (bit 1) ed il t
imer (bit 0).

  MASTR0 equ 20h
  MASTR1 equ 21h
  SLAVE0 equ 0a0h
  SLAVE1 equ 0a1h

     mov al,0b8h    ; Abilita bit 6, 2, 1 e bit 0
     out MASTR1,al  ; invia comando al master
     mov al,0ffh    ; Disabilita tutto
     out SLAVE1,al  ; invia comando allo slave
     sti

Il secondo esempio di codice mostra la corretta chiusura di un isr. Infatti, du
rante l'esecuzione dell'handler di un IRQ, l'8259A non processa altri interrupt
 fino a quando non riceve un comando EOI che indica il completamento dell'isr.

     mov al,20h     ; comando EOI
     out MASTR0,al  ; invia comando al master
     sti

Ovviamente riferendosi ad un IRQ gestito dal PIC master il comando EOI viene in
viato di conseguenza. Se l'isr fosse riferito agli IRQ 8-15 il comando out dovr
ebbe indirizzare il PIC slave.


  ..--== BIBLIOGRAFIA ==--..

80386 Hardware, Intel Corporation
ISBN 88-7056-910-1

The 80x86 Ibm Pc & Compatibles Computers vol.1 e 2, Mazidi & Mazidi, ed.Prentic
e Hall
ISBN 0-13-321399-4

The Intel 32-bit microprocessor 80386,80486 and Pentium, Brey, ed.Prentce Hall
ISBN 0-02-314260-X

The personal computer from the Inside Out, Sergent & Shoemaker, ed.Addison Wesl
ey
ISBN 0-201-62646-2



(c)Julian E.Spina
jes@accademia3.it




Top
Download 
Tell a friend
Bookmark and Share



Similar Articles

8237A Programmable DMA Controller
Intel Chipset 8237A Datasheet
(by Intel)

8254 Programmable Interval Timer
Intel Chipset 8254 Datasheet
(by Intel)

8255 Programmable Peripheral Interface
Intel Chipset 8255 Datasheet
(by Intel)

8259A Programmable Interrupt Controller
Intel Chipset 8259 Datasheet
(by Intel)

82C54 Programmable Interval Timer
Intel 82C54 Technical Manual
(by Intel)

82C55A Programmable Peripheral Interface
Intel 82C55A Techical Manual
(by Intel)

Fastclock source code C / Asm
Coding on 8259 timer for high precision clock
(by unknown)

How to program the DMA 8237 chip
Basic info and examples of C and Asm programming
(by Night Stalker)

Intel 8272 Floppy Disk Controller Chip
Tecnical manual, commands and controls
(by Intel)

Intel 82801AA (ICH), 82801AB (ICH0) I/O Controller
Hub AC '97 Programmer's Reference Manual
(by Intel)

Intel i8255 PIO Programming Tutorial: Extracts
A practical use of the 8255 with basic programming
(by Richard Steven Walz)

Make sound from the speaker using assembly
8253, 8255, 8284 program example in asm
(by William Cravener)

PCI Interrupts for x86 Machines under FreeBSD
A guide for interrupt programming under Unix
(by John H. Baldwin)

Programming the Intel 8253
Short howto program Programmable Interval Timer
(by Mark Feldman)

Programming the PC Speaker
A short practical intro on programming 8254
(by Mark Feldman)

TIMING CODE MODULE (80x86 specific code)
Setting pc timer 8259 - Commented source code
(by Ethan Rohrer)

Timing on the PC family (rel.3)
Over 290 pages on programming 8253/8254
(by Kris Heidenstrom)

 Tags: 8259, chipset


webmaster jes
writers rguru, tech-g, aiguru, drAx

site optimized for IE/Firefox/Chrome with 1024x768 resolution

Valid HTML 4.01 Transitional


ALL TRADEMARKS ® ARE PROPERTY OF LEGITTIMATE OWNERS.
© ALL RIGHTS RESERVED.

hosting&web - www.accademia3.it

grossocactus
find rguru on
http://www.twitter.com/sicurezza3/
... send an email ...
Your name

Destination email

Message

captcha! Code