lpc2103 Sorunlarım...

Başlatan fatal1ty, 18 Ocak 2009, 22:32:48

fatal1ty

Selamlar arkadaşlar, şubat tatiindeki 2haftalık süre içinde arm7 ile uğraşacağım, en başta uart, timer kesmeleri ve I2C olmak üzere uğraşmayı düşünüyorum.Sorunlarımı da buradan yazayım. En son ise en basit şekilde butün yazdığım programları buraya koymayı düşünüyorum. Yardımcı olursanız sevinirim...

Proteusta lpc2103'ü çalıştırıyorum; led işlemleri falan ile başladım.
Şimdi UART ile uğraşıyorum. Fakat proteusta bir türlü deneyemedim. Virtual terminal kullanıyorum. Fakat birşey gelmiyor. Osiloskop ilede bakayım dedim TX bacağına fakat birşey çıkmıyor.

Kullandığım kod aşağıda. Sizce sorun nerededir? Proteustan lpc'ye sağ tıklayıp 30mhz'ye ayarladım.

Şimdiden teşekkür ederim, iyi  çalışmalar...


#define CR     0x0D
#include <LPC21xx.H>
 
void init_serial (void);
int putchar (int ch);
int getchar (void);


unsigned char test;

int main(void)
{
VPBDIV = 0x02;						//Divide Pclk by two
init_serial();

while(1)
{

putchar('A');					//Echo terminal
}
}

void init_serial (void)			  /* Initialize Serial Interface       */
{               	   
  PINSEL0 	= 0x00050000;         /* Enable RxD1 and TxD1              */ 
  U1LCR 	= 0x00000083;         /* 8 bits, no Parity, 1 Stop bit     */
  U1DLL 	= 0x000000C2;         /* 9600 Baud Rate @ 30MHz VPB Clock  */
  U1LCR 	= 0x00000003;        /* DLAB = 0                          */
}


int putchar (int ch) 			  /* Write character to Serial Port    */
{                  		

  if (ch == '\n')  {
    while (!(U1LSR & 0x20));
    U1THR = CR;              	   /* output CR */
  }
  while (!(U1LSR & 0x20));
  return (U1THR = ch);
}


int getchar (void) 				/* Read character from Serial Port   */
{                    

  while (!(U1LSR & 0x01));

  return (U1RBR);
}

Analyzer

Selam,

Aslında Keil'in MCB kartlarının örnekleri çalışıyor örnekler klasöründe ama tekrar vereyim. VT'nin RXD P0.8 ve TXD P0.9 pinine bağlı. Kullandığım işlemci LPC2138, PINSEL0 = 0x00050000; satırıyla pinler ayarlanabilir.
Kolay gelsin,

Analyzer

#include <LPC21xx.H>                     /* LPC21xx definitions               */ 
#define CR     0x0D 

void init_serial (void)  {      /* Initialize Serial Interface       */ 
  PINSEL0 = 0x00050000;            
  U1LCR = 0x83;                /* 8 bits, no Parity, 1 Stop bit     */ 
  U1DLL = 97;                    /* 9600 Baud Rate @ 15MHz VPB Clock  */ 
  U1LCR = 0x03;                /* DLAB = 0                          */ 
} 
int sendchar (int ch)  {                 /* Write character to Serial Port    */ 

  if (ch == '\n')  { 
    while (!(U1LSR & 0x20)); 
    U1THR = CR;                          /* output CR */ 
  } 
  while (!(U1LSR & 0x20)); 
  return (U1THR = ch); 
} 


int getkey (void)  {                     /* Read character from Serial Port   */ 

  while (!(U1LSR & 0x01)); 

  return (U1RBR); 
} 

void sendstring (char *string) 
{ 
  while (*string)  { 
    sendchar (*string++); 
  } 
} 

void main (void) { 
  
char str[] = "     "; 
   IODIR0 |= 0x0000bff1; 
   IODIR1  = 0xFFFF0000;                  
  
  init_serial(); 
    
   while(1) 
   { 
  
  sprintf(str,"ABCDE"); 
  sendstring(str); 
  delays(); 
  sendchar(13); 
  } 

}
Üşeniyorum, öyleyse yarın!

fatal1ty

Selamlar,
Proteusta sürekli uyarı alıyorum;
CPU clock frekansı 75 mhz, maksimum frekans olan 60mhz'i geçiyor.
Daha sonrada sistem aşırı yükten gerçek zamanlı çalışamıyor diyor.

Sistemi durdurduğumda ise bazı bacakların modellenmediği hatasını alıyorum fakat burda bir sorun yok sanırım...

Devrede kristal bağlı. Kristali 15mhz yaptım sizin programda, lpcyide 15mhz yaptım, keildende 15mhz'yi ayarladım. Fakat sonuç yine yok txden sinyal alamıyorum...

Analyzer

Alıntı yapılan: "farabiahmed"Selamlar,
Proteusta sürekli uyarı alıyorum;
CPU clock frekansı 75 mhz, maksimum frekans olan 60mhz'i geçiyor.
Daha sonrada sistem aşırı yükten gerçek zamanlı çalışamıyor diyor.

Sistemi durdurduğumda ise bazı bacakların modellenmediği hatasını alıyorum fakat burda bir sorun yok sanırım...

Devrede kristal bağlı. Kristali 15mhz yaptım sizin programda, lpcyide 15mhz yaptım, keildende 15mhz'yi ayarladım. Fakat sonuç yine yok txden sinyal alamıyorum...
Selam,

Dün gönderdiğim dosya yanımda değil ancak şunu söyleyebilirim. Clock divider, kullandığınız işlemcide 1/5 olduğundan 60/5 = 12 mhz'i geçmemeniz gerekir yoksa Proteus hata verir. Bacakların modellenmemesi sorunu simulasyon için önemli değil.
Zannediyorum, tx ve rx pinleri yanlış konfigüre edilmiş ve/veya tx ve rx bacakları yanlış bağlı. Tüm pinleri tekrar gözden geçirmekte fayda var. Eğer sorun devam ederse akşam kendi projelerimden bir tanesini ayıklayıp burada yayınlarım.

Analyzer

Edit : Dosyayı tekrar oluşturdum :

http://rapidshare.de/files/42443518/Blinky.rar.html
Çok hızlı data aktığı için 9600 sınırını aşıyor ve simulator data overrun'a düşüyor. Zamanlamaları ayarlarsanız problem kalmaz. (Vaktim bu kadarına müsaade etti)
Üşeniyorum, öyleyse yarın!

ahmet2004


fatal1ty

Arkadaşlar ilginiz için çok teşekkür ederim,

SeriPorttan doğru olmasada birşeyler alabiliyorum, sanırım kristal ile ilgili bir sorun var U1DLL datasheette 14.7456mhz için 60 olması gerek diyor. Fakat yinede doğru sonuç alamıyorum...

Şimdiden çok teşekkür ederim, herkese iyi çalışmalar...

sakarya

Uart'n rx pinini pull-up yapmayı bir dene. Hem proteus'ta hem de gerçek kitte boşta kalan rx pini sorun çıkartmıştı bana.

fatal1ty

Sorun baudrateleri ayarlayan register değerindeymiş(DLL). Datasheetteki örnek uygulamadaki formülleri uygulayarak kendi KRistalime uygun olması gereken değeri buldum. Fakat oda çalışmadı. Saçma karakterler gönderiyordu. Daha sonra biraz deneyim dedim, kafamdan attım bir kaç denemeden sonra tutturdum.
Kristal: 19.6608mhz
Baudrate: 57600
DLL = 0x15 :D

____

LPCye programı atarken bootloader sayesinde seriporttan 9600baudrate ile atıyorum. Bu bootloader'ın 57600de program kabul edecek şekli lazım. Bu işi yapabilmem mümkünmüdür?

Analyzer

Selam,

Programı daha hızlı yüklemek için seri port değil de artık j-link ya da en azından sadece keil çalışıyorsanız u-link kullanmanızın zamanı gelmiş..

Analyzer
Üşeniyorum, öyleyse yarın!

fatal1ty

Amacım hızın yanında kablosuz program yüklemek. Bilgisayarda seriporttan veri gönderen verici sistem var, arm'dada alıcı. Kablosuz programlama yapmak istiyorum.

microcozmoz

Sparkfun Wireless bootloading

Kablosuz bootloader olayına sparkfunda rastlamıştım..
"Bütün bu şerâitten daha elîm ve daha vahim olmak üzere, memleketin dahilinde, iktidara sahip olanlar gaflet ve dalâlet ve hattâ hıyanet içinde bulunabilirler."

fatal1ty

Evet inceledim, onlar sanırım programlayıcısı ile ilgili mcu'nun bootloader'ı içine atılıyor ve seriporttan programlanıyor. Fakat LPCnin bootloader'ı nasıl atılıyor acaba? onun içinde jtag programlayıcımı lazım ki?

mezire

selam .

programın şifresi var. nedir acaba ?