1. Giriş Çıkış (I/O) Sistemi
2.1. Giriş Çıkış Komutları
2.2. Giriş Çıkış (I/O) Portları
3.1. Isolated I/O
3.1.1. Isolated I/O nun Özellikleri
3.1.2. Isolated I/O nun Avantajları
3.2. Memory-Mapped I/O
3.2.1. Memory-Mapped I/O nun Avantajları
3.2.2. Memory-Mapped I/O nun Dezavantajları
3.3. Handshaking
4.1. Hafıza Kapsayan Programlanabilir I/O Portu
4.2. Programlanabilir I/O Portlarının Uygulanması
5. 8 ve 16 bit I/O Portları
6. Seri Data Aktarımı
7. Seri Port
7.1. Seri Portun Tanımlanması
7.2. Portun Tanıtılması
7.3. Portun Adreslenmesi ve Programlanması
8. Paralel Port
8.1. Portun Tanıtılması
8.2. Portun Adreslenmesi
8.3. Portun Programlanması
1 . GİRİŞ ÇIKIŞ (I/O) SİSTEMİ
Bir bilgisayar sistemini oluşturan temel birleşenlerden giriş/çıkış birimlerinin işe koşulması; verilerin, fiziksel olarak bu birimlerden ana belleğe, ana bellekten de bu birimlere, hiçbir veri kaybı ve tutarsızlığa neden olunmadan aktarılması giriş/çıkış sıstemıkapsamında dtişünülen işlevler tarafından gerçekleştirilir. Giriş/çıkış birimleri, verilerin, kullanıcı ile bilgisayar ortamı arasındaaktarılmasına ya da bu ortamda saklanmasına yarayan birimlere verilen genel addır. Bu bağlamda, terminal, yazıcı gibi giriş/çıkış birimleri veri aktarım; disk, mıknatıslı şerit gibi giriş/çıkış birimleri ise veri saklama (ikincil bellek) birimleridir.
Fiziksel adresleri kütük yönetim kesinıince belirlenmiş giriş/çıkış öge içeriklerinin ana bellekten sürüctilere ya da sürücülerden ana belleğe aktanlmalan, çekirdek katmanda yer alan giriş/çıkış yordamları tarafından gerçekleştirilir. Bu yordamlar ve ilgili özel düzeneklerin oluşturduğu bütün, giriş/çıkış sistemi olarak adlandırılır.
Giriş/çıkış birimi olarak terminal birimi; ekran ve klavyeden oluşan terminal sürücü ile bu sürücüye ilişkin arabirim çiftini tanımlar. Bunun gibi disk birimi, dönen plakalar ve ilgili elektronik aksamın yer aldığı disk sürücü ile ilgili arabiriminden oluşur. Ana işlem birimi ve ana bellek ikilisinin veriler üzerinde istenen işlemleri gerçekleştirebilmesi, bu yerlerin, önce (dış) kullanıcı ortammdanana belleğe aktarılmasını gerektirir.
Dış ortamdan ana belleğe aktarılan veriler, giriş/çıkış sürücüleri üzerinde saklanan ya da bu sürücüler aracılığıyla, kullanıcılar tarafından sisteme girilen verilerdir. Verilerin sürücülerden ana belleğe, ana bellekten sürücülere aktarılabilmesi için bu sürücülerin denetlenmesi gereklidir. Suni cülerin denetlenmesi arabirimlerinin programlanmasıyla gerçekleşir. Arabirimlerin programlanması, giriş/çıkışların programlanması kapsamında ele alınır.
İzleyen kesimde, giriş/çıkışlann programlanmasıyla ilgili temel yaldaşımlar açildanacaktır. Once giriş/çıkış arabirinılerininyapısal özellilderi incelenecektir. Bunun sonrasmda giriş/çıkışlann programlanmasında kullanılan yöntemler, bu yöntemlerin gerektirdiği kimi özgün donanmı düzenekleriyle birlikte verilecektir. Bunun sonrasında, zaman uyumsuz biçimde gelişen giriş/çıkış sistemlerini ele almaya olanak veren ana işlem birimi kesilme düzeneği, kesilmeli giriş/çıkış programlama yöntemiyle birlikte incelenecektir. Sürücü - ana bellek arası veri aktarımlaıını ana işlem birimine başvurmadan yerine getirmeye yarayan doğrudan bellek erişim düzeneği ile doğrudan bellek erişim denetleme birimleri ve kanallar / giriş/çıkış işleyicileri incelenecektir.
2.1 Giriş Çıkış (I/O) Komutları
Komut seti bilgiyi I/O birimine aktaran (OUT) ayrıca I/O biriminden okuyan (IN) tek tip komut içermektedir. Komutlar (INS ve OUTS komutları 8086/8088 hariç bütün versiyonlarda bulunur.) data dizilerinin bellek ve I/O birimleri arasında transferi için kullanılır. IN ve OUT komutlarından ikisi de datayı I/O birimi mikroişlemci akümülatörleri (AL, AX ve EAX) arasında transfer eder. I/O adresi DX registerinde 16 bit I/O adresi olarak veya opkodu hemen takibin byte olarak 8 bit I/O adresi şeklinde depolanır.
8 bitlik form komut ile depolandığından genellikle ROM'a depolanır.- Intel bu formu sabitlenmiş adres olarak adlandırır. DX'tebulunan 16 bit I/O adresi registere depolandığı için adres değiştirileb ilir. INS ve OUTS komutlarının her ikisi de DX registerindebulunan değişken I/O adresi kullanır.
Ne zaman data IN ve OUT komutunu kullanarak transfer edilirse I/O adresi çoğunlukla port numarası olarak adlandırılır ve adres bus hattında görülür. Port numarasını bellek adresinin dekod edilmesiyl e aynı yöntemle harici I/O arabirimi dekod eder. 8 bit sabitlenmiş port numarası A15-A8=0000 0000 olacak şekilde A7-A0 adres bus hatlarında görülür. Bu ilk 256 I/O port adresine (00H-FFH) hem sabit hem de değişken I/O komutları fakat 0100H-FFFFH arasınd aki her I/O adresine değişken I/O adresi ile erişilebilir demektir. Pek çok özel görevli sistemde adresin sadece en sağdaki 8 biti dekod edilir. PC'de 16 adres bus biti PC'lerde bulunan çok sayıda I/O için kullanılan 00XX-03XXH ile dekod edilir. INS ve OUTS komutları DX registerini kullanarak I/O birimini adresler fakat IN ve OUT gibi datayı akümülatör ve I/O birimi arasında taşımaz. Yerine bu komutlar datayı bellek ve I/O birimi arasında iletir. Bellek adresi INS komutu için ES:DI tarafında, OUTS komutu için DS:SI tarafında yerleştirilir. Diğer dizi komutları gibipointerlerin içerikleri özel olarak yönelme durum bayrağı (DF) tarafından azaltılır veya arttırılır. INS ve OUTS'un he r ikisi de I/O ve bellek arasında birden fazla byte yada wordun transfer edilmesine müsaade eder. REP sabiti ile sabitlenebilir.
2.2. Giriş Çıkış (I/O) Portları
Giriş Çıkış portları CPU nun dış dünyala bağlantısını sağlarlar. Kullanıcı CPU yardımıyla data girişi ve çıkışı yapabilmektedir.
Her bir hata hattı dış bir elemana bağlanır. Eğer çıkış portundaysa çıkış hattı, giriş portundaysa giriş hattına ayrılırlar.
Programlanabilir I/O portları giriş çıkış portlarını birleştirmektedir. Mesela PIO seri portları D0 – D3 data hattını giriş hattı D4 – D7 hattını çıkış hattı olarak birlikte kullanır.
PIO lar imalat gereği hafızada bulunurlar. Bu hafızalar RAM, ROM ve EPROM lardır. Bu araçlar sistem kullanıcısı için çok yönlüdür. Data transfer oranı çok yüksektir. Birkaç saniyede işlemleri sıralar. Bu arada işlemci sitemi kontroş eder ve 1.5 milyon işlem yürütür.
Mikroişlemci hafıza ev I/O transferi için genel adres hattı kullanılır. Bu demek oluyor ki hafıza ve I/O transferi ayırt edilmelidir.
Bu işlem için üç yöntem kullanılımkatadır:
1. Isolated I/O (ayrılmış I/O)
2. Memory-Mapped I/O (I/O nun hafıza adresi)
3. Handshaking
3.1. ISOLATED I/O
Intel mikroişlemci temelli sistemlerde kullanılan en temel I/O transfer tekniğidir. İzole edilmiş terimi ayrı I/O adres uzayında bulunan bellek sisteminden I/O yerlerinin nasıl izole edildiğini anlatır. İzole edilmiş I/O birimi için (bunlar port olarak adlandırılır) bellekten ayrıdırlar. Bunun sonucu olarak kullanıcı I/O birimi için bu boşluğun hiçbirini kullanmayarak belleğin tamamı için genişletebilir. I/O uzayı için ayrı kontrol sinyalleri I/O okuma (IORC) ve ya I/O yazma (IOWC) işlemlerinin gösterilmesini sağlamaktadır. Bu sinyaller I/O elemanını seçmekte kullanılan adres bus üzerinde I/O port adresini gösterir. PC’ler izole edilmiş I/Oportları çevresel elemanların kontrolünde kullanılır. Kural olarak, 8 bit port adresi zamanlama ve keyboard arabirimi gibi sistem üzerinde bulunana kartlara erişmek için ve 16 bit port ise video ve disk sürücü sistemlerinde olduğu gibi seri ve paralel portlaraerişmek için kullanılır.
Isolated I/O nun düzenlenmiş hali 1.1 şeklinde gösterilmiştir. Mantıksal sinyal I/O okuma kontrol hattı olduğunda giriş portu, I/O yazma hattında olduğunda çıkış portu seçilir. Her iki portda DS2 hattına uygulanan sinyal tarafından port adresleri saptanır.
Bu modelde I/O işlemleri isolated I/O adreslenmesi olarak adlandırılır. Çünkü sinyal I/O araçının araç seçim pinine uygulanma işi ayrılmıştır. Hafızayı seçmek için kullanılmış sinyal ayrı bir formdur. Bu demek oluyor ki giriç çıkış araçları için MR ve MW yerine I/OR ve I/OW kullanılır. Bu aynı zamanda akümülatör I/O olarakta bilinir ki yalnızca girişle akümülatör ve akümülatörle çıkış arasında data transfer edebilir. I/O portları ve diğer yazmaçlar arasındaki data transferi için CPU içindeki akümülatör akümülatör I/O yu kullanmasına imkan vernez.
Okuyucunun şekil 1.1. deki I/O port adresinin çıkarma metodu diıkkat: IC üzerindeli DS’ kontrol hattına sinyal çıkarmak için kullanılan data adresi port adresini özelleştirir. Tek adres hattı her I/O port üzerindeki DS’ pini bağlana kadar okuyucu not eder., bu arada adres çözme işlemi bitmemiştir. Hat adresi I/O chipi kullanıldıktan sonra görülür. Bu da programcı için program yazarkenbütük sorunların çıkmasına neden olur.
Her giriş portu adresiyle verilir ve not edilir. Bu adreste uygun çıkış port ile aynı adres vardır. D2 pin portuna bağlanmış adres hattı tarafından port adresi önceden ayarlanmıştır. Her iki port görünüşte aynı adresi kullanmaktadır. Bu sorunu gidermek için giriş portu I/OR sinyali, çıkış portu I/OW sinyali tarafından seçilmektedir.
Giriç Çıkış portları ibi byte lık direktiflerdir. Sonuç olarak ikinci byte yalnızca adreslemek için kullanılır. Bundan dolayı I/Oportlarının 00-16 dan FF-16 ya kadar sıralı adreslere sahip olmalıdır. Bu adresler A0-A7 adres bus hattı kullanarak seçilir.
Şekil 3.1 de basit adres düzenlenmesi kullanılmıştır. Bundan sonra hat hızlı bir şekilde portlara sürülür. Şekil 1.1 e göre kullanıcı max 8 giriş , 8 çıkış portu adresler. Bu düzenleme bir çok bait işlemleri için eb uygunudur. Sinyal adres hattı üzerinde olduğunda A0 yukarıdadır. O zaman 01 giriş portu veya 01 çıkış portu seçilmektedir. Sinyal adres bus hattıda olduğunda A1 yukarıdadır. O zamanda 02 giriş port ve 02 çıkış portları seçilmektedir. Buna benzer A7 yukarda iken 80 giriş portu ve 80 çıkışportu seçilmiştir. Şekil 1.1 deki I/O portları seçiminde adres bus hatları kullanılır.
A7 ve A0 adreslerindeki Sinyaller Adres Busdaki I/O port
A7 A6 A5 A4 A3 A2 A1 A0 Sinyal Adresi
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
01
|
01
| |||||||||||
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
02
|
02
| |||||||||||
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
04
|
04
| |||||||||||
0
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
08
|
08
| |||||||||||
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
10
|
10
| |||||||||||
0
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
20
|
20
| |||||||||||
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
40
|
40
| |||||||||||
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
80
|
80
| |||||||||||
Table 3.1.
Eğer data hattı A0-A7 kapsarsa tam çözülmüş olur. Böylece 256 giriş portu ve 256 çıkış portu seçilmiş olur. Şekil 3.2 de çalışan yüksek chip seçiciler gösterilmiştir.
Kullanıcı G1 NOR kapısında girişe gelen sinyaller düşük çıkış sinyalleri yüksek olmalıdır.
Şekil 3.2 deki adres çözüm metodu olarak bilinen giriş kapıları her I/O adresi için kullanılır.
Bu sınırlamalara galip gelen yöntem IC çözücüler tarafından kullanılmıştır.(Şekil 3.3).
Şekildeki çözücü çıkış sinyali olarak sekiz düşük aktivite üretilmiştir. Eğer yüksek aktivite sinyaline gereksinme duyulursa, uygun çözücü çıkış ve I/O port üzerindeki araç seçim pini arasında bir çeviriciye ihtiyaç vardır.
3.1.1. Isolated I/O nun Özellikleri
Birçok işlemci kullanıcıya I/O işlemleriyle hafıza okuma/yazma işlemlerinin ayrımına izin veren kontrol sinyali sağlamaktadır. Bu grup içerisine İntel 8086,80286,80386,80486 ve Pentium ve 8085, Zileg Z80 v.b girmektedir.
3.1.2. Isolated I/O nun avantajları
1. I/O ve hafıza sistemi birbirinden ayrılır.
2. I/O port adresleri kolaylaştırılır ve basit çözümleyicilere yol gösterir.
3. I/O ve hafıza transferi birbirinden ayrıldığından beri programlar kolayca yorumlanmaktadır.
3.1.3. Isolated I/O nun dezavantajları
Data transferi akümülatörden olmalıdır. Bu datalar kendi içerisine veya yardımcı yazmaçlara transfer edilemez.
3.2. MEMORY – MAPPED I/O
İzole edilmiş I/O’dan farklı olarak memory-mapped I/O IN, INS, OUT ve OUTS komutlarını kullanmaz. Yerine mikroişlemci ile bellek arasında data transferi yapan bütün komutları kullanılır. Memory-mapped I/ O, bellek haritasında bir bellek yeri olarak çalışır. Memory-mapped I/O’nun en temel avantajı bütün bellek transfer komutları I/O birimine ulaşmak için kullanabilmektir. Bu bellek uygulamalarının sayısını azaltmaktadır.
Nerde memory mapped I/O kullanılırsa orada I/O chip seçiminde hafıza okuma strobunu (MR) veya yazma strobunu (MW) kullanır. Şöyle diyebiliriz ki, her çıkış portu hafızadaki konumuna dikkatle bakar ve sistem hafıza haritasında bir alan ayırır. Yani mikroişlemciler I/O portlarını adresler. Isolated I/O kullanan işlemciler memory mapped I/O yuda kullanmaktadır.
Şekil 3.4. de memory mapped I/O nun blok diyagramı gösterilmiştir. Hafıza okuyucu strobu tarafından aktif hale getirilen girişportuunu DS1 pinin ve çıkış portu üzerindeki DS1 hafıza yazma strobu tarafından güçlendirilir ve okuyucu tarafından not edilir. DS2 seçim sinyali A9, A10 ,G1 ve G2 adres hatları tarafından sürülür.
İkinci sinyal yüksek AND MR strobu düşük olunca giriş portu kullanımdadır. A9, A10 sinyali yüksek ve MW strobu düşük olduğunda çıkış portu kullanımdadırç
İki adres hattı adres çözüm devresinde kullanıldığında chipler bir çok adrese sahiptir. Bu adresler aşağıdaki 1 0 haricindeki her iki I/O adres kombinasyonlardan karar vermesidir.
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
X X X X X X X X X X X X X X X X
. . . .
0- F16 2,3,A,B16 0-F16 0-F16
Çünkü A0 dan A8 ve A11 den A15 adresleri kullanılmamıştır. Ve mantıksal 0 ve ya 1 olabilir.
Şekil 3.5 de memory map in 4 K lık bölümü gösterilmektedir. Bu harita şekli maksimum 64 K ya kadar her 4K da tekrarlanmaktadır. Demekki her giriş çıkış portları her 4 K da adreslandiğine göre 64 K da 16 kez tekrarlanacaktır.
3.2.1. Memory Mapped I/O ların Avantajları
1. Hafızadaki data üzerindeki işlem yapılan her komut data formu ile I/O portlarının birleşiminde kullanılır.
2. Giriş Çıkış komutlarını ayırmak gereksizdir.
3. Sıralanmış adres Isolated I/O ile karşılaştırıldığında hazır vaziyettedir.
4. Hafıza adres çözücü için kullanılan aynı gereçler tarafından I/O port adresleri çözülür.
3.2.2. Memory Mapped I/O ların Dezavantajları
1. I/O portları hafıza haritasında bir yer işgal etmektedirler.
2. Küçük ve basit sistemler için az uygundur.
3. Program içerisinde hafızanın ve I/O data transferinin ayırt edilmesi oldukça zordur.
3.3. HANDSHAKING
Pekçok I/O birimi bilgileri mikroişlemcilerden çok daha yavaş bir hızla kabul eder veya işletir. Handshake veya tarama (polling) olarak adlandırılan diğer bir I/O kontrol metodu I/O birimi ile mikroişlemciyi senkronize eder. Handshake işlemine ihtiyaç duyan örnek bir devre saniyade 100 karakter (CPS) yazan paralel yazıcıdır. Dolayısıyla mikroişlemci ile printerın hızı eş yapılmalıdır. Burada, data seri data bağlantıları olan D7-D0 vasıtasıyla taşınır. BUSY printerin meşgul olduğunu gösterir STB^ yazma işlemi içinprintere dataları göndermekte kullanılan bir clock pulsidir.
Yazıcı tarafından yazılacak olan ASCII datalar D7-D0 üzerinde bulunurlar ve puls STB^ ucuna uygulanır. Strob sinyali yazılabilmesi için yazıcıya dataları gönderir. Yazıcı dataları alır almaz, bilgileri yazmakla meşgul olduğunu gösteren BUSY pinindelojik 1 görülür. Eğer printer meşgul ise, mikroişlemci bekler aksi halde printere diğer ASCII karakterleri gönderir. Printerıninterrogating (sorgulama) işlemi handshaking veya polling olarak adlandırılır. Eğer sadece BUSY bayrağı yazıcının meşgul olmadığını gösteren lojik 0 durumunda ise Print işlem dizisi kodlanılan BL’nin içeriklerini veya ASCII’leri yazar.
Data transfere hazır olduğu zamanki CPU teknolojisine verilen ada Handshaking denir. Burda iki tür adlandırma vardır. Bir giriş handshaking ‘i ve çıkış handshaking’i dir.
Handshake sistemi şekil 1.6 da kullanıldığuı gibi üç port içermektedir. Bunlardan ikisi (Giriş ve Çıkış portları) ayrı ayrımuamele görürler. Bu portlar tek başlarına flip-flop olabilirler. Peripheral ve CPY arasında bilgi taşımak için kalıcı portlaragereksinme vardır. Programlanabilir I/O kullanılırsa basit bir porta gereksinme duyulur.
Handshake girişi şekil 3.6. da gösterilmiştir. Peripheral’ı şekilde analogtan dijitale cevirici (ADC) olarak düşünelim. Miktarı tayin edilen sinyaller RAM de sıralanarak yerleştirilmiştir. Isolated I/O portları 01, 02 ve 04 portlarını benimsemiştir.
ADC aracı analog voltajı dijital voltaja çevirir fakat bu işlemin tamamlanması birkaç dakika almaktadır. Başlangıçta işlem miktarı ADC nin çıkış port terminalinin QUANTISED SIGNAL 0 (sıfır)’ a resetlediğinde işlem devam etmektedir. Bundan dolayı bu terminal analog giriş voltajı eşit binary değere kadar artar. Zamanın belirli dönemlerinde CPU ya data ttansferi önerir. Data hazır olduğunda CPU bilgilendirilir. Sonrada CPU data okuma işlemini başlatır.
Genel olarak işlem sırası:
1. Peripheral 02 giriş portundan DATA HAZIR sinyali CPU tarafından gönderilir. Sinyal gelene kadar yazılım içerisinde kalır veya programın diğer bölümleri devam eder.
2. CPU 01 giriş portundan QUANTISED SIGNAL’ni okur.
3. CPU 04 veri yolundan INPUT ACKNOWLEDGE sinyalini gönderir. ADC sonraki analogtan dijitale dönüştürme işlemini başlatmak INPUT ACKNOWLEDGE sinyalini kullanır. Bu giriş handshake ‘i tamamlama işlemi peripharel ve CPU arasındadır.
Çıkış handshake şekil 1.7 de gösterilmiştir. Peripheral teletype veya bir printer olabilir.
Genel olarak işlem sırası:
1. CPU 04 çıkış portundan çıkış sinyalini gönderir.
2. Peripheral datayı göndermeye hasır olunca, CPU tarafından okuma PERİPHERAL HAZIR sinyali 20 giriş portundangönderilir.
3. CPU datayı peripherala 10 çıkış portundan gönderilir. Birinci adımda peripheral işlemini tamamlandığında tekrar denenebilir. Çıkış handshake tamamlama işi peripheral ve CPU arasındadır.
4.1 Hafızayı Kapsayan Programlanabilir I/O Portu
LSI chipi I/O portlarıyla birlikte hafızanın belli bölümü kapsanmaktadır. Kullanıcı giriş çıkış hat portlarının yazılımla tanımlar. Sistem dört giriş ve dört çıkış portuna gerksinim duyduğunda kullanılabilir. Kullanıcı programında isteği doğrultusunda giriş ve çıkışportlarını kullanır. Bundan başka bir çok araç 40 pin DIL paketi ima edilir. Öyle ki bu iki bazen üç port aynı paket içerisinde kapsanmaktadır. Dolayısıyla tek 40 pin DIL ‘i 16 programlanabilir I/O hattıyla birlikta küçük bir hafıza alanının kullanıcıya sağlar.
Bu hafızalar RAM, ROM, EPROM’u kapsar.
4.2. Programlanabilir I/O Protlarının Uygulaması
Programlanabilir I/O nun şekil 4.8 de basit bir blok diyagramı gösterilmektedir. Basitleştirilmiştir ve iç yapısı gösterilmemiştir.
A6 ve A0 adrs hattı CPU adres hattından giriş yapılır. Amaç RAM içerisinde datayı 128 bytelık adresleyebişlmektir. Kalan adres hatları (A15-A8) chip seçimi için kullanılır. Şekil 1.8 de chip seçimi A8 düşük AND olduğunda ve A11 eşdeğerde yüksek olduğundqa olur.
A9,A10,A12 ve A15 e kadar adres hatları kullanımadığında PIO nun adresleri aşağıdaki gibidir.
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
X X X X 1 X X 0 X X X X X X X X
. . .
0- F16 8,A,C,E16 Hafıza adreslemesi için kullanılan
PIO chipinden seçilen her hangi bir adresdeki (X8XX, XAXX, XCXX, XEXX) X değerleri hexadecimal olarak sıralı bir şekilde 0 dan F e kadar değerler alır.,
A7 adres hattı yüksek olduğunda RAM bölümü seçildiği, A7 adres hattı düşük olduğunda I/O bölümü seçildiği kullanıcı tarafından seçildiği gözlenir.
5. 8 ve 16 bit I/O portları
Şimdiye kadar bellek adresi dekod edilmesinden belki de daha kolay olan (çünkü bit sayısı farklı) I/O port adresinin dekodedilmesi anlatıldı. Şimdi de mikroişlemci ile 8 veya 16 bit I/O birimi aras ında dataların nasıl transfer edildiğini anlatacağız 8 bit I/O için datanın transfer edilmesi 8086/80286 veya 80386SX’in I/O bankalarından birinde olur. Bellekte olduğu gibi I/O sistemi de 2 tane 8 bit bellek bankası içerir. Bu 80286 ve 80386SX’teki gibi 16 bit bellek sistemi için ayrı I/O banka vardır. İki I/O bankı mevcut olduğu için her 8 bit I/O yazma işlemi fonksiyonlarını doğru şekilde yapmak için write strobuna ihtiyaç duyar. I/O okuma, ayrı okustrıbuna gerek duymaz. Çünkü bellekteki gibi mikroişlemci sadece bir byte okur. Bu byte diğer byte ile birleştirilmiş veya ayrı tutulmuştur. Okumanın problemlere neden olduğu tek zaman I/O biriminin okuma işlemini doğru bir şekilde yapmadığı zamandır. I/OP birim inin yalnış bankadan okuma yaptığı durumlarda ayrı okuma sinyallerine ihtiyaç duyarız. Şekil 9-10 40H ve 41H 8 bit I/O adresindeki iki farklı8 bit çıkış birimini içeren bir sistemi gösterm ektedir. Çünkü bunlar 8 bitlik birimlerdir. ve iki ayrı I/O yazma sinyali üretiriz. Çünkü farklı I/O banklarında görünürler.
6. Seri Data Aktarımı
Sekiz bitlik data sekiz data hattından geçirilmektedir. Bu paralel data geçirilimi olarak bilinsede çoğu bilgisayar peripheraldata aktarımı uzun uzun bir hat üzerinden seri on-off pulse’i olarak almaktadır. Örnek olarak telefon hattı üzerinden dijital datanınaktarılmasıdır. Bu da seri data aktarımı olarak bilinir. Bu data aktarım modeli teletypeler, CRT bilgisayar terminalinde ve modemlerde görülmektedir.
Seri data aktarımı ile Mikroişlemci arasındaki arayüzleme metodu CPU chip izerindeki adanmış giriş çıkış hatları kulllanılarakyapılır. İntel Chiplerde SID (Serial Input Data) ve SOD (Serial Output Data) hatları vardır. Konuşma dilinde bu teknolojiye datapatlamsı denir. Giriş ve çıkış hattından gelen komut dizisi dataya etki eder.
Diğer taraftan popüler bir metodda adanmış donanım ile CPU nun kullanıldığı meteddur. CPU bus sistemi tarafından kullanılan araçlar seri data girdi ve çıktılarla paralel datalar arsında dönüştürme için kullanılır. Bu uygulama için en popüler yöntem UART (Universal Asynchronous Receiver / Transmitter) dir.
UART yi tanımlamadan önce seri data sinyalinin taslağını çizmek gerekiyor.
1. Başlangıç biti manmtıksal (0) sıfırdır.
2. 5 ten 8 kadar data biti 1 veya 0 dır.
3. Parite kontrol biti 0 veya 1 olması data biti tarafından karar verilir.
4. Sonlandırma biti mantıksal 1 dir
Şu ana kadar bilgisayardaki I/O ların mimari olarak ve iç yapıları incelendi. Şimdi bilgisayarda SERİ ve PARALEL portlarınözellikle tanıtılması ve kullanılmasına değineceğiz.
7. SERİ PORT
7.1. Seri Portun Tanıtılması
Seri haberleşme uzun mesaferlerde bilgi transeri için kullanılır. Çünkü paralel haberleşme için çok fazla kabloya gereksinme vardır. Modemden veya diğer araçlardan seri data alımı paralele dönüştürülerek olur. Bu demek oluyor ki Pc buslardan transfer edilebilir.
Seri haberleşme araçları basitce Half-duplex ve Full-duplex olarak ikiye bölünürler. Basit seri haberleşmelerde bilgi gönderme tek yönlüdür. (Radya yanınları gibi). Half-duplex de data iki sistem arasında aynı yönde gönderilir. Ama Full-duplextaşımada her sistem aynı anda datayı gönderebilir ve alabilir.
Seri data aktarımında iki yol vardır. Senkronize ve Asenkroniza (Eşzamanlı ve Eşzamansız). Senkronize data aktarımında data bir bloğa gönderilir. Aktarıcı ve alıcı bir veya birden fazla özel karakter tarafından senkronize edilir.
PC nin seri portları asenkronize araçlardır. Bundan dolayı bu sistemden bahsedilecektir. Asenkronize data aktarımı için bir bit ve bitmesi için 1 veya 2 bit e ihtiyaç vardır. Başka bir senkronizeye gerek yoktur. Başlangıç biti gönderildikten sonra data bitleri alıcıya gönderilir. Data karakterleri genelde 7 ve 8 bitten meydana gelmektedir. Taşıma konfigürasyonuna göre parite biti her data bitinden sonra gönderilir. Data karakterlerinde hata olup olmadığının kontrol içinde son olarak 1 veya 2 bitiş biti gönderilir.
7.2. Portun Tanıtılması
PC portları RS-232C standardına uygun haldedir. Bu standart 1960 larda DTE (Data Terminal Equipment) ve DCE (DataComminication Equipment) olarak tasarlandı.
Bu standart özel 25 sinyal pininden oluşmaktadır. DTA konnektörü erkek DCE konnektörü dişidir. En çok kullanılankonnektörler DB 25 erkek olanıdır. Fakat 25 pine her zaman ihtiyaç yoktur. Bundan dolayı modern PC lerde DB9 erkekkonnektörü kullanılmaktadır. Bu konnektörlerden bir veya birden fazlası bilgisayarlarda kulanılmaktadır. Yüksek mantık için voltaj seviyesi –3V ve –15V arsındadır. Düşük mantık için voltaj seviyesi +3V ve +15V arasındadır. Genel olarak +12V ve –12V değerleri arasındadır.
Aşağıda genel olarak kullnılan sinyaller vardır:
/DTR (Data-Terminal-Ready) : PC modeme çalışır halde ve datayı göndermek için hazır olmasını belirtir.
/DSR (Data-Set-Ready): PC modeme çalışır halde ve datayı almak ve tranfer etmek için hazır olmasını belirtir
/RTS (Request-To-Send): Data gönderilmeye hazır olduğunda PC ye gönderilen sinyaldir.
/CD (Carrier-Detect): Modem bilgisayarı tabnıdığı zaman gönderdiği sinyaldir.
/CTR (Clear-To-Send): Modem datayı göndermeye hazırdır. PC datayı modeme göndermeye başlar.
TxD : Modem PC den datayı alır.
RxD : Modem PC ye datayı gönderir.
Seri data adreslerinin paralele dönüştürme işlemine UART dendiğini söylemiştik. Tipik bir PC UART ye örnek olarak İntel8251A yı gösterebiliriz.
IC senkronize veya asenkronize devrelerini programlayabilir. PC sisteminin kontrol bus’ı öne sürüldüğünde chip seçimi girişe uygundur. IC iki tane dahili adrese sahiptir. (Data adresleri ve Kontrol adresleri). Kontrol adresleri CD girişiş yüksek olduğunda seçilir. Data adresi CD girişi düşük olduğunda seçilir. RESET sinyali IC yi reset eder. RD düşük olunca bilgisayar kontrol veya data byte okunur. WR aktifse PC bir byte yzar. Her iki sinyalde sisteme aynı adla bağlanır.
UART dört dahili yazmaç içermektedir.
THR : Geçici çıkış yazmacı
TSR : Çkış yazmacı
RDR : Giriş yazmacı
RSR : Geçici giriş yazmacı
Her karakter taşınmaya başlandığında THR yazmacına depolanır. UART başlangıç ve bitiş bitlerini ekler. Sonta bütün bitleri (data,başlangıç ve bitiş) TSR ye kopyalar. İşlemi bitirmek için TD sinyali tarafından bitler gönderilir.
Her karakter RSR yazmacına depolanan RD hattı tarafından alınırlar. Başlangıç ve bitiş bitleri elimine edilir ve UART bu karakterleri RDR ye yazar. İşlemi bitirmek için karakter PC için okunur.
7.3. Portun Adreslenmesi
Seri portları adreslemenin iki yolu vardır. 14H BIOS ve 21H BIOS interrupları sayesinde olur.
14H BIOS interrupt’ı seri portu programlaya bilmek için dört özelliği kullanır. Her özellik AH yazmacına değer atamak için seçilir.
14H in özellikleri:
00H : Seri portun başlangıcıdır ve data, başlangıç biti ve parite parametreleri bulunur
01H : Seri portuna karakter gönderir.
02H : Seri portundan karakter okur.
03H : Seri portundan durumu dönderir.
21H ın özellikleri :
03H : COM1 Seri portundan karakter okur.
04H : COM1 Seri portundan karakter yazar.
40H : Bu genel çıkış özelliğidir. Bütün dosyalar ve araçlar manuel olarak kullanılır. Buffer dan özel araca bytelarınnumarasını gönderir.
//Program to communicate two PC s via serial port
//00H bios function (AL register)
//bits 7 6 5 Baud rate
// 0 0 0 110
// 0 0 1 150
// 0 1 0 300
// 0 1 1 600
// 1 0 0 1200
// 1 0 1 2400
// 1 1 0 4800
// 1 1 1 9600
//bits 4 3 Parity bits
// 0 0 no parity
// 0 1 odd parity
// 1 1 even
//bits 2 stop bits
// 0 1 stop bit
// 1 2 stop bit
//bits 1 0 Number of bits per data
// 1 0 7 data bits
// 1 1 8 data bits
//Register Dx 0->com1, 1->com2, 2->com3, 3->com4
//Configuration: 9600 bd,no parity,2 stop bits and 8 data bits
//AL register value is 1 1 1 0 0 1 1 1 -> 0xE7
#include <stdio.h>
#include <process.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#define TRUE 1
#define PARAM 0xA7
#define COM1 0
#define COM2 1
void init_port(void);
char state_port(void);
void send_byte(unsigned char);
unsigned char read_byte(void);
void keyb(void);
int tecla = 1;
void main ( void )
{
unsigned char read_com;
unsigned char read_kb;
clrscr();
init_port();
while(read_kb != 'c')
{
read_kb=getch();
send_byte(read_kb);
read_com=read_byte();
if(read_com!=0){printf("%c",read_com);}
}
}
void init_port()
{
union REGS regs;
regs.h.ah = 0x00;
regs.x.dx = COM2;
regs.h.al = PARAM;
int86( 0x14, ®s, ®s);
}
//return the state of the port
char state_port()
{
union REGS regs;
regs.h.ah = 0x03;
regs.x.dx = COM2;
int86( 0x14, ®s, ®s);
if(regs.h.ah & 0x80) printf("\t EXCEED TIME\n");
if(regs.h.ah & 0x40) printf("\t TSR EMPTY\n");
if(regs.h.ah & 0x20) printf("\t THR EMPTY\n");
if(regs.h.ah & 0x10) printf("\t INTERRUPTION\n");
if(regs.h.ah & 0x08) printf("\t THREAT ERROR\n");
if(regs.h.ah & 0x04) printf("\t PARITY ERROR\n");
if(regs.h.ah & 0x02) printf("\t OVERLOAD ERROR\n");
return (regs.h.ah);
}
//Keyboard handle
void keyb()
{
union u_type{int a;char b[3];}keystroke;char inkey=0;
if(bioskey(1)==0) return;
keystroke.a=bioskey(0);
inkey=keystroke.b[1];
switch (inkey)
{
case 1: keyb=0;
return; /*ESC*/
default: keyb=15;
return;
}
}
//Send a character to the serial port
void send_byte(unsigned char byte)
{
union REGS regs;
regs.h.ah = 0x01;
regs.x.dx = COM2;
regs.h.al = byte;
int86( 0x14, ®s, ®s);
if( regs.h.ah & 0x80)
{
printf("\t SENDING ERROR ");
exit(1);
}
}
//read a character from serial port
unsigned char read_byte()
{
int x,a;
union REGS regs;
if((estate_port() & 0x01))
{
regs.h.ah = 0x02;
regs.x.dx = COM2;
int86(0x14,®s,®s);
if(regs.h.ah & 0x80)
{
printf("\t RECEIVING ERROR");
exit(1);
}
return(regs.h.al);}
else
{
return(0); } }
8. PARALEL PORT
8.1. Portun Tanıtılması
Paralel portun standart sizaynı bilgisayarla yazıcı arasında bağlantı içindir. CPU’dan yazıcıya data göndermek için kullanılır.
Bu arayüz giriş çıkıl sinyallerini sürer. Bu sinyalin amacı bilgisayara yazıcının durumunu ve kontrolünü sağlar. Sekiz data biti bütün bilgileri saat pulseyle birlikte taşır.
Paralel port 8 çıkış data biti, 5 giriş kontrol biti ve 5 çıkış kontrol bitinden meydana gelmektedir.
Çıkışlar:
STROBE : Yazıcıya data biti okumaya hazır olduğunu belirtir. Data hazır olduğunda Yüksek mantıksal seviyeye döner.
INIT : Yazcıyı restler.
SLCT IN : Yüksek mantıksal seviyeye döndüğünde yazıcıyı seçer.
AUTO FD : Geri taşımanın takibindeki boş sayfayı yazıcıya belirtir.
D0-D7 : Data bitleridir.
Girişler:
ACK : Datanın doğru olarak alındığını CPU ya belirtir.
BUSY : Bu hattı yazıcı hafızası dolduğu zaman koyar. Bilgisayar fazla data gönderimini durdurur.
SLCT : Bilgisayara yazıcının hazır olduğunu belirtir.
ERROR : Hataları belirtir ve CPU daha fazla data gönderimini durdurur.
PE : Yazıcıda kağıt olmadığını belirtir.
Bütün bu sinyaller 25 pinlik konnektöre bağlanır. Bütün bitler TTL mantıksal seviyeye sahiptir.
8.2. Portun Adreslenmesi:
MS-DOS işletim sistemi LPT1,LPT2,LPT3 olarak üç port desteklemektedir. Bu portları PC nin hafıza haritasında ayrılmış olarak bulabiliriz. İlk önce LPT1 üzerinde çalışalım. Her paralel port I/O haritasındaki üç adresi kullanırç LPT! İçin üç adres 378H, 379H ve 37AH dır.
378H : Bu adreste CPU yazıcıya dataları göndermek için yazılır. Çıkış portudur. 8 data biti (D0-D7) çıkışportlarında görülmektedir. Tablo 2.1 konnektörün hangi pini kullanıldığı görülmektedir.
DATA BİT TABLOSU
| ||
BİT
|
ÖZELLİKLERİ
|
PIN
|
D0
|
DATA 0
|
2
|
D1
|
DATA 1
|
3
|
D2
|
DATA 2
|
4
|
D3
|
DATA 3
|
5
|
D4
|
DATA 4
|
6
|
D5
|
DATA 5
|
7
|
D6
|
DATA 6
|
8
|
D7
|
DATA 7
|
9
|
TABLO 8.1
379H : Giriş portudur. Bu sinyal, CPU yazıcının durumunu öğrenmek için kullanır. Tablo 2.2 de bitlerin konumlarını listelenmiştir.
BİTLERİN DURUM TABLOSU
| ||
BİT
|
ÖZELLİKLERİ
|
PIN
|
D0
|
Not Used
| |
D1
|
Not Used
| |
D2
|
Not Used
| |
D3
|
ERROR
|
15
|
D4
|
SLCT
|
17
|
D5
|
PE
|
12
|
D6
|
ACK
|
10
|
D7
|
BUSY
|
11
|
TABLO 8.2
37AH : Bu portu bilgisayar yazıcıyı kontrol etmek için sinyal gönderir. Bundan dolayı çıkış portudur. Tablo 2.3 de görülmektedir.
BİTLERİN KONTROL TABLOSU
| ||
BİT
|
ÖZELLİKLERİ
|
PIN
|
D0
|
STROBE
|
1
|
D1
|
AUTO FD
|
14
|
D2
|
INIT
|
16
|
D3
|
SLCT IN
|
17
|
D4
|
Habilitation IRQ7
| |
D5
|
Not Used
| |
D6
|
Not Used
| |
D7
|
Not Used
|
TABLO 8.3
Tablo 2.4 de portların durumları görülmektedir. Bütün LPT portları aynı LPT! Deki gibi aynı şekilde çalışırlar.
LPTn NIN ADRESLERİ
| |||
PORT
|
DATA
|
KONUM
|
KONTROL
|
LPT1
|
378H
|
379H
|
37AH
|
LPT2
|
278H
|
279H
|
27AH
|
LPT3
|
3BCH
|
2BDH
|
3BEH
|
TABLO 8.4.
8.3. Portun Programlanması:
Program1:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
/********************************************/
/*This program set the parallel port outputs*/
/********************************************/
void main (void)
{
clrscr();
outportb(0x378,0xff);
outportb(0x37a,0xff);
getch();}
Paralel portun çıkış adresinden nasıl byteların gönderildiği gösterilmiştir. Outportb( ); özelliği I/O portuna byte göndermek için parametrelerine port adresleri yazılır.
İkinci parametrede gönderilecek bitin mikraının gösterir.
Program 2:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
/*****************************************/
/*This function read parallel port inputs*/
/*****************************************/
int Read_Input()
{int Byte;
Byte=inportb(0x379);
return Byte;}
void main (void)
{int PP_Input;
clrscr();
PP_Input = Read_Input;
printf("%d",var);
getch();}
Paralel portun giriş adresinden nasıl byteların alındığını göstermektedir. İntportb( ) ; özelliği I/O adresinden bilgisayara bilginin alınmadır.