需要用到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 } |