Nota: questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente a condizione di citarne la fonte |
porta seriale, Recommended Standard 232 Revision C (RS-232C), Universal Asynchronous Receiver Transimitter (UART), sono tutti sinonimi per indicare una interfaccia di tipo seriale verso il mondo esterno
COMUNICAZIONE SERIALE SIGNIFICA CHE OGNI PAROLA DA TRASMETTERE (RICEVERE) VIENE TRASMESSA (RICEVUTA) UN BIT ALLA VOLTA
LA PORTA SERIALE TRASMETTE (RICEVE) BIT PARTI DI PAROLE CHE SCOMPONE
(RICOMPONE) AUTOMATICAMENTE
L'UTENTE DELLA PORTA SERIALE TRASMETTE
(RICEVE) PAROLE
LO STANDARD RS-232 HA DEFINITO DELLE CONVENZIONI CHE UNIFORMANO LA COMUNICAZIONE SERIALE.
PARLARE LA STESSA LINGUA SIGNIFICA IMPOSTARE ALLO STESSO MODO I PARAMETRI DEL
PROTOCOLLO
Torna
all'indice
Il DOS dispone dell'interrupt 21h servizo 75 che accede alla porta seriale, ma è inefficiente e poco documentato, quindi sconsigliato.
Il BIOS dispone di una serie interrupt 14h che permettono di impostare, leggere e scrivere la porta seriale. Questi interrupt presentano alcune carenze, soprattutto ad alte velocità (baud > 1200).
Attualmente il metodo più efficiente per ricevere e trasmettere ad alta velocità è quello di accedere direttamente ai registri della porta seriale.
I personal computer sono dotati di un microprocessore dedicato alle trasmissioni seriali (8250 UART), al quale si può accedere direttamente con istruzioni di I/O
Registro | Abbrev | Offset | Direzione |
trasmissione TRANSMITTER HOLDING REGISTER |
THR | 0F8h | output |
ricezione READ DATA REGISTER |
RHR | 0F8h | output |
div.baud LSB BAUD RATE DIVISOR |
BRD | 0F8h | output |
div.baud MSB BAUD RATE DIVISOR |
BRD | 0F9h | output |
abilitazione Interrupt INTERRUPT ENABLE REGISTER |
IER | 0F9h | output |
riconoscimento Interrupt INTERRUPT ID REGISTER |
IIR | 0FAh | input |
controllo linea LINE CONTROL REGISTER |
LCR | 0FBh | output |
controllo modem MODEM CONTROL REGISTER |
MCR | 0FCh | output |
stato linea LINE STATUS REGISTER |
LSR | 0FDh | intput |
stato modem MODEM STATUS REGISTER |
MSR | 0FEh | intput |
I REGISTRI DELLA UART-COM1 NORMALMENTE HANNO BASE IN 300h (200h PER COM2)
THR:Contiene il carattere da trasmettere. Prima di scrivere un nuovo carattere testare il bit 5 di LSR
RDR: contiene il carattere ricevuto che viene mantenuto fino a quando ne giunge uno nuovo. Il bit 0 di LSR indica se è giunto un nuovo carattere. Il bit 1 di LSR indica che il carattere precedente non è stato letto.
BRD: la velocità di trasmissione è data da:
BRD-LSB: condivide il registro xF8 con THR e RDR. Prima di scrivere BRD-LSB è necessario impostare il bit 7 (DLAB) di LSR. DLAB viene azzerato scrivendo in BRD-MSB.
IER: E' possibile far generare dal PIC un interrupt (IRQ*) quando si verificano le seguenti condizioni:
IIR:questo registro permette di identificare quale dei quattro casi ha generato l'interrupt corrente (bit 1,2). Inoltre indica anche se c'è un INT pendente (bit 0 = 0).
b2,b1 | TIPO INTERRUPT | PRIORITA' | RESET CON: |
00 | modem status change | 3 (low) | read MSR |
01 | transmit-register-empty | 2 | write THR |
10 | data-available | 1 | read LDR |
11 | line-status | 0 (high) | read LSR |
LCR:permette di impostare i parametri del protocollo.
b7....b0 76543210 ¦¦¦¦¦¦++-- lunghezza parola ¦¦¦¦¦¦ 00 = 5 bits (bit1=1 -> 1.5 bit di stop) ¦¦¦¦¦¦ 01 = 6 bits ¦¦¦¦¦¦ 10 = 7 bits ¦¦¦¦¦¦ 11 = 8 bits ¦¦¦¦¦+---- 0 = 1 stop bit, 1 = 1.5 or 2 ¦¦¦¦+----- 0 = no parity generated, 1 =parity generated ¦¦¦+------ 0 = parita dispari, 1 = parita pari ¦¦+------- 0 = parity disabled,1 = enabled ¦+-------- 0 = turn break off, 1 = force spacing break state +--------- 1 = baud rate divisor (DLAB); 0 = RDR, THR or IER
MCR: Questo registro controlla i segnali Data Terminal Ready (DTR bit 0), e Request To Send (RTS bit 1). Inoltre il bit 3 se alto permette agli int generati dal UART di essere ascoltati dal PIC. Per una comunicazione Interrupt Driven MCR deve essere impostato a: 0000 1011 (0Bh)
LSR: Questo registro contiene informazioni relativi ai dati in transito (in/out). Il bit 0 = 1 se è arrivato un carattere. Viene azzerato leggendo in RDR i bit 1,2,3,4 indicano diverse condizione di errore Il bit 5 = 1 se THR è vuoto (THR-E). Viene azzerato scrivendo in THR
MSR: contiene lo stato dei segnali modem. I primi quattro
bit sono 1 se i segnali collegati hanno cambiato il loro stato dall'ultima volta
che sono stati letti dalla cpu.
Torna all'indice
POLLING: Lettura continua de LSR. Se arrivato un nuovo
carattere, viene computato (almeno memorizzato)
VANTAGGI: Semplicità
di implementazione
PROBLEMI:Sincronismo,velocità,interoperabilità
INTERRUPT DRIVEN: ad ogni carattere arrivato, viene generata
una interruzione del processo corrente. Questa và riprogrammata per memorizzare
il nuovo carattere. Un secondo processo può computare il carattere
memorizzato:
VANTAGGI:velocità, interoperabilità, computazione e
ricezione sono disaccopiati con un buffer FIFO
PROBLEMI: conoscenza
dettagliata dell'UART
UN BUFFER CIRCOLARE E' DOTATO DI DUE PUNTATORI. UNO RELATIVO AL PROSSIMO CARATTERE DA SCRIVERE (BufIn), ED UNO PER IL PROSSIMO CARATTERE DA LEGGERE (BufOut).
QUANDO UNO DEI PUNTATORI RAGGIUNGE LA FINE DEL BUFFER, ALLORA VIENE MESSO A 0 (QUINDI CIRCOLARE)
QUANDO I DUE PUNTATORI COINCIDONO ALLORA IL BUFFER E' VUOTO.
QUANDO IL PUNTATORE DI SCRITTURA RAGGIUNGE QUELLO DI LETTURA, ALLORA IL BUFFER E' PIENO ALLORA SI PERDONO DATI
PROBLEMA !! DIMENSIONARE IL BUFFER IN MODO CHE NON SIA MAI
PIENO
Torna all'indice
TERMINAL E' UN SEMPLICE MODULO DI TRASMISSIONE RICEZIONE SU PORTA SERIALE
PERMETTE:
MIGLIORAMENTI:
ESPORTA:
NOTA: Il modulo terminal è composto dai file TERMINAL.H da includere nel programma utente e TERMINAL.C da compilare e linkare con il programma utenete. Il file PRVTM.C è un semplice programma per la prova del modulo TERMINAL
[Home Page] [System Control] [Robotic & Image processing] [Applicazioni Speciali] [Didattica] [Networking] [Code Developing] [Search]