سلام
من میکرو 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; }
دیدگاه