SERİ PORT ( RS232 )
ş 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 :
Paralel iletimdeki kadar çok kabloya ihtiyaç duyulmaz. Eğer
aygıtın bilgisayardan oldukça Infra Red ( Kızıl Ötesi) aygıtlar son zamanlarda oldukça
yaygın. Kızıl ötesi özelliği olan Mikrodenetleyici kullanımı da günümüzde artmıştır. Bunların
birçoğu dış dünya ile 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 :
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.
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. Döngü Sınama Fişi
Bu döngü sınama fişi Seri/RS232 Haberleşme Şekil 2. Döngü Sınama Fişi Bağlantısı 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. 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. 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.
ğ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. 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.
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.
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.
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)
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)
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. First In / First Out Control Register (FCR)
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. Line Control Register ( LCR – Hat Kontrol Kaydedicisi )
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.
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. Line Status Register ( LSR - Hat Durum Kaydedicisi)
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. Modem Status Register ( MSR – Modem Durum Kaydedicisi )
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. BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASIBir 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.
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.
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.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.
Tablo 14 : PIC1 Control Word (0x21)
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. İ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. 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. BÖLÜM 4 : RS-232 Portu ile Aygıtların Haberleşmesi 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. 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. 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ı 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ı
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.
|
Site ile ilgili soru veya düşüncelerinizi yildizertan@hotmail.com 'a gönderebilirsiniz.Copyright © 1999 Ertan YILDIZ. Tüm Hakkı Saklıdır.
|