平台: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()循环不是已经把数据都发送出去了吗,为什么还要添加延时呢???如果要添加延时,要如何添加才最好呢?