abuffalo 发表于 2012-3-29 19:31:34

求教LPC934串口收发问题,问题有点奇怪!

用LPC934做了个收转发的程序,上位机下发数据给934,934在接收中断里收数据,保存到缓冲区,在主程序里将收到的数据再转发给上位机,现在碰到的问题是,明明上位机下发了180个字节,但实际收到的转发数据却只有143个。934的程序已经精简到最小,只开了一接收中断,发送是放在主程序里,用的查询方式,缓冲区用来平衡收发速度,缓冲区调整大小也没有效果。

整了两天了,实在是找不到原因。求解,求指点!

abuffalo 发表于 2012-3-29 19:32:23

本帖最后由 abuffalo 于 2012-3-29 19:43 编辑



void UartInit(void)
{
    P1M1 &= 0xFE;               // For TxD = P1.0   Push-Pull   (M1=0, M2=1)
    P1M2 |= 0x01;
       
        SCON = 0x50;                                // select BRG as UART Baud Rate Gen
        SSTAT = 0x60;                                // separate Rx / Tx interrupts
        BRGR0 = 0xB0;                                // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
        BRGR1 = 0x00;
        BRGCON = 0x03;                     // enable BRG
        ESR = 1;                                    // enable UART interrupt
    //EST = 1;
}



uint8 RcvBuffer;
uint8 WritePtr = 0;
uint8 ReadPtr = 0;

void UART_RX_ISR(void) interrupt 4// 接收中断
{

    RI = 0;                  // 清接收标志位为0

    RcvBuffer = SBUF;
    if (WritePtr == 30) WritePtr = 0;
}


extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;

void main(void)
{
    // IO初始化
   IOInit();

    // Uart初始化
   UartInit();

    // 开中断
   EA = 1;

    while(1)
    {         
      if (ReadPtr != WritePtr)
      {
            TI = 0;
            SBUF = RcvBuffer;
            while (!TI);
            if (ReadPtr == 30) ReadPtr = 0;
      }
   }
}

abuffalo 发表于 2012-3-29 19:45:04

求指点!{:time:}{:time:}{:time:}{:time:}{:time:}

abuffalo 发表于 2012-3-29 19:55:19

帖子沉的太快,顶起!
页: [1]
查看完整版本: 求教LPC934串口收发问题,问题有点奇怪!