Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?

Başlatan 50Cal, 18 Mayıs 2011, 18:46:34

50Cal

getc() ile bir veri alınırken yada adc okuması yaparken timer kesmesine girilirse ne gibi bir durum oluşur?
-Veri kaybı mı oluşur?
-Yoksa seri iletişim ve adc birimlerinde bir tampon(buffer) yapısı vardır ve program timer kesmesine gitse de veriler bu tampona atılıp, timer kesmesi çıkışında oradan mı alınır?
-Yada CCS, bu komutların işletimi boyunca kesmeleri iptal mi eder?

Eğer kesmeler iptal ediliyorsa şöyle bir sonuç çıkıyor: Getc() kullanılan bir programda timer ile hassas zamanlama yapılamaz. ( 19600 baud rate ile 1 byte'ın iletim süresi yaklaşık 511 us )

Erol YILMAZ

Donanımdan olan bütün şeyler de bir BUFFER var,
ADC okunur  sonuç bir yere aktarılır,
RS232 den veri gelir bir yere aktarılır  orada bekler...

Ama CCS nin kolay yapısına alışınca bunlar görünmez olur ve sistemden kopulur :)

50Cal

Teşekkürler.
O zaman şöyle bir soru sorayım:
Seri iletişim kesmesi tam olarak ne zaman oluşur, yani program kesme fonksiyonuna ne zaman atlar?

1) Rx ucundan start biti alındığı anda mı?
2) En az 1 byte verinin alımı tamamlanıp buffera yazıldığında mı?

19200 bps için bu iki durum arasında yarım ms gibi ciddi bir zaman farkı var.


Erol YILMAZ


muhittin_kaplan


50Cal

Şimdi 877 datasheetini inceledim; 2 bytle'lık bir buffer var. Bir byte alımı tamamlanınca buffer'a atılıyor ve buffer'da 1 bytelık alan dolduğunda kesme oluşuyor.

z

Alıntı YapO zaman şöyle bir soru sorayım:
Seri iletişim kesmesi tam olarak ne zaman oluşur, yani program kesme fonksiyonuna ne zaman atlar?

1) Rx ucundan start biti alındığı anda mı?
2) En az 1 byte verinin alımı tamamlanıp buffera yazıldığında mı?

19200 bps için bu iki durum arasında yarım ms gibi ciddi bir zaman farkı var.

Seri olarak gelen bitler seri iletisim donanimindaki shift registere sirayla alinir, son data bit de girdiginde shift register icerigi RX Buffer icine kopyalanir ve Rx Ready int flagi set edilir.

Tek bir tane seri iletisim kesmesi yok. Kullanilan islemciye bagli olarak  cok sayida seri port kesmesi olabilir.

Tx Buffer Empty (Shift reg)
Rx Buffer Full (Shift reg)
Rx Data Full  (Rx ready)
TX Buffer Empty (Tx Buffer)
FIFO varsa bununla ilgili intlar.
Bunlarin disinda bozuk cerceve, veri ezilmesi, break int olabilir.

Seri INT uretildiginde islemci zaten bir baska int rutini icindeyse  seri INT uretildigi (ilgili flaglar set edildigi)  halde, ilgili kesme fonksiyonuna atlama isi gecikebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com