Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: 50Cal - 18 Mayıs 2011, 18:46:34

Başlık: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: 50Cal - 18 Mayıs 2011, 18:46:34
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 )
Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: Erol YILMAZ - 18 Mayıs 2011, 19:42:46
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 :)
Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: 50Cal - 18 Mayıs 2011, 20:01:14
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.

Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: Erol YILMAZ - 18 Mayıs 2011, 20:14:05
elbette RS232 verisi tam olarak alındığı anda...
Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: muhittin_kaplan - 18 Mayıs 2011, 20:38:50
buffer dolduğu anda değilmi hocam ?
Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: 50Cal - 18 Mayıs 2011, 20:43:54
Ş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.
Başlık: Ynt: Read ADC yada Getc komutu işlerken timer kesmesi oluşursa ?
Gönderen: z - 18 Mayıs 2011, 22:32:45
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.