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 )
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 :)
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.
elbette RS232 verisi tam olarak alındığı anda...
buffer dolduğu anda değilmi hocam ?
Ş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.
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.