PkLab.net
Meccatronica
Italy - Basilicata - Matera
 
Robotica&Image processing Sistemi di controllo Applicazioni speciali Networking Didattica
 
Home e contatti

LA PORTA SERIALE

Nota: questo materiale č di proprietą di Pk Lab ed č utilizzabile liberamente a condizione di citarne la fonte

INDICE:

Introduzione

DISPOSITIVO PER IL COLLEGAMENTO DEL COMPUTER AD ALTRI COMPUTER O PERIFERICHE, COME MODEM O MACCHINE CONTROLLO NUMERICO

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

Protocollo di comunicazione

PRIMA CHE DUE COMPUTER (O ALTRO) POSSANO COMUNICARE, E' NECESSARIO CHE PARLINO LA STESSA LINGUA.
  • A CHE VELOCITA' VENGONO TRASMESSI I BIT ?
  • DA QUANTI BIT E' COMPOSTA UNA PAROLA ?
  • COME FARE PER VERIFICARE CHE QUELLO CHE E' STATO RICEVUTO E' PROPRIO QUELLO CHE E' STATO TRASMESSO ??

LO STANDARD RS-232 HA DEFINITO DELLE CONVENZIONI CHE UNIFORMANO LA COMUNICAZIONE SERIALE.

  • BAUD RATE: Velocità di trasmissione in bit/s (50..115200 bit/s)
  • WORD LENGTH: Numero di bit che compongono una parola (5,6,7,8 bit)
  • STOP BITS: Numero di bit usati per separare due parole consecutive (1,2 bit)
  • PARITY: bit opzionale utilizzato per fare una verifica sull'integrità della parola trasmessa (pari, dispari,nessuna)

PARLARE LA STESSA LINGUA SIGNIFICA IMPOSTARE ALLO STESSO MODO I PARAMETRI DEL PROTOCOLLO
Torna all'indice

Accesso alla porta seriale

  • IMPOSTAZIONE DEL PROTOCOLLO
  • IMPOSTAZIONE ALTRI SERVIZI LOCALI (indipendenti dal protocollo)
E' possibile accedere alla porta seriale attraverso:
  • Interrupt DOS
  • Interrupt BIOS
  • Accesso diretto alla porta

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


Torna all'indice

I registri UART

RegistroAbbrevOffsetDirezione
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:

BaudRate = 1,843,200/(divisore x 16)
divisore = 1,843,200/(BaudRate x 16)

i due registri BRD contengono il divisore a 16 bit.I valori validi per BaudRate sono: 50,110,150,300,600,1200,1800,2000,2400,3600,4800,7200,9200,9600,38400,115200.

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:

  1. RDR pieno (è arrivato un carattere) (bit 0)
  2. THR è vuoto (buffer trs vuoto) (bit 1)
  3. errore sulla linea (bit 2)
  4. è cambiato lo stato del modem (bit 3)
1 = interrupt abilitato
*IRQ4 (INT 0Ch) per COM1, IRQ3 (INT 0Bh) per COM2.

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,b1TIPO INTERRUPTPRIORITA'RESET CON:
00modem status change3 (low) read MSR
01transmit-register-empty2write THR
10data-available1read LDR
11line-status0 (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

Software di comunicazione

PROBLEMA PRINCIPALE DELLA COMUNICAZIONE E' LA RICEZIONE

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

Coda FIFO (buffer circolare)

UNA CODA FIFO PUO' ESSERE IMPLEMENTATA COME UN BUFFER (ARRAY) CIRCOLARE.

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

Esempio di un sw di comunicazione - Modulo Terminal

view source code

TERMINAL E' UN SEMPLICE MODULO DI TRASMISSIONE RICEZIONE SU PORTA SERIALE

PERMETTE:

  • Trasmissione e ricezione contemporanea
  • Ricezione interrupt driven
  • Buffer circolare non accessibile ma dimensionabile dall'utente

MIGLIORAMENTI:

  • Impostazione del protocollo con accesso diretto alla porta, per avere velocitą fino a 115200 baud/s
  • Distinzione degli errori sulla linea
  • Verifica sulla presenza di portante prima di trasmettere
  • Buffer dinamico in fase di ricezione
  • Disposizione di "sensori" del traffico
  • ....

ESPORTA:

  • Simboli per la definizione del protocollo
  • Funzioni di attivazione e disattivazione del modulo (TerminalOn e TerminalOFF)
  • Funzione di variazione protocollo (SetPort)
  • Funzione di Lettura dal buffer circolare (LeggiDatoDaBuffer)
  • Funzione di trasmissione (Trasmetti)
FUNZIONI INTERNE:
  • Attivazione e disattivazione delle porte seriali (ComON e ComOFF)
  • Interrupt per la gestione della ricezione (ReadRS232)
DATI INTERNI:
  • Simboli offset indirizzi registri UART
  • Stato del sistema TERMINAL (ON OFF)
  • Buffer circolare (array di unsigned char)
  • Puntatori in lettura e scrittura buffer
  • Indirizzo base porta seriale selezionata
  • Indirizzo vecchio vettore interrupt per la porta selezionata

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


Torna all'indice


Il PKLAB aderisce ai principi Open Access della Dichiarazione di Berlino (Sito italiano)
[Home Page]  [System Control]   [Robotic & Image processing]   [Applicazioni Speciali]  [Didattica]   [Networking]   [Search]

Contatto:
Valid CSS!