Uart yardım !

Başlatan armsistem, 27 Temmuz 2011, 17:48:05

armsistem

Arkadaşlar selam ,

Uart konusunda kafayı kırmak üzeriyim ARM bir konudan başlayayım dedim ama yok sıyırmak üzereyim.


- Aşağıda kodda okuma yapıyorum datasheet baktığımda U0RBR 8 bitlik okuma alanı olarak görüyorum bu tam olarak nedemektir.
uint8 Uart1_RX(void)
  {while (!(U0LSR & 0x01));
   return (U0RBR);}



- Aşağıdaki döngüde rxdat olarak bir değişkene veriyi atama yapabiliyorum ve daha sonra PC'ye gönderiyorum ama çıktı şu şekilde oluyor gönderdiğim veri 'merhaba' diyelim çıktı şu şekilde oluyor meaarhaaba şeklinde saçma sapan bir sonuç çıkıyor. Neden ?

while(1){	 
  rxdat=Uart1_RX();
   putchar (rxdat);
   u1_string_gonder ("aa");	
//	}
}


- rxdat usnigned char bir değişken ben bu değişkeni bir türlü if leyemedim. 


if (rxdat=='merhaba')    olmuyor
if (rxdat=="merhaba")    olmuyor
if (rxdat='merhaba')    olmuyor
if (rxdat="merhaba")    olmuyor





- Aşağıdaki kod UART veri gönderip alabiliyorum. Ama mantığını hala çözemedim bu işide ezbere yapmak istemiyorum.


#include "LPC23xx.h"		
#define uint8 unsigned char
void u1_karakter_gonder(unsigned char ch);
void u1_string_gonder(const char *ch);
			  uint8 rxdat;
	

	unsigned char putchar (unsigned char ch)  /* Write character to Serial Port */
  {if (ch == '\n')
     {while (!(U0LSR & 0x20));
      U1THR = 0x0D; /* output CR */
     }
   while (!(U0LSR & 0x20));
      return (U0THR = ch);
  }
unsigned char getchar (void) /* Read character from Serial Port */
  {while (!(U0LSR & 0x01));
     return (*sonuc++=U0RBR);
  }



 void
u1_karakter_gonder (unsigned char ch){ // Karakteri seri porta yaz
while (!(U0LSR & 0x20)); // bus idle oluncaya kadar bekle
U0THR=ch; // karakter bus'a
}

   void
u1_string_gonder(const char *ch){ // string yazilacak
while(*ch) //
u1_karakter_gonder(*ch++);
}


uint8 Uart1_RX(void)
  {while (!(U0LSR & 0x01));
   return (U0RBR);}
	 
int main(void)
{
InitFrequency();
InitGPIO();
InitUART0();
		


while(1){	 

  rxdat=Uart1_RX();

   putchar (rxdat);
   u1_string_gonder ("aa");


	
//	}
}	 
}   
   
   




Not: Acemiye ne olur yardım bir çok link var okuyorum ama halen şu datasheet okuduğum U0RBR değişkebi 8 bir Read Only olayına kavrayamadım. 8 .bit nasıl erişirim nasıl okurum ???? Yoksa olmuyosa bırayaım bu işleri . Yardım eden arkadaşlar için şimdiden teşekkür ederim.

fahri-

arkadaşım rxdat hem char diyorsun hem de bu değişkene dizi aktarmaya çalışıyorsun.
bence önce arm ye başlamadan önce c'nin temellerini öğren ondan sonra devam et. böyle hem çok uğraşırsın hem de moralin bozulur. sadece tavsiye...

yamak

Bakın size tavsiyem eğer daha önce başka bir mikrodenetleyici ile çalışmamşıssanız ilk olarak pic ya da 8 bit lik bi işlemci öğrenmeniz ve c dilini iyi bir şekilde çözmeniz.Ama illada arm ile devam edecem diyosanız uart ı bi kenara bırakın gpıo ile ilgili şeyler yapın.sonra uarta geçersiniz.Bu şekilde çok zorlanırsınız.