如何释放占用的调试串口COM0?

ayin6682 2012-05-31 12:07:28
我用的是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
...全文
428 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengchonglin 2012-06-01
  • 打赏
  • 举报
回复
把Src\Kernel\Oal\debug.c
里面所有的函数设置成空函数

月之海 2012-05-31
  • 打赏
  • 举报
回复
在工程目录下,查看reginit.ini,看UART0注册表配置是否有 编译进 OS.编译进去了,UART0才可做为普通串口来用。
月之海 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
这是我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……
[/Quote]
进到Platform.reg,把UART0 注册表的环境变量拿掉,然后debug.c中的函数内容屏蔽掉。
ayin6682 2012-05-31
  • 打赏
  • 举报
回复

这是我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_NOSERIAL=
set BSP_NOKEYBD=
set BSP_NOTOUCH=
set BSP_NOPWRBTN=1
set BSP_NOAUDIO=
set BSP_NOUSBHCD=
set BSP_NOUSBFN=
set BSP_NOCS8900=
set BSP_NODM9isa=
set BSP_NOBACKLIGHT=1
set BSP_NOBATTERY=1
set BSP_NONAND=
set BSP_NOPCCARD=1
set BSP_NONLED=1
set BSP_NOIRDA=1
set BSP_NOD3DM=1
set BSP_NOCAMERA=
set BSP_NOI2C=

set BSP_USEDVS=

set BSP_KITL=NONE
rem set BSP_KITL=SERIAL_UART0
rem set BSP_KITL=SERIAL_UART1
rem set BSP_KITL=USBSERIAL
rem set BSP_KITL=ETHERNET

set BSP_USBFN_SERIAL=1
rem set BSP_USBFN_RNDIS=1
rem set BSP_USBFN_STORAGE=1

我把rem set BSP_KITL=SERIAL_UART0
改成:rem set BSP_KITL= ;没有用啊。。COM0还是无法打开,占用。
kock 2012-05-31
  • 打赏
  • 举报
回复
不是冒充高人,纯路过。
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

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧