LPC2103 UART-ISIS problemi...

Başlatan LukeSkywalker, 06 Şubat 2011, 15:25:40

LukeSkywalker

NXP'den indirdiğim uygulama notlundan aldığım uart kodlarını denemek için derledim ve ISIS te simülasyon yaptım. Simülasyonda virtual terminalden gönderdiğim veriyi alıyorum fakat ISIS ;
"[UART0]Data overrun (FIFO is full), OR bit is set" diye bir hata veriyor. Sebebi nedir? Daha önce karşılaşan var mı?

X-Fi

tampon bellek doldu diyor çok hızlı peşpeşe veri gönderiyor olmalısınız bekleme zamanlarını gözden geçiriniz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

LukeSkywalker

#2
Sorunu çözdüm. U0FCR registerın'ın  TX FIFO bitini 1 yapmak gerekiyor her bayttan sonra. Dolduğu zaman resetlenip 0'a düşüyor bit otomatikmen. Kod aşağıdaki gibi.  Her veri gönderiminden sonra bir müddet gecikme koydum ki FIFO daki bilgi veri gönderilmeden uçmasın diye... Yanlışım veya eksiğim varsa düzeltsin üstadlar...
/* Include header file depending upon device been used */
#include"LPC2103.h"
				   
void delay(void)
{
 long z;
 for(z=0;z<10000;z++);
}


void Initialize(void);
/* Macro Definitions */
#define TEMT (1<<6)
#define LINE_FEED 0xA
#define CARRIAGE_RET 0xD
/************************* MAIN *************************/
int main(void)
{
int i;
char cod[9]="Maytere";
Initialize();
/* Print forever */
while(1)
{
i=0;
/* Keep Transmitting until Null character('\0') is reached */
while(cod[i])
{					   
U0THR=cod[i];
delay();
U0FCR=0x7;
i++;
}
U0THR=LINE_FEED;
delay();
U0FCR=0x7;
U0THR=CARRIAGE_RET;
delay();
U0FCR=0x7;
/* Wait till U0THR and U0TSR are both empty */
while(!(U0LSR & TEMT));
}
}

void Initialize(void)
{
/* Initialize Pin Select Block for Tx and Rx */
PINSEL0=0x5;
/* Enable FIFO's and reset them */
U0FCR=0x7;
/* Set DLAB and word length set to 8bits */
U0LCR=0x83;
/* Baud rate set to 9600 */
U0DLL=0x20;
U0DLM=0x0;
/* Clear DLAB */
U0LCR=0x3;
}