首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

怎么释放占用的调试串口COM0

2012-08-03 
如何释放占用的调试串口COM0?我用的是TQ2440的板子,串口不够用,只有用调试串口COM0了,我把Src\Kernel\Oal\

如何释放占用的调试串口COM0?
我用的是TQ2440的板子,串口不够用,只有用调试串口COM0了,我把Src\Kernel\Oal\debug.c中的OEMWriteDebugByte() ,OEMReadDebugByte() ,OEMWriteDebugLED()内容屏蔽掉,发现没有调试信息输出了,但是应该程序无法打开,显示占用。
不服气,找到OEMInitDebugSerial() 函数,网上盛传改它了:发现它不好改,稍微动下就无法启动了,白屏。
VOID OEMInitDebugSerial() 
{
//#if(BSP_UARTn == BSP_nouse_UART)
S3C2440A_IOPORT_REG *pIOPortReg;
//#ifdef DEBUG
UINT32 logMask;
// At this moment we must suppress logging.
//
logMask = dpCurSettings.ulZoneMask;
dpCurSettings.ulZoneMask = 0;
//#endif
// Configure port H for UART
//
pIOPortReg = (S3C2440A_IOPORT_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
#if(BSP_UARTn == BSP_use_UART0)
// GPH2 and GHP3 are UART0 Tx and Rx, respectively.
//
CLRREG32(&pIOPortReg->GPHCON, (3 << 4)|(3 << 6));
SETREG32(&pIOPortReg->GPHCON, (2 << 4)|(2 << 6));
// Disable Pull-up on TXD0 and RXD0.
//
SETREG32(&pIOPortReg->GPHUP, (1 << 2)|(1 << 3));
// UART1 (TXD0 & RXD0) used for debug serial.
//
g_pUARTReg = (S3C2440A_UART_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_UART0, FALSE);
// Configure the UART.
//
OUTREG32(&g_pUARTReg->UFCON, BSP_UART0_UFCON);
OUTREG32(&g_pUARTReg->UMCON, BSP_UART0_UMCON);
OUTREG32(&g_pUARTReg->ULCON, BSP_UART0_ULCON);
OUTREG32(&g_pUARTReg->UCON, BSP_UART0_UCON);
OUTREG32(&g_pUARTReg->UBRDIV, BSP_UART0_UBRDIV);
#endif
#if(BSP_UARTn == BSP_use_UART1)
// GPH2 and GHP3 are UART1 Tx and Rx, respectively.
//
CLRREG32(&pIOPortReg->GPHCON, (3 << 8)|(3 << 10));
SETREG32(&pIOPortReg->GPHCON, (2 << 8)|(2 << 10));
// Disable pull-up on TXD1 and RXD1.
//
SETREG32(&pIOPortReg->GPHUP, (1 << 4)|(1 << 5));
// UART1 (TXD1 & RXD1) used for debug serial.
//
g_pUARTReg = (S3C2440A_UART_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_UART1, FALSE);
// Configure the UART.
//
OUTREG32(&g_pUARTReg->UFCON, BSP_UART1_UFCON);
OUTREG32(&g_pUARTReg->UMCON, BSP_UART1_UMCON);
OUTREG32(&g_pUARTReg->ULCON, BSP_UART1_ULCON);
OUTREG32(&g_pUARTReg->UCON, BSP_UART1_UCON);
OUTREG32(&g_pUARTReg->UBRDIV, BSP_UART1_UBRDIV);
#endif
dpCurSettings.ulZoneMask = logMask;
}

于是乎找到:TQ2440.bat打开,并没有网上说的:set BSP_NOUART0=1,
倒是找到个:rem set BSP_KITL=SERIAL_UART0,直接改成:rem set BSP_KITL=
COM0还是被占用,无法应用程序打开。

接下来只有改传说中的注册表了,找到注册表项:找到COM0项:
; @CESYSGEN IF CE_MODULES_SERIAL
IF BSP_NOSERIAL !
;IF BSP_KITL != SERIAL_UART0
;=============== UART0 (physical COM1 connector P1) (Serial) ===============
;[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial0]
;"DeviceArrayIndex"=dword:0
;"Irq"=dword:1c
;"MemBase"=dword:50000000
;"MemLen"=dword:2C
;"InterruptBitsShift"=dword:0 ; UART 0 Interrupt Sub Register shift bit.
;"ISTTimeouts"=dword:200; every 512 ticks checking Modem status.
;"Prefix"="COM"
;"Index"=dword:1
;"Dll"="serial_smdk2440.dll"
;"Order"=dword:0
;"Priority"=dword:0
;"Port"="COM1:"
;"DeviceType"=dword:0
;"FriendlyName"=LOC_DISPLAYNAME_COM1
;"Tsp"="unimodem.dll"
;"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
;"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
;ENDIF
听说全屏蔽掉有用,好吧,全屏蔽掉,发现还是COM0还是占用。

还有一招,改驱动程序:找到ser_smdk2440.cpp;
virtual void SetDefaultConfiguration() {
CPdd2440Uart::SetDefaultConfiguration();
}
virtual BOOL InitModem(BOOL bInit) {
SetDTR(bInit);
return CPdd2440Uart::InitModem(bInit);


}
virtual ULONG GetModemStatus() {
return (CPdd2440Uart::GetModemStatus());//HJ_add 20100112
}
virtual void SetDTR(BOOL bSet) {
};
private:
  volatile S3C2440A_IOPORT_REG * m_pIOPregs; 
据说可以屏蔽SetDTR(bInit)有用,好吧,再来,结果发现COM0还是占用。

还剩最后一招:屏蔽所有进入OEMInitDebugSerial()函数的地方,我找哇找哇。把所有OEMInitDebugSerial()的调用全屏蔽了,发现COM0还是占用着;

现在COM0还是占用,,快奔溃了,请高人指点小弟一二啊。
注:底层COM0对应COM1


[解决办法]
不是冒充高人,纯路过。
BSP目录下是否有什么设置?
例如
C:\WINCE600\PLATFORM\SMDKC100\SMDKC100.bat
中有
set BSP_DEBUGPORT=SERIAL_UART0
@REM set BSP_DEBUGPORT=SERIAL_UART0
@REM set BSP_DEBUGPORT=SERIAL_UART1
@REM set BSP_DEBUGPORT=SERIAL_UART2
@REM set BSP_DEBUGPORT=SERIAL_UART3

set BSP_KITL=NONE
@REM set BSP_KITL=SERIAL_UART0
@REM set BSP_KITL=SERIAL_UART1
@REM set BSP_KITL=SERIAL_UART2
@REM set BSP_KITL=SERIAL_UART3
@REM set BSP_KITL=USBSERIAL
[解决办法]

探讨
这是我C:\WINCE600\PLATFORM\SMDKC100\TQ2440.bat全部源代码:
并没有什么set BSP_DEBUGPORT=SERIAL_UART0;
连网上说的:set BSP_NOUART0=1都没有。。。

set WINCEREL=1
set BSP_NOPCIBUS=1
set BSP_NOSD=
set BSP_NODISPLAY=
set BSP……

[解决办法]
在工程目录下,查看reginit.ini,看UART0注册表配置是否有 编译进 OS.编译进去了,UART0才可做为普通串口来用。
[解决办法]
把Src\Kernel\Oal\debug.c
里面所有的函数设置成空函数

热点排行