|
需要用到4个串口,而OK6410 仅公开了3个串口,串口1 作为调试串口,在正常的wince 系统运行时无法使用,为此必须将调试串口转为普通串口,
方法如下(验证可用)
1.smdk6410.bat里
set BSP_NOUART0=1将这句的值去掉 ->set BSP_NOUART0=
set BSP_DEBUGPORT=SERIAL_UART0将这句屏蔽掉 ->@set BSP_DEBUGPORT=SERIAL_UART0
2.修改debug.c
SMDK6410->src->oal->oallib->Source files->debug.c
增加宏定义
// Defines
#ifndef DEBUG_PRINT
#define DEBUG_OUT 1
#define DEBUG_NOUT 0
#define DEBUG_PRINT DEBUG_NOUT
#endif
在函数OEMInitDebugSerial(),OEMWriteDebugByte(),OEMReadDebugByte
内部增加宏判断
#if(DEBUG_PRINT == DEBUG_OUT)
因上面定义了NEBUG_NOUT则意味着这些函数只是空函数
3.修改串口0的驱动文件;
文件名为ser_smdk6410.cpp
CPdd6410Serial0 类中做如下修改:
(1)增加宏定义
#ifndef DEBUG_PRINT
#define DEBUG_OUT 1
#define DEBUG_NOUT 0
#define DEBUG_PRINT DEBUG_NOUT
#endif
(2)凡是SetDTR()函数
全部用
#if(DEBUG_PRINT == DEBUG_OUT)
SetDTR(FALSE);
#endif
即相当于删除掉此函数的使用
(2)InitModem()
#if(DEBUG_PRINT == DEBUG_OUT)
virtual BOOL InitModem(BOOL bInit)
{
SetDTR(bInit);
return CPdd6410Uart::InitModem(bInit);
return 1;
}
#endif
(3)GetModemStatus()
virtual ULONG GetModemStatus()
{
#if(DEBUG_PRINT == DEBUG_OUT)
ULONG ulReturn = CPdd6410Uart::GetModemStatus();
ULONG ulEvent = 0;
m_HardwareLock.Lock();
BOOL fIsDSRSet = (((*m_pDSRPort) & (1<<m_dwDSRPortNum))==0);
//RETAILMSG(TRUE, (TEXT("DEBUG: DSRPort Register 0x%lx, Value 0x%lx, fIsDSRSet(%d).\r\n"), m_pDSRPort, *m_pDSRPort, fIsDSRSet));
if (fIsDSRSet != m_fIsDSRSet)
{
ulEvent |= EV_DSR | EV_RLSD;
//RETAILMSG(TRUE, (TEXT("DEBUG: DSRPort Register 0x%lx, Value 0x%lx, fIsDSRSet(%d).\r\n"), m_pDSRPort, *m_pDSRPort, fIsDSRSet));
}
ulReturn |= (fIsDSRSet?(MS_DSR_ON|MS_RLSD_ON):0);
m_fIsDSRSet = fIsDSRSet;
m_HardwareLock.Unlock();
if (ulEvent!=0)
{
EventCallback(ulEvent,ulReturn);
}
return ulReturn;
#else
return (CPdd6410Uart::GetModemStatus() | MS_CTS_ON);
#endif
}
|