USART ve System Tick Timer

Başlatan muhittin_kaplan, 30 Ocak 2013, 17:27:58

muhittin_kaplan

Bu gün çalışma esnasında bir problemle karşılaştım. Epey Zorladı Açıkcası, Okadar Spagetti Kod İçerisinde Hatayı Ayıklamak Oldukça güç oldu. Sonunda Buldum. Ve öneri bekliyorum.
Biraz Problemden Bahsedeyim.
SystemTick 10ms ye kurulu ve Usarttan devamlı bilgi gitmesi gerekirken gitmiyordu. ADC, PWM, GLCD falan filanda vardı. Modülleri teker teker silmeye başladım. Hiç birşey Kalmadı SystemTick ve Usarttan Başka. USART tan hala bilgi gitmiyordu. System tick i devre dışı bıraktığım anda bilgilerin USART3 den gittiğini gördüm.
Peki neden System Tick engelliyordu ?

void systemtick_IRQ_Handler()
{
kod...
kod...
kod...
}

void USART_puts(USART_TypeDef* USARTx, volatile char *s){

	while(*s){
		
		while( !(USARTx->SR & 0x00000040) );
		USART_SendData(USARTx, *s);
		*s++;
	}
}
main ()
{
while()
{
UsartPutC(Falanfilan)
Birazbekle();
}
}

UsartPutC ye girdiğinde program, kesme gelirse ne olur. Bilgi Gitmez. Bu Problemi Çözmenin yöntemleri nedir.

System tick i fonksiyona girdiğinde kapatırım, Çıkışta açarım Oluyor Ama o zaman da systemtick in ne anlamı kalıyor.


fatih6761

Eğer her 10 milisaniyede gidecekse Timer ayarlayın. Timer kesmesinin önceliği SysTick'den daha yüksek yapılabiliyordu sanırım. Böylece veri gönderme sırasında kesme gelmez.

Klein

SysTick kesmesinin seri iletişimi veya döngüyü durdurması için bir neden yok. Tek sorun rutinin gereğinden fazla uzun olması olabilir.

*s++;

pointerin adresini değil , içeriğini artırmışsın. ctrl+v hatası sanırım.

muhittin_kaplan

Sadece SystemTick ve Usart ı deneme imkanınız var mı ? Gün Boyunca Bununla cebelleştim. SystemTick i kapattığımda Çalışması garip ozaman.

@Klein
Pointer in Hocam Doğrusu ne olmalı ?
&s++ mi ?

Klein


muhittin_kaplan

Bu hatanın bahsettiğim hataya sebep vermesi mümkünmüdür. neden systemtick usart ın veri göndermesini engeller ?

Klein

SysTick hatası ile ilgili olacağını düşünmüyorum.   

camby

systick içinde ne var hocam , sırayla kontrol ederek oradakileri de azaltmayı denesene

muhittin_kaplan

birşey yok

systemtickIRQ{

systemtickvalue++;
StartTime++;
AbsorpTime++;
BulkTime++;
}

hepsi bu