Make your own free website on Tripod.com

Seri Port

Ana Sayfa Sonraki

fireline1x1.gif (42308 bytes)

 

SERİ PORT  ( RS232 )

 

Giriş

 

BÖLÜM 1 :   DONANIM ( PC’lerde )

Donanım Özellikleri

Pin Fonksiyonları

Null Modemler

Döngü Sınama Fişi

DTE / DCE Hızları

Akış Kontrolü

UART  ( 8250 Uyumlu )

UART Tipleri ( PC’ler için )

 

BÖLÜM 2 : SERİ PORT KAYDEDİCİLERİ

Port Adresleri ve IRQ’lar

Register Tablosu

DLAB ( Divisor Latch Access Bit )

Interrupt Enable Register (IER)

Interrupt Identification Register (IIR)

First In / First Out Control Register (FCR)

Line Control Register ( LCR )

Modem Control Register ( MCR )

Line Status Register ( LSR )

Modem Status Register ( MSR )

Scratch Register (Çalışma Kaydedicisi)

 

BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASI  ( PC’lerde )

Sorgulama veya Kesme ?

Termpoll.c – Sorgulama (Polling) Kullanan Bir Haberleşme Program Örneği

Buff1024.c – Kesme Güdümlü Örnek Bir Haberleşme Programı

Kesme Vektörleri ( Interrupt Vectors )

Interrupt Service Routine (ISR)

UART Konfigurasyonu

Yazılım Yolu ile UART Tipinin Belirlenmesi

 

BÖLÜM 4 : RS-232 PORTU ile AYGITLARIN HABERLEŞMESİ

RS-232 Dalga Şekilleri

RS-232 Seviye Dönüştürücüleri

8250 Uyumlu UART’lar

CDP6402, AY-5-1015 / D36402R-9 ve Diğer UART’lar

 

 

Giriş

Seri Port ile haberleşmek Paralel Porta göre daha zordur. Çoğu zaman, seri porta bağlanan bir aygıtın kullanılabilmesi için, yine paralele dönüştürülecek, seri iletime ihtiyaç vardır. Bu UART ( Universal Asynvhronous Receive Transmit ) kullanılarak yapılabilir. Yazılım açısından bakılınca da Standart Paralel Porta (SPP) ulaşırken kullanılan register'lardan çok daha fazlası kullanılmaktadır.

Seri veri transferinin paralele göre avantajları şunlardır :

  1. Seri kablolar paralel kablolardan uzun olabilir. Seri port kullanımında '1' biti -3 'ten
    -25 volta, '0' biti de +3'ten +25 volta kadar temsil edilir. Paralel port kullanımında ise '0'
    0 volt, '1' ise 5 volt olarak temsil edilir. Bundan dolayı, paralel porttaki maksimum
    salınım 5 volt iken seri portta bu 50 volta kadar çıkmaktadır. Bu nedenle seri portta
    kablodaki gerilim kaybı paralel porttaki kadar fazla sorun oluşturmaz.

  2. Paralel iletimdeki kadar çok kabloya ihtiyaç duyulmaz. Eğer aygıtın bilgisayardan oldukça
    uzak bir mesafede kurulması gerekirse 3 kablo kullanmak, paralel iletimdeki gibi 19 veya
    25 kablo kullanmaktansa daha ucuzdur. Bununla birlikte her uçtaki arabirim maliyeti
    gözardı edilmemelidir.

  3. Infra Red ( Kızıl Ötesi) aygıtlar son zamanlarda oldukça yaygın. Kızıl ötesi özelliği olan
    elektronik günlükler veya cep bilgisayarları görmüş olabilirsiniz. Bununla birlikte,8 bitlik bir verinin aynı anda bir oda içinde iletilirken, aygıtın hangi bitin ne olduğunu
    anlamasının imkansız olduğu açıktır. Bundan dolayı bir bit gönderildiğinde seri iletişim
    kullanılır. IrDA-1 ( ilk infra red özelliklerinden ) 115.2k baud 'tur ve UART'a bağlıdır.
    Bununla birlikte, bu aygıtların genellikle elektronik günlüklerde, dizüstü veya avuçiçi
    bilgisayarlarda kullanıldığını varsayarak, gücü muhafaza etmek için RS232 bit
    uzunluğunun 3/16 'sına kısaltılmıştır.

  4. Mikrodenetleyici kullanımı da günümüzde artmıştır. Bunların birçoğu dış dünya ile
    iletişim kurabilecek SCI ( Serial Communication Interface - Seri İletişim Arabirimi )
    ünitelerine sahiptir. Seri iletişim bu mikrodenetleyicilerdeki pin sayısını azaltır. 8 bitlik
    paralel iletimde 8 pin kullanılmasına karşın, seri iletimde yalnızca iki pin ortak olarak
    kullanılır, Transmit Data (TxD) ve Receive Data (RxD) ( Strobe ucuna da ihtiyaç
    duyulabilir).

Sayfa Başına Dön

BÖLÜM 1 :   DONANIM ( PC’lerde )

Donanım Özellikleri

Seri iletişim kullanan aygıtlar iki sınıfa ayrılır. Bunlar DCE ( Data Communications Equipment – Veri İletim Cihazları ) ve DTE ( Data Terminal Equipment – Veri Terminal Cihazları ). Veri İletim Cihazları için modem, TA adaptörü, plotter örnek olarak verilebilir. Bilgisayar veya terminal Veri Terminal Cihazları sınıfına girer. Seri portun elektriksel özellikleri EIA ( Electronic Industries Association  – Elektronik Sanayi Birliği ) RS232 standardı tarafından belirlenir. Bu standartın bazı parametreleri aşağıdaki gibidir :

  1. "Logic 0 " +3 ile +25 volt arasındadır.

  2. "Logic 1" -3 ile -25 volt arasındadır.

  3. +3 ile -3 arasındaki bölge tanımsızdır.

  4. Açık devre voltajı 25 voltu asla aşmamalıdır ( GND referans alınarak ).

  5. Kısa devre akımı 500mA aşmamalıdır. Aygıt bu akımla, devre zarar görmeden çalışabilmelidir.

Yukarıda sayılan özellikler EIA standardı tam listesinin çok küçük bir kısmıdır. Ayrıca RS232C standardının maksimum baud rate olarak bugünkü standartlardan oldukça yavaş olan 20,000 bps ‘i desteklemesi ilginçtir. Yenilenmiş standartlar, EIA-232D ve EIA-232E sırasıyla 1987 ve 1991 yıllarında çıkmıştır.

Seri portlar iki şekilde olurlar : D Tipi 25 pin connetcor ve D Tipi 9 pin connector vardır. Bunlar PC’nin arkasında erkek connector olarak yerleştirilirler ve seri porta bir aygıt bağlamak için dişi connector’e ihtiyaç duyulur. Aşağıda 9 pin ve 25 pin D-tipi connector’lerin pin bağlantıları verilmiştir.

 

 

 

D-Tipi 25 pin
No.

D-Tipi 9 pin
No.

Kısaltma

Adı

Pin 2

Pin 3

TD

Transmit Data ( Veri Gönder )

Pin 3

Pin 2

RD

Receive Data ( Veri Al )

Pin 4

Pin 7

RTS

Request To Send ( Gönderme İsteği )

Pin 5

Pin 8

CTS

Clear To Send (Göndermeye Müsait )

Pin 6

Pin 6

DSR

Data Set Ready ( Veri Paketi Hazır )

Pin 7

Pin 5

SG

Signal Ground ( Sinyal Topraklama )

Pin 8

Pin 1

CD

Carrier Detect ( Taşıyıcı Tanımlandı)

Pin20

Pin 4

DTR

Data Terminal Ready ( Veri Terminali Hazır )

Pin 22

Pin 9

RI

Ring Indicator ( Çevrim Göstergesi )

Tablo1. D Tipi 9 pin ve D Tipi 25 pin Connectorler

Pin Fonksiyonları

Kısaltma

Adı

Fonksiyonu

TD

Transmit Data

Seri Veri Çıkışı (TxD)

RD

Receive Data

Seri Veri Girişi (RxD)

CTS

Clear To Send

Bu hat seri portun veriyi göndermek için hazır olup olmadığını belirler.

DCD

Data Carrier Detect

Seri port telefon hattının diğer ucundaki portta bir taşıyıcı (Carrier) tespit ettiğinde hat aktif olur.

DSR

Data Set Ready

UART’a modemin bağlantı için hazır olduğunu belirtir.

DTR

Data Terminal Ready

DSR’nin tersini yapar. Modeme UART’ın bağlantı için hazır olduğunu belirtir.

RTS

Request To Send

Modeme, UART’ın veriyi göndermek için hazır olduğunu belirtir.

RI

Ring Indicator

Modem, PSTN’den bir çevrim sinyali tespit ettiğinde aktif duruma geçer.

 

Sayfa Başına Dön

Null Modemler

Null Modem iki DTE’yi birbirine bağlamak için kullanılır. Bu yöntem, network oyunları ya da Zmodem Protocol, Xmodem Protocol gibi protokoller kullanarak bilgisayarlar arasında dosya transfer etmek için oldukça ucuzdur. Ayrıca birçok Mikroişlemci Geliştirme Sistemleri ile birlikte kullanılabilir.

                                        Şekil 1. Null Modem Bağlantı Şeması

Yukarıda en çok tercih edilen Null Modem bağlantısı verilmiştir. Yalnızca 3 tel uzatılmış olması uzun bağlantılar için maliyeti düşürür. İşlemin teorisi oldukça basittir. Hedef, bilgisayarın bilgileri bir başka bilgisayara değil de bir modeme ilettiğini düşündürmektir. Birinci bilgisayardan gönderilen herhangi bir veri ikinciye ulaşması için TD çıkışı diğer bilgisayarın RD girişine bağlanmalıdır. İkinci bilgisayarın da aynı şekilde TD ucu birinci bilgisayarın RD ucuna bağlanır. Son olarak da SG uçları birbirine bağlanır.

Her iki bilgisayarda da Data Terminal Ready çıkışı, Data Set Ready ve Carrier Detect ucuna uygulanmıştır. Data Terminal Ready aktif olduğunda Data Set Ready ve Carrier Detect hemen aktif duruma geçerler. Bu durumda bilgisayar, bağlı olduğu Sanal Modemin hazır olduğunu bu modem için taşıyıcı  (carier) tespit ettiğini düşünür.

Bu işlemlerden sonra Request To Send ve Clear To Send çıkışları kaldı. İki bilgisayar aynı hız ile haberleştiklerinden akış kontrolüne ihtiyaç duyulmaz ve böylece her iki bilgisayarda da bu iki çıkış birbirine bağlanır. Bilgisayar veri göndermek istediğinde, Request To Send sinyali üretir. Bu sinyal direkt olarak Clear To Send çıkışına varacağından, verinin gönderilmeye hazır olduğu cevabını hemen alır ve işlem gerçekleştirilir.

Sayfa Başına Dön

Döngü Sınama Fişi

Döngü Sınama Fişi

        Bu döngü sınama fişi Seri/RS232 Haberleşme
        Programları yazarken çok kullanışlı olabilir.
        Seri porttan gönderilen bir verinin aynı porttan hemen
        alınmasını sağlamak için TD ve RD birbirine
        bağlanmıştır. Eğer bu fişi seri porta takıp Terminal
        Programını yüklerseniz, herhangi bir şey yazdığınızda
        hemen ekranda görüntülenir.

Şekil 2. Döngü Sınama Fişi Bağlantısı

Sayfa Başına Dön

DTE / DCE Hızları

DTE ve DCE hakkında daha önce de bahsetmiştik. Bilgisayar tipik bir Veri Terminal Aygıtı iken modem tipik bir Veri Haberleşme Aygıtıdır. DTE’den DCE’ye olan hız bilgisayar ile modem arasında olan hızdır ve bazen terminal hızı olarak adlandırılır. Bu hız DCE’den DCE’ye ( modemler arasındaki bağlantı ) olan hızdan daha büyük olmalıdır.

Günümüzde genellikle 33.6K veya 56K’lık modemler kullanılmaktadır. Bundan dolayı DCE’den DCE’ye olan hız da 33.6K veya 56K olmalı. Modemin yüksek hızı göz önünde bulundurularak DTE’den DCE’ye hızın da yaklaşık olarak 115,200 bps olması beklenir (16550a UART’ın maksimum hızı). Çoğu kimsenin yanıldığı nokta da bu. Kullanılan haberleşme programı DCE’den DTE’ye olan hızla ilgili ayarlar içerir. Fakat bu 28.8K , 33.6K vs. olarak görülür ve modem hızı sanılır.

Günümüzde kullanılan modemler Veri Sıkıştırma Ünitesi içerir. Bu ünite doğru olarak kurulduğunda 1:4 , hatta daha fazla sıkıştırma beklenebilir. 1: 4 sıkıştırma text dosyaları için idealdir. Eğer bir text dosya 28.8K hızla (DCE-DCE) transfer edilirse modem bu dosyayı sıkıştırır ve bilgisayarlar arasında gerçekte 115.2 Kbps ile iletilir. Böylece DCE-DTE hızı 115.2 Kbps olur. DCE-DTE hızının modem bağlantı hızından çok daha büyük olmasının nedeni de budur.

Yeni modemlerle birlikte veri sıkıştırma oranı da yükselmiştir. Örnek olarak 33.6 Kbps bir modem 1:8 sıkıştırma oranı kullansın. Böylece modem ile UART arasındaki maksimum transfer hızı da 268,800 bps olur. Eğer maksimum transfer hızı 16550a olan UART kullanıyorsanız modem tam bir verimle çalışmayacaktır. Maksimum transfer oranı 230,400 bps olan bir 16C650 UART kullanmak bu sorunu çözecektir.

Sayfa Başına Dön

Akış Kontrolü

Veri iletimi sırasında tampon belekteki taşmalardan dolayı oluşan veri kaybını engellemek için akış kontrolü kullanılır. Akış kontrolü iki yolla yapılır, Yazlım ve Donanım.

Akış kontrol yazılımı Xon ve Xoff olmak üzere iki karakter kullanır. Xon genelde ASCII 17 karakteri ile belirtilirken, Xoff ASCII 19 karakteri ile belirtilir. Modeme ait tampon bellek dolduğunda bilgisayarın daha fazla veri göndermemesi için modem Xoff sinyali üretir. Modemde daha fazla veri için bellek varsa veri gönderilmesi için Xon sinyali üretilir. Bu tip akış kontrolünün avantajı karakterlerin RD ve TD hatlarından gönderilmesi ve fazladan kablo bağlantısına ihtiyaç duyulmamasıdır. Bununla birlikte her karakter 10 bitlik bir iletim gerektirdiğinden bağlantıyı yavaşlatır.

Akış kontrol donanımı RTS/CTS akış kontrolü olarak da bilinir. Bu yöntemde veri hatlarının karakter iletimi ile meşgul edilmesi yerine iki adet seri kablo bağlanır. Bu şekilde akış kontrol donanımı veri iletimini yavaşlatmaz. Bilgisayar veri göndermek istediği zaman Request To Send (Gönderme İsteği) sinyali üretir. Modem bu veriyi kabul edebilecek durumda ise Clear To Send sinyali üretir ve bilgisayar veriyi göndermeye başlar.

Sayfa Başına Dön

UART  ( 8250 Uyumlu )

16450, 16550, 16650 ve 16750 ‘yi içeren 8250 serisi PC’lerde en çok kullanılan UART tipidir.

Şekil 3. 16550, 16450 ve 8250 UART için Pin Bağlantıları

16550 yongası, 8250 ve 16450 uyumludur. Aradaki fark 24 ve 29 pinleridir. 8250’de Pin 24 Chip Select ucudur ve yalnızca chip’in aktif olup olmadığını gösterir. 8250/16450 UART’larda Pin 29 bağlanmamıştır. 16550’de bunların yerine iki pin kullanılmıştır. Bunlar DMA (Direct Memory Access) ile birlikte kullanılabilecek olan Transmit Ready (İletime Hazır) ve Receive Ready (Almaya Hazır) çıkışlarıdır. Bu pinler iki ayrı işlem moduna sahiptir. Mode 0 tek DMA transferini desteklerken Mode 1 Multi DMA transferini destekler.

Tüm UART pinleri (TD, RD, RI, DCD, DSR, CTS, DTR ve RTS dahil ) TTL uyumludur. Bundan dolayı RS232 Seviye Dönüştürücülerine ihtiyaç duyulur. Genellikle DS1489 Receiver ve DS1488 kullanılır. RS232 dönüştürücüleri TTL sinyalini RS232 standardına çevirirler.

Pin.No

Adı

Açıklama

Pin 1:8

D0:D7

Data Bus

Pin 9

RCLK

Receiver Clock Input. Bu girişin frekansı alıcının baud rate’in 16 katına eşit olmak zorundadır.

Pin 10

RD

Receive Data

Pin 11

TD

Transmit Data

Pin 12

CS0

Chip Select 0 - Active High

Pin 13

CS1

Chip Select 1 - Active High

Pin 14

nCS2

Chip Select 2 - Active Low

Pin 15

nBAUDOUT

Baud Output. Programlanabilir baud rate üreteci çıkışı Frekans= (baud rate * 16)

Pin 16

XIN

External Crystal Input. Baud Rate üreteci osilatorü için kullanılır.

Pin 17

XOUT

External Crystal Output

Pin 18

nWR

Write Line – Eviren

Pin 19

WR

Write Line – Evirmeyen

Pin 20

VSS

Ortak Ground ucuna bağlanır

Pin 21

RD

Read Line – Eviren

Pin 22

NRD

Read Line – Evirmeyen

Pin 23

DDIS

Driver Disable.CPU UART’tan bilgi okurken bu pin aktif 0 olur.

Pin 24

nTXRDY

Transmit Ready

Pin 25

nADS

Address Strobe. Okuma veya yazma işleminde sinyal sabit değil ise kullanılır.

Pin 26

A2

Address Bit 2

Pin 27

A1

Address Bit 1

Pin 28

A0

Address Bit 0

Pin 29

nRXRDY

Receive Ready

Pin 30

INTR

Interrupt Output

Pin 31

nOUT2

User Output 2

Pin 32

nRTS

Request to Send

Pin 33

nDTR

Data Terminal Ready

Pin34

nOUT1

User Output 1

Pin 35

MR

Master Reset

Pin 36

nCTS

Clear To Send

Pin 37

nDSR

Data Set Ready

Pin 38

nDCD

Data Carrier Detect

Pin 39

nRI

Ring Indicator

Pin 40

VDD

+ 5 Volt

Tablo 2: 16550A UART Pin Bağlantıları

UART’ın çalışması için Clock girişine ihtiyaç duyulur. Seri porta ait kart üzerinde genellikle 1.8432 MHz veya 18.432 MHz ‘lik bir kristal bulunur. Kristal, osilasyona başlamasını sağlayan birkaç bileşen ile birlikte UART’ın Xin-Xout pinlerine bağlanır. Clock girişi, alıcı zamanlama devrelerine değil de iletim zamanlama devrelerine direkt olarak arabirim oluşturan Programlanabilir Baud Rate Üreteci için kullanılır. Bunun için pin 15‘ten (baudout) pin 9’a (alıcı clock girişi) harici bir bağlantı yapmak gerekir. Clock sinyalinin Baudrate*16 olması gerektiğine dikkat edin.

Sayfa Başına Dön

UART Tipleri ( PC’ler için )

8250             Bu serideki ilk UART. Çalışma kaydedicisi içermez.

8250A         8250’nin geliştirilmiş versiyonudur.

8250B         8250’ye çok benzer.

16450         AT bilgisayarlarda kullanılmaktadır. Hat iletimi 8250’ye göre hızlandırılmıştır.

                   38.4 Kbps’de oldukça verimli çalışır. Günümüzde hala kullanılmaktadır.

16550         Tampon belleğe sahip ilk UART’lardandır.

16550A      14.4K ve 28.8 K modemlerde çok kullanılır. Bu tip UART’larda FIFO daha

                   etkili çalışır.

16650         32 byte’lık FIFO, programlanabilir X-on / X-off karakterleri içerir ve güç

                    yönetimini destekler.

16750         Texas Instruments tarafından geliştirilmiştir. 64 byte’lık bir FIFO içerir.

 

Sayfa Başına Dön

 

BÖLÜM 2 : SERİ PORT KAYDEDİCİLERİ

Port Adresleri ve IRQ’lar

Adı

Adres

IRQ

COM 1

3F8

4

COM 2

2F8

3

COM 3

3E8

4

COM 4

2E8

3

Tablo 3: Standart Port Adresleri

Yukarıda standart port adresleri verilmiştir. Eğer micro-channel özelliği olan IBM P/S2 bir bilgisayara sahipseniz adres ve IRQ’lar da farklı olacaktır. LPT portları gibi COM portların taban adresleri de BIOS Veri Alanından okunabilir.

Başlangıç Adresi

Fonksiyonu

0000:0400

COM 1 Taban Adresi

0000:0402

COM 2 Taban Adresi

0000:0404

COM 3 Taban Adresi

0000:0406

COM 4 Taban Adresi

Tablo 4: BIOS Veri Alanındaki COM Port Adresleri

Yukarıdaki tablo BIOS Veri Alanında da bulabileceğimiz COM Port adreslerini göstermektedir. Her adres 2 byte yer tutmaktadır. C’de yazılmış olan aşağıdaki program, bu bölgedeki adreslerin nasıl okunacağını gösterir.

#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr; /* Port Adreslerinin bulunduğu
                                      bölgeye ait pointer */
unsigned int address;        /* Port Adresi */
int a;

ptraddr=(unsigned int far *)0x00000400;

for (a = 0; a < 4; a++)
   {
     address = *ptraddr;
     if (address == 0)
            printf("COM%d için port bulunamadı \n",a+1);
     else
            printf("COM%d 'e bağlı adres %Xh\n",a+1,address);
     *ptraddr++;
    }
}

Sayfa Başına Dön


Register Tablosu

 

Taban Adres

DLAB

Read/Write

Kıs.

Register Adı

+0

=0

Write

-

Transmitter Holding Buffer

=0

Read

-

Receiver Buffer

=1

Read/Write

-

Divisor Latch Low Byte

+1

=0

Read/Write

IER

Interrupt Enable Register

=1

Read/Write

-

Divisor Latch High Byte

+2

-

Read

IIR

Interrupt Identification Register

-

Write

FCR

FIFO Control Register

+3

-

Read/Write

LCR

Line Control Register

+4

-

Read/Write

MCR

Modem Control Register

+5

-

Read

LSR

Line Status Register

+6

-

Read

MSR

Modem Status Register

+7

-

Read/Write

-

Scratch Register

Tablo 5: Register Tablosu

Sayfa Başına Dön

DLAB  ( Divisor Latch Access Bit )

Register tablosunda DLAB sütunu da yer almaktadır. DLAB ‘0’ veya ‘1’ olduğunda bazı registerların içeriği değişmektedir. Bu şekilde UART 8 port adresinde 12 ayrı registera (scatch register dahil) sahip olabilir.

Interrupt Enable Register   (IER)

Bit

ıklama

Bit 7

Reserved

Bit 6

Reserved

Bit 5

Enables Low Power Mode (16750)

Bit 4

Enables Sleep Mode (16750)

Bit 3

Enable Modem Status Interrupt

Bit 2

Enable Receiver Line Status Interrupt

Bit 1

Enable Transmitter Holding Register Empty Interrupt

Bit 0

Enable Received Data Available Interrupt

             Tablo 6: Interrupt Enable Register

Receiving register/FIFO CPU tarfından okunacak bir bilgi içerirken Bit 0’ı High konumuna getirmek Received Data Available Interrupt’ı etinleştirir ve interrupt oluşur.

Interrupt Identification Register (IIR)

Bit

Açıklama

Bit 6 : 7

Bit 6

Bit 7

 

0

0

No FIFO

0

1

FIFO Enabled but Unusable

1

1

FIFO Enabled

Bit 5

64 Byte Fifo Enabled (16750 only)

Bit 4

Reserved

Bit 3

0

Reserved on 8250, 16450

1

16550 Time-out Interrupt Pending

Bit 1:2

Bit 2

Bit 1

 

0

0

Modem Status Interrupt

0

1

Transmitter Holding Register Empty Interrupt

1

0

Received Data Available Interrupt

1

1

Receiver Line Status Interrupt

Bit 0

0

Interrupt Pending

1

No Interrupt Pending

Tablo 7: Interrupt Identification Register

Interrupt Identification Register ( Kesme Belirleme Kaydedicisi ) salt okunur özelliğindedir. Bit 6 ve 7 FIFO Buffer’ın durumunu verirler. Her iki bit de ‘0’ ise aktif FIFO Buffer’ı yoktur. Eğer Bit 7 aktif Bit 6 aktif değil ise UART buffer’ları etkin hale gelir fakat kullanılamaz. Her iki bit de ‘1’ olduğunda hem aktif hem de kullanılabilir duruma gelirler.

Bit 4 ve Bit 5 ayrılmıştır. Bit 3 16550 ve yüksek modellerinde time-out kesmesinin durumunu gösterir.

Bit 0 kesmenin gerçekleşip gerçekleşmediğini gösterir. Gerçekleşen bir kesmenin durumunu bit 1 ve 2 gösterir. Bu kesmeler öncelik durumuna göre çalışır. Line Status Interrupt en yüksek önceliğe sahiptir. Ondan sonra Data Available Interrupt, Transmit Register Empty Interrupt ve en düşük önceliğe sahip Modem Status Interrupt gelir.

Sayfa Başına Dön

First In / First Out Control Register (FCR)

Bit

ıklama

Bit 7

Bit 6

Interrupt Trigger Level

0

0

1 Byte

0

1

14 Byte

1

0

18 Byte

1

1

14 Byte

Bit 5

Enable 64 Byte FIFO (16750 only)

Bit 4

Reserved

Bit 3

DMA Mode Select.

Bit 2

Clear Transmit FIFO

Bit 1

Clear Receive FIFO

Bit 0

Enable FIFO's

        Tablo 8 : FIFO Control Register

FIFO (First In First Out ) kaydedicisi salt yazılır bir kaydedicidir ve 16550’den yüksek model UART’larda FIFO buffer’larını kontrol eder.

Bit 0 FIFO alma ve gönderme işlemini etkinleştirir. Bu bitin ‘0’ olması FIFO alma ve gönderme işlemini durdurur ve FIFO buffer’ları içindeki bilgi kaybolur.

Bit 1 ve 2 alma ve gönderme FIFO buffer’ların içeriğini siler. Bit 1 alma buffer’ından sorumlu iken Bit 2 gönderme buffer’ından sorumludur. Bu bitlerin ‘1’ olması yalnızca FIFO içeriğini temizler shift register’ları (kaydırma kaydediciler) etkilemez.

Bit 3 , 16550 ve üst model UART’larda DMA mod seçimini sağlar.

Bit 6 ve 7 Alıcı FIFO’daki tetikleme seviyesini belirler. Örneğin Bit 7 ‘1’ ve Bit 6 ‘0’ konumuna getirilirse tetikleme seviyesi 8 byte olur. Alıcı FIFO’daki veri 8 byte’a ulaştığında Received Data Availeble Interrupt üretilir.

Sayfa Başına Dön

Line Control Register  ( LCR – Hat Kontrol Kaydedicisi )

Bit

Açıklama

Bit 7

1

Divisor Latch Access Bit

0

Access to Receiver buffer, Transmitter buffer & Interrupt Enable Register

Bit 6

Set Break Enable

Bits 3 : 5

Bit 5

Bit 4

Bit 3

Parity Select

X

X

0

No Parity

0

0

1

Odd Parity

0

1

1

Even Parity

1

0

1

High Parity (Sticky)

1

1

1

Low Parity (Sticky)

Bit 2

Length of Stop Bit

0

One Stop Bit

1

2 Stop bits for words of length 6,7 or 8 bits or 1.5 Stop Bits for Word lengths of 5 bits.

Bits 0 : 1

Bit 1

Bit 0

Word Length

0

0

5 Bits

0

1

6 Bits

1

0

7 Bits

1

1

8 Bits

Tablo 9 : Line Control Register

LCR iletimdeki temel parametreleri düzenler. Bit 7 Divisor Latch Access Bit’idir. Bit 6 Durdurmayı (Break) etkinleştirir. Aktif olduğunda bilgilerin UART’tan alınmasını durdurur. Bu bit ‘0’ konumuna getirilirse Durdurma etkisiz hale gelir.

Bit 3,4 ve 5 parity seçerler. Bit 3 parity’nin kullanıp kullanılmayacağını belirler. Yani ‘0’ ise parity kullanılmaz, ‘1’ ise kullanılır.

Bit 2 stop bitinin uzunluğunu belirler. Bu bitin içeriği ‘0’ olduğunda bir stop biti, ‘1’ olduğunda ise kelime uzunluğuna göre ya 1.5 ya da 2 stop biti üretilir. Alıcının yalnızca ilk stop bitini kontrol ettiğine dikkat edin.

Bit 0 ve 1 kelime (word) uzunluğunu belirler. Günümüzde en çok 8 bitlik word kullanılmaktadır.

Sayfa Başına Dön

Modem Control Register (MCR)

Bit

ıklama

Bit 7

Reserved

Bit 6

Reserved

Bit 5

Autoflow Control Enabled (16750 only)

Bit 4

LoopBack Mode

Bit 3

Aux Output 2

Bit 2

Aux Output 1

Bit 1

Force Request to Send

Bit 0

Force Data Terminal Ready

        Tablo 10 : Modem Control Register

Modem kontrol register’ı hem okunabilir hem de yazılabilir özelliğindedir. 5, 6 ve 7 bitleri ayrılmıştır. Bit 4 döngü sınama modunu (Loopback) aktif duruma getirir. Bu modda verici seri çıkışı işaretleme konumuna getirilmiştir. Alıcı seri girişi bağlanmamıştır. Vericinin çıkışı alıcının girişine uygulanmıştır. DSR, CTS, RI ve DCD bağlı değildir. DTR, RTS, OUT1 ve OUT2 modem kontrol girişlerine bağlıdır. Bu durumda modem kontrol çıkışları etkisiz durumdadır. Bu modda iletilmek için vericinin register’ına yerleştirilen her veri aynı chip üzerinde bulunan alıcı devresi tarafından alınır ve receiver buffer’ında hazır bulunur. Bu yöntem UART’ın çalışmasını kontrol etmek için kullanılabilir.

Aux Output 2, UART-CPU işlemlerini kontrol eden harici bir devreye bağlanabilir. Aux Output 1 normalde bağlı değildir, fakat bazı kartlarda MIDI’lerde kullanılan 1.8432MHZ crystal ile 4MHZ crystal arasında seçim yapmak için kullanılır.

Sayfa Başına Dön

Line Status Register ( LSR - Hat Durum Kaydedicisi)

Bit

ıklama

Bit 7

Error in Received FIFO

Bit 6

Empty Data Holding Registers

Bit 5

Empty Transmitter Holding Register

Bit 4

Break Interrupt

Bit 3

Framing Error

Bit 2

Parity Error

Bit 1

Overrun Error

Bit 0

Data Ready

                    Tablo 11 : Line Status Register

Line Status Register salt okunur bir kaydedicidir. Bit 7 alınan FIFo bitindeki hatayı belirtir. FIFO’da tutulan byte üzerinde bir kesme, parite veya çerçeveleme hatası oluştuğunda Bit 7 “high” durumuna geçer.

Bit 6’nın değeri “1” olduğunda gönderme kaydedicisi (transmitter holding register) ve kaydırma kaydedicisinin (shift register) içerikleri boştur. UART’ın gönderme kaydedicisi paralel olarak gönderilecek bir sonraki biti saklar. Kaydırma kaydedicisi de bu biti tek hat üzerinden seri olarak gönderilecek şekle dönüştürür. Bit 5 “1” olduğu zaman yalnızca gönderme kaydedicisi boş olur. Bit 6 ile Bit 5 arasındaki fark şudur : Bit 6, gönderme kaydedicisi ve kaydırma kaydedicisi boş olduğunda seri dönüşüm olmaz ve bundan dolayı veri hattı üzerinde herhangi bir işlem yapılmaz. Bit 5 “1” değerini aldığında, gönderme kaydedicisi boş olur. Böylece başka bir bit veri portuna gönderilebilir fakat kaydırma kaydedicisi kullanılarak seri dönüşümler yapılabilir.

Durdurma kesmesi (break interrupt –Bit 4), alıcı veri hattının Logic “0” (boş) tutulduğu zamanın, tam bir kelimenin gönderilmesi için harcanan zamandan daha fazla olduğunda oluşur. Bu başlama biti, veri bitleri, parity bitleri ve durdurma bitini de içerir.

Çerçeveleme hatası (Framing Error - Bit 3), son bit durdurma biti (stop bit) olmadığı zaman oluşur. Bu durum zamanlama hatasından dolayı oluşabilir. Çerçeveleme hatası ile en sık, gönderilen verinin hızı ile UART’tan alınan verinin hızı farklı olan bilgisayar bağlantılarında null modem kullanıldığında ortaya çıkar.

Overrun hatası program porttan yeterince hızlı okuyamadığı zaman oluşur. Kaydedicideki değer okunmadan yeni bir bit gelirse son bit kaybolacağından işlem overrun hatası ile sonuçlanır.

Bit 0, verinin UART tarafından alındığını ve okunmak için alıcının buffer’ında tutulduğunu belirtir.

Sayfa Başına Dön

Modem Status Register  ( MSR – Modem Durum Kaydedicisi )

Bit

ıklama

Bit 7

Carrier Detect

Bit 6

Ring Indicator

Bit 5

Data Set Ready

Bit 4

Clear To Send

Bit 3

Delta Data Carrier Detect

Bit 2

Trailing Edge Ring Indicator

Bit 1

Delta Data Set Ready

Bit 0

Delta Clear to Send

            Tablo 12 : Modem Status Register

Modem Durum Kaydedicisindeki Bit 0, Clear To Sen hattındaki son okumadan itibaren değişimi gösterir. Bit 1 ve 3 için aynı durum söz konusudur. Bit 1 Data Set Ready

hattındaki değişimi gösterirken Bit 3 Data Carrier Detect hattındaki değişimi gösterir. Bit 2 Çevrim Göstergesinde (Ring Indicator) “low” seviyesinden “high” seviyesine geçişi gösterir.

Bit 4,5,6 ve 7 veri hatlarındaki okuma durumunu belirtir.

Scratch Register (Çalışma Kaydedicisi)

Çalışma kaydedicisi haberleşmeden çok bir veri bitinin yazılması için kullanılır. Tek kullanıldığı yer UART’ın 8250/8250B ya da 8250A/16450 ‘dan hangisi olduğunu tespit etmektir.

Sayfa Başına Dön

BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASI

Sorgulama veya Kesme ?

Bir haberleşme programı yazarken kullanılabilecek iki metod vardır. Yeni bir verinin mevcut olup olmadığını görmek için UART’ı sorgulayabilirsiniz veya UART’taki verinin bir kesme ürettiği zaman bu veriyi silecek bir kesme yöneticisi oluşturabilirsiniz. UART’ı sorgulamak işlemciye çok fazla iş yüklediği için oldukça yavaştır ve veriyi kaybetmeden önce maksimum 34.8 Kbps hızına ulaşmaktadır. Pentium Pro’dan sonra çıkan yeni işlemciler bu işi daha hızlı yapabilmektedirler. Diğer seçenek, ise bizim yaptığımız gibi, kesme yöneticisi kullanmaktır. Bu yöntem düşük hızlı bilgisayarlarda bile 115.2 Kbps hızını desteklemektedir.

Termpoll.c – Sorgulama (Polling) Kullanan Bir Haberleşme Program Örneği

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#define PORT1 0x3F8
/* Seri Port Taban Adreslerini Tanımlar */
/* COM1 0x3F8 */
/* COM2 0x2F8 */
/* COM3 0x3E8 */
/* COM4 0x2E8 */
void main(void)
{
int c;
int ch;
outportb(PORT1 + 1 , 0);
/* Kesmeleri etkisiz duruma getirir- Port1 */
/* PORT 1 - Haberleşme Ayarları */
outportb(PORT1 + 3 , 0x80);
/* DLAB'ı ON durumuna getir */
outportb(PORT1 + 0 , 0x03);
/*Baud rate belirle-Divisor Latch Low Byte */
/* Default 0x03 = 38,400 BPS */
/* 0x01 = 115,200 BPS */
/* 0x02 = 56,700 BPS */
/* 0x06 = 19,200 BPS */
/* 0x0C = 9,600 BPS */
/* 0x18 = 4,800 BPS */
/* 0x30 = 2,400 BPS */
outportb(PORT1 + 1 , 0x00);
/* Baud rate belirle-Divisor Latch High Byte */
outportb(PORT1 + 3 , 0x03);
/* 8 Bits, No Parity, 1 Stop Bit */
outportb(PORT1 + 2 , 0xC7);
/* FIFO Control Register */
outportb(PORT1 + 4 , 0x0B);
/* DTR, RTS, ve OUT2'yi aç */
printf("\nHaberleşme Örnek Programı.
             Çıkmak için ESC tuşuna basın \n");
do { c = inportb(PORT1 + 5);
   /* Karakterin gelip gelmediğini */
   /* kontrol et. */
     if (c & 1) {ch = inportb(PORT1);
            /* Geldiği ise karakteri oku */
           printf("%c",ch);}
            /* Karakteri ekranda göster */
     if (kbhit()){ch = getch();
      /* Bir tuşa basıldıysa tuşu oku */
          outportb(PORT1, ch);}
       /*Tuşun karakter kodunu porta gönder */
} while (ch !=27);
    /* ESC tuşuna basıldıysa çık */
}

Sayfa Başına Dön

Buff1024.c – Kesme Güdümlü Örnek Bir Haberleşme Programı

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#define PORT1 0x2E8
/* Port Adresleri buraya başvurur. */
/* Seri Port Taban Adresleri tanımlanır. */
/* COM1 0x3F8 */
/* COM2 0x2F8 */
/* COM3 0x3E8 */
/* COM4 0x2E8 */
#define INTVECT 0x0B /* Com Port IRQ */
int bufferin = 0;
int bufferout = 0;
char ch;
char buffer[1025];
void interrupt (*oldport1isr)();
void interrupt PORT1INT()
/* PORT1 için Interrupt Service Routine (ISR) */
{
int c;
do { c = inportb(PORT1 + 5);
     if (c & 1) {buffer[bufferin] = inportb(PORT1);
         bufferin++;
         if (bufferin == 1024) bufferin = 0;}
     }while (c & 1);
outportb(0x20,0x20);
}
void main(void)
{
int c;
outportb(PORT1 + 1 , 0);
/* Kesmeleri etkisiz duruma getirir - Port1 */
oldport1isr = getvect(INTVECT);
/* Önceki kesme vektörünü saklar */
setvect(INTVECT, PORT1INT);
/* Kesme Vektörü girişini ayarlar */
/* COM1 - 0x0C */
/* COM2 - 0x0B */
/* COM3 - 0x0C */
/* COM4 - 0x0B */
/*     PORT 1 - Haberleşme Ayarları      */
outportb(PORT1 + 3 , 0x80);
/* DLAB'ı On konumuna getir */
outportb(PORT1 + 0 , 0x03);
/* Baud rate belirle-Divisor Latch Low Byte */
/* Default 0x03 = 38,400 BPS */
/* 0x01 = 115,200 BPS */
/* 0x02 = 56,700 BPS */
/* 0x06 = 19,200 BPS */
/* 0x0C = 9,600 BPS */
/* 0x18 = 4,800 BPS */
/* 0x30 = 2,400 BPS */
outportb(PORT1 + 1 , 0x00);
/* Baud rate belirle-Divisor Latch High Byte */
outportb(PORT1 + 3 , 0x03);
/* 8 Bits, No Parity, 1 Stop Bit */
outportb(PORT1 + 2 , 0xC7);
/* FIFO Control Register */
outportb(PORT1 + 4 , 0x0B);
/* Turn on DTR, RTS, and OUT2 */
outportb(0x21,(inportb(0x21) & 0xF7));
/* Programmable Interrupt */
/* Controller'ı düzenle */
/* COM1 (IRQ4) - 0xEF */
/* COM2 (IRQ3) - 0xF7 */
/* COM3 (IRQ4) - 0xEF */
/* COM4 (IRQ3) - 0xF7 */
outportb(PORT1 + 1 , 0x01); 
/* Veri geldiğinde kesme oluştur. */
printf("\nHaberleşme Program Örneği. Çıkmak
            için ESC tuşuna basın \n");
do {
     if (bufferin != bufferout)
          {ch = buffer[bufferout];
        bufferout++;
        if (bufferout == 1024) bufferout = 0;
        printf("%c",ch);}
      if (kbhit()){c = getch();
                     outportb(PORT1, c);}
     }while (c !=27);
outportb(PORT1 + 1 , 0); 
/* Kesmeleri kapat - Port1 */
outportb(0x21,(inportb(0x21) | 0x08));
/*PIC kullanarak IRQ'ları maskele */
/* COM1 (IRQ4) - 0x10 */
/* COM2 (IRQ3) - 0x08 */
/* COM3 (IRQ4) - 0x10 */
/* COM4 (IRQ3) - 0x08 */
setvect(INTVECT, oldport1isr);
/* Önceki kesme vektörlerini çağır */
}

Sayfa Başına Dön

Kesme Vektörleri ( Interrupt Vectors )

IRQ’ları öğrendikten sonraki adım kesme vektörlerini veya yazılım kesmelerini bulmaktır. Temel olarak her 486 işlemcinin 0’dan 255’e numaralandırılmış 256 kesme vektörü bulunmaktadır. Bu vektörlerden her biri Interrupt Service Routine’nin (ISR) adresi olan 4 byte’lık bir kod içermektedir.

INT (Hex)

IRQ

Kullandığı Birim

08

0

System Timer

09

1

Keyboard

0A

2

Redirected

0B

3

Serial Comms. COM2/COM4

0C

4

Serial Comms. COM1/COM3

0D

5

Reserved/Sound Card

0E

6

Floppy Disk Controller

0F

7

Parallel Comms.

70

8

Real Time Clock

71

9

Reserved

72

10

Reserved

73

11

Reserved

74

12

PS/2 Mouse

75

13

Maths Co-Processor

76

14

Hard Disk Drive

76

15

Reserved

                Tablo 13 :Kesme Vektörleri  (Donanım)

Yukarıdaki tabloda IRQ’larla birlikte kullanılan kesmeler gösterilmiştir. RS232 ile haberleşirken diğer 240 kesmenin bilinmesi gerekmez.

Örneğin IRQ’su 4 olan COM3’ü kullanıyorsak kesme vektörü 0C olur. C programlama dilini kullanırken setvect(0x0C, PORT1INT); komutu yardımı ile vektör atanır.

Bununla birlikte bu işlemi gerçekleştirmeden önce, eski vektör adreslerini saklayıp işlem bittikten sonra geri yüklemek oldukça kullanışlıdır. Bu oldport1isr=getvect(INTVECT); komut satırı ile yapılır. Burada oldport1isr void interrupt        ( * oldport1isr) satırı işle tanımlanmıştır.

Sayfa Başına Dön

Interrupt Service Routine (ISR)

PORT1INT , Interrupt Service Routine (ISR) olarak adlandırılan kesme yöneticisinin etiketidir. Bu etikete herhangi bir isim verilebilir. Bununla birlikte bazı DOS rutinlerini çağırırken problem çıkabilir.

void interrupt PORT1INT()

{

int c;

do { c = inportb(PORT1 + 5);

         if (c & 1) {

                         buffer[bufferin] = inportb(PORT1);

                         bufferin++;

                         if (bufferin == 1024) bufferin = 0;

                        }

    } while (c & 1);

outportb(0x20,0x20);

}

Yukarıdaki örnekte alınacak bir karakter olup olmadığı kontrol edilir ve eğer varsa onu UART’dan silerek hafızada yer alan buffer’a yerleştirir.

Programın son satırında Programmable Interrupt Controller’a kesmenin bitiğini bildiren outportb(0x20,0x20); satırı yer almaktadır. Programmable Interrupt Controller (PIC) donanım kesmelerini işler. Çoğu kişisel bilgisayarlarda (PC), farklı adreslerde konumlandırılmış iki adet PIC bulunmaktadır. Birisi 0’dan 7’ye kadar diğeri de 8’den 15’e kadar olan IRQ’ları işler. Çoğu seri haberleşmelerde 7’den önceki IRQ’lara ihtiyaç duyulur ve böylece 0200 Hex adresinde bulunan PIC1 kullanılır.

Bit

Disable IRQ

Fonksiyon

7

IRQ 7

Parallel Port

6

IRQ 6

Floppy Disk Controller

5

IRQ 5

Reserved/Sound Card

4

IRQ 4

Serial Port

3

IRQ 3

Serial Port

2

IRQ 2

PIC2

1

IRQ 1

Keyboard

0

IRQ 0

System Timer

                        Tablo 14 : PIC1 Control Word (0x21)

Bit

Disable IRQ

Fonksiyon

7

IRQ 15

Reserved

6

IRQ 14

Hard Disk Drive

5

IRQ 13

Maths Co-Processor

4

IRQ 12

PS/2 Mouse

3

IRQ 11

Reserved

2

IRQ 10

Reserved

1

IRQ 9

IRQ2

0

IRQ 8

Real Time Clock

                                                                Tablo 15 : PIC2 Control Word (0xA1)

Çoğu PIC tanımlamaları BIOS tarafından yapılır. Dikkat edilmesi gereken yalnızca iki komut vardır. Birincisi maskelemek istediğimiz kesmeyi seçen outportb(0x21,(inportb(0x21) & 0xEF); komutudur. Diğer komut ise kesmenin bittiğini PIC’e bildiren outportb(0x20,0x20); komutudur. Bu komut daha düşük öncelikli kesmenin kabul edilmesi için Interrupt Service Routine’nin sonuna yazılır.

Sayfa Başına Dön

UART Konfigurasyonu

İlk komut olarak UART’da kesme üretimini önlemek iyi bir yöntemdir. Bu şekilde başlangıç işlemleri UART tarafından engellenemez. İkinci adım olarak haberleşme hızı belirlenmeli. Bunun için LCR’deki (Line Control Register) Bit 7 “high” seviyesine getirilip Divisor Latch High veya Low bitlerine ulaşım sağlanmalı. 16450 ve 16550 tip UART’lar için uygun olan 38,400 bps seçiyoruz. Bu işlem 3 bölenini gerektirir ve böylece divisor latch high byte 0x00 iken divisor latch low byte 0x03’tür.

Bir sonraki adım olarak Interrupt Enable Register ve alıcı/verici buffer’larını kullanabilmek için Divisor Latch ulaşımı iptal edilmeli. Bunu yapmak için kaydedici içeriğine 0x00 yazılmalı. Ayrıca hat kontrol kaydedicisine 0x03 yazmak DLAB’ı kapatır. Programdaki bir sonraki satır FIFO bufferlarını açmaktır. Tetikleme seviyesini 14 byte yapabiliriz. Böylece bit 6 ve 7 “1” olurlar. FIFO buffer’larını başlangıçta sıfırlamak yaralıdır. Böylece FIFO buffer’larında bir önceki programdan kalan kalıntılar silinir. Bit 6 ve 7’nin otomatik olarak sıfırlandıklarını gözönüne alırsak aynı işlemi bu bitler için tekrarlamanın gereği yok.

Ana Rutin ( Döngü )

do {

        if (bufferin != bufferout){

                                            ch = buffer[bufferout];

                                            bufferout++;

                                            i f (bufferout == 1024) bufferout = 0;

                                            printf("%c",ch);

                                           }

        if (kbhit()){

                         c = getch();

                         outportb(PORT1, c);

                        }

    } while (c !=27);

Bu program parçası ESC (ASCII 27) tuşuna basılana kadar devam eder.

if şartlı dallanma komutu bir tuşa basılıp basılmadığını kontrol eder. (kbhit()) Eğer basıldıysa getch() komutu ile bu tuşun karakterini alır ve alıcı buffer’ına gönderir. Bu programda, Haberleşme Programını kullanan kişinin UART’ın gönderme hızından daha hızlı bir şekilde yazamayacağı varsayılmıştır. Bununla birlikte, eğer program veri göndermek istiyorsa, verici kaydedicisine bir şey yazmadan önce Line Status Register’ında Bit 5’in “1” olup olmadığı kıontrol edilir.

Sayfa Başına Dön

Yazılım Yolu ile UART Tipinin Belirlenmesi

Bilgisayarı açmadan UART tipini öğrenmek mümkündür. UART tiplerinin tanıtıldığı bölümden de görüldüğü gibi her bir UART’ın belirleyici özellikleri vardır. Birzim yapmamız gereken bu özellikleri test etmektir.

Yapılacak ilk prosedür FIFO control register’da Bit 0’ı “1” seviyesine getirmektir. Bu işlem FIFO buffer’larını etkin duruma getişrmeye çalışır. Bundan sonra kesme belirleme kaydedicisinde bit 6 ve 7 okunur. Her iki bit de “1” ise FIFO buffer’ları etkin durumdadır. Bu UART’ın 16550a olduğu anlamına gelir. Eğer etkin FIFO buffer’ı yoksa büyük ihtimalle 16450 UART’tır, fakat çok eski sistemlerde 8250,8250A veya 8250B olabilir.

AT bilgisayarlar 8250 tipi UART’ların uyum gösteremeyeceği yüksek bir hıza sahiptirler ve bu bakımdan bir AT sistemde yer almaları çok nadir bir durumdur. Ancak yine de bunları test etmek istiyorsanız 16550 ve 16550A’ları diğerlerinden ayırt etmek için yukarıdaki işlemler tekrarlanır. Eğer FIFO’lar etkin değil ise muhtemelen UART 16450, 8250,8250A veya 8250B’dir. Bu işlemlerden sonra çalışma kaydedicisine (scratch register) bir değer yazıp okutun ve sonuçları karşılaştırın. Yazılan değer ile okunan değer aynı ise bu çalışma kaydedicisinin olduğu anlamına gelir. Eğer sonuçlar çelişiyor ise ya çalışma kaydedicisi yok ya da çalışmıyor demektir.

Yukarıdaki UART tanımlamalarına bakarak yazılan değer aynen okunabiliyorsa UART 16450 veya 8250A’dır. (her ikisi de çalışma kaydedicisine sahip) Yazılan değer okunamıyorsa 8250 veya 8250B’dir.

16750 64 byte FIFO’ya sahip. Bunu test etmek için en kolay yol FIFO Control Register’ı kullanarak 64 byte buffer’ı etkinleştirmek ve Interrupt Identification Register’ın durumunu okumaktır.

Sayfa Başına Dön

BÖLÜM 4 : RS-232 Portu ile Aygıtların Haberleşmesi

RS-232 Dalga Şekilleri

RS232 iletişimi asenkron özelliğindedir. Yani veri ile birlikte bir clock sinyali gönderilmez.

 

                                                   

                                              Şekil 4: TTL/CMOS Serial Logic Waveform

Yukarıdaki şekil 8N1 formatı kullanıldığında UART’tan beklenen dalga şeklini göstermektedir. 8N1 8 veri biti, No Parity ve 1 Stop bitini ifade etmektedir. RS232 hattı boşta iken Logic 1 durumundadır. İletim Logic 0 olan bir Start biti ile başlar ve her bit hattan gönderilir. İlk önce LSB (Least Significant Bit) biti gönderilir. Son olarak Stop Biti (Logic 1) gönderilerek iletim tamamlanır.

Şekilde Stop Bitinden sonraki bit de Logic 0 olarak gösterilmiştir. Bu, başka bir kelimenin devam ettiği anlamına gelir ve bu bir Start Bitidir. Eğer başka gelen veri yoksa hat Logic 1 seviyesinde kalır. Veri hattı tüm bir kelimeyi gönderecek kadar uzun bir süre Logic 0 seviyesinde tutulursa bu Break sinyali anlamına gelir. Bundan dolayı hat boş duruma (Logic 1) getirilmez ise alıcı bunu break sinyali olarak algılar.

Bu şekilde gönderilen veri “çerçevelenmiş” (framed) özelliğine sahiptir. Yani veri Start Biti ile Stop Biti arasında çerçevelenmiştir.

Yukarıdaki şekil yalnızca UART’taki sinyaller ile ilgilidir. RS232 standardında +3 volt ile +25 volt arası Boşluk (Space – Logic 0) belirtir; -3 volt ile -25 volt arası İşaret (Mark–Logic 1) belirtir. Bu voltlar arasındaki bir değer (-3 ile +3 arası)   tanımsızdır. Bundan dolayı sinyal RS232 Seviye Dönüştürücü’ye uygulanmaktadır.

 

 

                                        Şekil 5 : RS-232 Logic Waveform

Yukarıdaki dalga şekli RS-232 port üzerindeki Alıcı ve Verici hatlarına uygulanmaktadır. Bu hatlar seri veri taşırlar. RS-232 port üzerinde bazı paralel hatlar da vardır. Bu hatlar (RTS, CTS, DCD, DSR, DTR, RTS ve RI) da RS-232 Logic Seviyesindedirler.

Sayfa Başına Dön

RS-232 Seviye Dönüştürücüleri

Kullandığımız dijital aygıtların neredeyse tümü TTL veya CMOS logic seviyelerine ihtiyaç duyarlar. Bundan dolayı bir aygıtı RS232 portuna bağlamadan önce yapılacak ilk iş RS-232 seviyelerini 0 ve 5 volta dönüştürmektir. Daha önce de bahsedildiği gibi bu işlem RS-232 Seviye Dönüştürücüleri tarafından yapılmaktadır.

1488 RS-232 Driver ve 1489 RS-232 Receiver en çok kullanılan RS-232 Seviye Dönüştürücüleridir. Her paket tek tip 4 çevirici içermektedir, Sürücü (Driver) veya Alıcı (Receiver). Sürücü iki besleme hattını gerektirir, +7.5’ten +15’e ve –7.5’ten –15’e. Tahmin edilebileceği gibi yalnızca +5V bir kaynağın olduğu durumlarda birçok sorun ortaya çıkar. Ancak bu devrelerin avantajı ucuz olmalarıdır.

 

 

 

 

 

Şekil 6: MAX-232 (RS-232 Receiver/Driver) Pin Bağlantıları         

 

Şekil 7 : Genel bir MAX-232 Devresi

 

Diğer bir aygıt da 5V tek bir kaynaktan +10v ve –10v üreten MAX-232’dir. Bu entegre aynı zamanda iki alıcı ve iki verici içermektedir. Yalnızca alıcı ve verici veri hatlarının kullanılacağı durumlar için oldukça kullanışlıdır. Biri alıcı hattı için biri de verici hattı için olmak üzere iki ayrı chip kullanmak zorunda değilsiniz.

Sayfa Başına Dön

8250 Uyumlu UART’lar

UART’lar kullanılmadan önce başlangıç değeri verilmesi gereken ve veri ve adres hatları ile ulaşılabilen konfigurasyon kaydedicilerine sahiptir. Eğer aygıtınız bir Mikroişlemci kullanıyorsa bu bir sorun oluşturmaz.

Şekil 8 : 16550, 16450 ve 8250 UART’lar için Pin Bağlantıları

Sayfa Başına Dön

CDP6402, AY-5-1015 / D36402R-9 ve Diğer UART’lar

    CDP6402, AY-5-1015 / D36402R-9 ve uyumlu
    UART tipleri de vardır. Bunların 8250 ve
    uyumlularından farkı ayrı alıcı ve verici hatlarının
    olması ve pinlerinin farklı logic seviyelerine
    bağlanarak düzenlenebilmesidir. Mikroişlemci
    olamayan uygulamalarda çok kullanışlıdırlar.
    Örneğin ADC0804 (Analog to Digital Converter)
    UART ’a bağlandığında.
    CDP6402’nin Control Register’ı Parity Inhibit (PI),
    Stop Bit Select (SBS), Character Length Select
    (CLS1 and 2) ve Even Parity Enable (EPE)’den
    oluşmaktadır.


    Şekil 9 : CDP6402 Pin Bağlantıları

 

Pin Number

Kıs.

Tam Adı

Açıklama

Pin 1

VDD

+ 5v Supply

Rail

Connect to Supply (VCC +5V)

Pin 2

NC

Not

Connected

Not Connected

Pin 3

GND

Ground

Ground

Pin 4

RRD

Receiver

Register

Disable

When driven high, outputs RBR8:RBR1

are High Impedance.

Pin 5:12

RBR8:

RBR1

Receiver

Buffer

Register

Receiver's Data Bus

Pin 13

PE

Parity Error

When High, A Parity Error Has Occurred.

Pin 14

FE

Framing

Error

When High, A Framing Error Has

Occurred. i.e. The Stop Bit was

not a Logic 1.

Pin 15

OE

Overrun

Error

When High, Data has been received but

the Data Received Reset had not yet

been activated.

Pin 16

SFD

Status Flag

Disable

When High, Status Flag Outputs (PE, FE,

OE, DR and TBRE) are High Impedance

Pin 17

RRC

Receiver

Register

Clock

x16 Clock input for the Receiver Register.

Pin 18

nDRR

Data

Received

Reset

Active Low. When low,

sets Data received Output

Low (i.e. Clears DR)

Pin 19

DR

Data

Received

When High, Data has been received and

placed on outputs RBR8:RBR1.

Pin 20

RRI

Receiver

Register In

RXD - Serial Input. Connect to Serial

Port, Via RS-232 receiver.

Pin 21

MR

Master Reset

Resets the UART. UART should be reset after applying power.

Pin 22

TBRE

Transmitter

Buffer

Register

Empty

When High, indicates that Transmitter

Buffer Register is Empty, thus all bits

including the stop bit have been sent.

Pin 23

nTBRL

Transmitter

Buffer Load /

Strobe

Active Low. When low, data present on

TBR8:TBR1 is placed in Transmitter

Buffer Register. A Low to High

Transition on this pin, then sends

the data.

Pin 24

TRE

Transmitter

Register

Empty

When High, Transmitter Register is

Empty, thus can accept another byte

of data to be sent.

Pin 25

TRO

Transmitter

Register Out

(TXD)

TXD - Serial Output. Connect to

Serial Port, Via RS-232 Transmitter.

Pin 26:33

TBR8:

TBR1

Transmitter

Buffer

Register

Data Bus, for Transmitter. Place Data

here which you want to send.

Pin 34

CRL

Control

Register

Load

When High, Control Register (PI, SBS,

CLS2,CLS1,EPE) is Loaded. Can be

tied high, so changes on these pins

occur instantaneously.

Pin 35

PI

Parity Inhibit

When High, No Parity is Used for Both Transmit andReceive. When Low, Parity is Used.

Pin 36

SBS

Stop Bit

Select

A High selects 2 stop bits. (1.5 for 5

Character Word Lengths) A Low

selects one stop bit.

Pin 37:38

CLS2:

CLS1

Character

Length Select

Selects Word Length. 00 = 5 Bits,

01 = 6 Bits, 10 = 7 Bits and 11 = 8 Bits.

Pin 39

EPE

Even Parity

Enable

When High, Even Parity is Used,

When Low, Odd Parity is Used.

Pin 40

TRC

Transmitter

Register

Clock

16x Clock input for Transmitter.

   Tablo 16 : CDP6402, AY-5-1015 / D36402R-9 ve uyumlu UART’lar için Pin Tanımlamaları

Bu chiplerin 8250’lere göre bir dezavantajı da Programmable Baud Rate Generator ve doğrudan crystal bağlanma imkanı olmamasıdır. Bu durumlarda 74HC4060 14-bit Binary Counter ve Oscillator kullanılabilir.

 

 

 

 

 

 

Şekil 10 : 74HC4060 kullanan Baud Rate Generator

 

                                                                                                Tablo 17 : 74HC4060 kullanılarak üretilen
                                                                                                                   muhtemel Baud Rate değerleri.

Sayfa Başına Dön

 

mailsk.gif (12413 bytes)

pur_yel.gif (13868 bytes)

 

Site ile ilgili soru veya düşüncelerinizi yildizertan@hotmail.com 'a gönderebilirsiniz.ilove.gif (2137 bytes)
Copyright © 1999 Ertan YILDIZ. Tüm Hakkı Saklıdır.
Son Güncelleme Tarihi : Pazartesi Aralık 13, 1999.