none
急!串口数据为什么丢失 RRS feed

  • 问题

  • 平台:s3c2440 + wince5
    按标准的流驱动模型,编写了一个UART的测试驱动Dll,开发板UART与PC串口相连
    [C/C++ code]
    //因无法上网只能写个大概了,程序大致如下
    #define UART_BASE 0xB1004000
    #define INT_BASE  0xB0A00000
    #define IOP_BASE  0xB1600000

    Virtual_Alloc()
    {   
            //分配虚拟地址
    }

    //串口初始化
    UART_INIT()
    {   
            v_pIORegs->GPHCON &= 0x3ff0ff;       //set TXD1 RXD1
            v_pIORegs->GPHCON  |= 0x000a00;    //初始化配置UART
            s2440UARTs->ULCON   = 0x3;   
            s2440UARTs->UCON     = 0x245;
            s2440UARTs->UFCON   = 0x0;
            s2440UARTs->UMCON   = 0x0;

            UBRDIV   //波特率为115200
    }

    //发送函数
    UART_Write(DWORD hOpenContext, Char *pScourceBytes, DWORD NumOfBytes)
    {
           v_pIOPregs->GPHCON &= 0x3ff3ff;   //Close RxD1, Set RxD1 to Input
           v_pIOPregs->GPHCON &= 0x3ffcff;   //Open TxD1
           v_pIOPregs->GPHCON  |= 0x000200;

           for (int i =0; i < NumOfBytes; i++)
          {
                 while (!(s2440UARTs->UTRSTAT &0x2));
                 s2440UARTs->UTXH = pScourceBytes;
          }  

      //(1)

          v_pIOPregs->GPHCON &=0x3ffcff;   //Close TxD1, Set TxD1 to Input
          v_pIOPregs->GPHCON &=0x3ff3ff;   //Open RxD1
          v_pIOPregs->GPHCON  |= 0x000800;

    }

    驱动编译完后,在应用程序中使用如下函数发送数据

    WriteFile(m_hUARTDev, UARTTraBuffer, 17, &dwNumBytesWritten, NULL);

    PC串口调试器中只接收到15个字节,这是为什么?


    可我在上面程序的//(1)处添加一段延时,数据就全部接收到了,这又是为什么?前面的for()循环不是已经把数据都发送出去了吗,为什么还要添加延时呢???如果要添加延时,要如何添加才最好呢?

    2009年9月29日 15:07

全部回复

  • 呵呵,个人感觉,driver的事情,很多时候都比较难从代码层面判断其逻辑。如果真要穷根究底,可能接个示波器看波形图就明白了。
    最近有了小宝宝,他比较淘气,所以来这里的时间少了挺多。非常抱歉。
    2009年10月10日 2:33
    版主