سلام
من میکرو LPC1768 رو تو مد FIFO راه اندازی کردم. کد استفاده شده هم تقریبا شبیه این کد هست
همه چیز خوب کار میکنه بغیر از یک نکته. در ارسال یک رشته تنها کاراکتر آخری دریافت میشه. خیلی عجیب هست. جالب اینکه در صورتی که بین ارسال کاراکتر ها فاصله زمانی بندازی تمامی کاراکتر ها درست دریافت میشه. همه جور تست رو انجام دادم ولی نتیجه نداده.البته تو حالت دیباگ خود KEIL بخوبی کار میکنه !!!!!!!!!!
من میکرو LPC1768 رو تو مد FIFO راه اندازی کردم. کد استفاده شده هم تقریبا شبیه این کد هست
کد:
dll = (pclk/16)/baudrate ; /*baud rate */ LPC_UART1->FDR = 0; // Fractional divider not used LPC_UART1->LCR = 0x80 | lcr_d | lcr_p | lcr_s; // Data bits, Parity, Stop bit LPC_UART1->DLL = dll; // Baud Rate depending on PCLK LPC_UART1->DLM = (dll >> 8); // High divisor latch LPC_UART1->LCR = 0x00 | lcr_d | lcr_p | lcr_s; // DLAB = 0 LPC_UART1->IER = 0x03; // Enable TX/RX interrupts LPC_UART1->FCR = 0x07; /* Enable and reset TX and RX FIFO. */ ser_txRestart = 1;
کد:
void UART0_IRQHandler(void)
{
volatile unsigned long iir;
iir = LPC_UART0->IIR;
if ((iir & 0x4) || (iir & 0xC)) { // RDA or CTI pending
while (LPC_UART0->LSR & 0x01) { // Rx FIFO is not empty
SER_BUF_WR(ser_in, LPC_UART0->RBR); // Read Rx FIFO to buffer
}
}
if ((iir & 0x2)) { // TXMIS pending
if (SER_BUF_COUNT(ser_out) != 0) {
LPC_UART0->THR = SER_BUF_RD(ser_out); // Write to the Tx FIFO
ser_txRestart = 0;
}
else {
ser_txRestart = 1;
}
}
ser_lineState = LPC_UART0->LSR & 0x1E; // update linestate
return;
}




دیدگاه