prensipte usart tx kesmesi nasıl oluşur.

Başlatan greatgonzo, 20 Mart 2012, 15:31:42

greatgonzo

Seri iletişimde başarımın artması için sıklıkla usart ve ona bağlı kesmelerden bahsediliyor. Veri alma noktasında problem yok. İlgili registerlar veri ile dolunca rx kesmesi oluşuyor ve program kesme rutinine dallanıyor. Peki yollama kesmesi nasıl  prensipte nasıl olusuyor. Mesla veri1 veri2 ver3 diye 3 tane değişkenim olduğunu var sayarsak bunları göndermem gerektiğinde kesme nasıl olusacak. Bunun için hserout komutu ve parametrelerini kesme başlığı altında yazıp programı orayamı yönlendireceğim yoksa hserout komutunu kullanınca pic otomatik kesmeyemi gidecek. Nettede bu konuda fazla birşey bulamadım. Herkes alma durumundaki kesmelere odaklanmış durumda:-)

ete

#1
Hemen hemen hiç kullanım alanı olmayan bir kesme şekli. Zira bilgiyi yollayacak isen kesmeye bırakmak çok anlamlı değil. Direk HSEROUT komutunu kullanıp yollayabilirsin. Ama illa kesme ile yapayım dersen;

PIE1 resgiterinin 4 nolu bitini set edersen Transmit kesmesini aktif etmiş olursun. Tabiiki yine global kesmeler aktif ve perhipheral kesmelerde aktif olmalıdır.
Yollanacak bilgiyi TXREG registerine yerleştirirsin. Bu bilgi TSR registerine aktarıldığı anda kesme oluşturulur ve bilgi TX pininden yollanır. Bu durumda PIR1 registerinin 4 nolu biti Transmit kesme bayrağıdır ve set edilmiştir. Yeniden kesme oluşması için bu bayrağın sıfırlanması gerekirki direk ulaşılabilen bir bit değildir. Ama TXREG registerine yeniden bir bilgi yüklendiğinde bayrak otomatik olarak sıfırlanır. İşin mekanizması biraz karışık.

Ete

greatgonzo

Yorum için çok teşekkür ederim hocam. Bu açıklama nette neden örnekleri olmadığınıda gayet net açıklıyor açıklıyor.

veli dayı

hSerIn , [WAIT ("ABC"), DATA1]    kmotunda wait("abc") kısmını kullanmazsak ne olur hocam.c# da veri gönderim komutunda dur biti 1 olarak ayarlama yaptım.illede kullanılacaksa seriport veri gönderim arayüz programına ben ne yazmam gerekir.yani seri porttan "abc" mi göndermek lazım

ete

Alıntı yapılan: veli dayı - 11 Mart 2013, 11:31:30
hSerIn , [WAIT ("ABC"), DATA1]    kmotunda wait("abc") kısmını kullanmazsak ne olur hocam.c# da veri gönderim komutunda dur biti 1 olarak ayarlama yaptım.illede kullanılacaksa seriport veri gönderim arayüz programına ben ne yazmam gerekir.yani seri porttan "abc" mi göndermek lazım
Seri haberleşmede yollanan bilgi bir paket halinde yollanır.  Paketin başını belirleyende işaretçi dediğimiz "abc" ifadesidir.
Şayet bunu koymaz isen alıcı paketin herhangi bir yerinden data almaya başlar ve alınan bilgiler yanlış olur. Ama paketin başını bekleyip sonra almaya başlarsa her zaman doğru bilgi doğru değişkenlere yerleşmiş olur. Bu nedenle işaretçi çok önemlidir. Sağlıklı haberleşme için bence kullanılması zorunlu olan bir yöntemdir.
Ete

veli dayı

hocam cevap için teşekkür ederim.inşallah doğru anlamışımdır. seri porttan başlangıç değeri göndermek lazım önce

ete

Yollanan bilgiyininbir TREN olduğunu düşün. Başta lokomotif var ve ardından vagonlar geliyor.
Birisinde dedinki 3 nolu vagonda xxx var onu al.
Adam ne yapması lazım.?
- Önce istasyona gelecek.
- Treni bulacak
- Sonra Lokomotifi bulacak ve ondan sonra 3 vagon sayıp içindekini alacak.

Senin yollayacağın "abc" bilgisi burada lokomotif görevini görüyor. Yani katarın başını belirlemiş oluyor.
Sonrasında gelen vagonlar ise yollanan bilgileri temsil ediyor.

Düşünki bazen uyandırma sinyali önden yollanıyor. Bu hiç bir zaman paketin başı değildir. Paketin başını işaretçi belirliyor.
Anlaman gereken budur. İşaretçi olmaz ise işlemci paketi ilk karşılaştığı yerden itibaren almaya başlar. Bu bir data byt'ının ortasıda olabilir birkaç değişken yollanıyorsa ikinci değişkenden itibaren de olabilir. Ama işaretçi olursa mutlaka işaretçinin gelmesini bekler ondan sonra sırası ile gelenleri alır. Temel mantık budur.

Ete


Powered by EzPortal