昨天,胡sir问我如何把FL2440 的调试串口改为普通串口,我答应他晚上回去看看,晕,昨晚忘记带笔记本电源回去了。所以现在立即补上——我没有在平台上试过,不过我看了一下BSP,我觉得应该是按照如下步骤改的 一、看F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A/Src/Kernel/Oal 下的debug.c文件有:
- //------------------------------------------------------------------------------
- // Defines
- #define DEBUG_SERIAL_UART0 1
- //#define DEBUG_SERIAL_UART1 1
- #ifdef DEBUG_SERIAL_UART0
- #define FEILING_DEBUG 1
- #elif DEBUG_SERIAL_UART1
- #define FEILING_DEBUG 1
- #else
- #define FEILING_DEBUG 0
- #endif
- //------------------------------------------------------------------------------
复制代码
如上说明FL2440 采用了 uart0作为 debug 串口。 再看F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A 下的SMDK2440A.bat文件有 @REM DEBUG SERIAL PORT @REM You also need to change the macro definition in debug.c REM set DEBUG_SERIAL= set DEBUG_SERIAL=SERIAL_UART0 REM set DEBUG_SERIAL=SERIAL_UART1
呵呵,正好和debug.c对应。 再来看F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A/Files 下的platform.reg
- ; @CESYSGEN IF CE_MODULES_SERIAL
- IF BSP_NOSERIAL !
- IF BSP_NOUART0 !
- IF BSP_KITL != SERIAL_UART0
- IF DEBUG_SERIAL != SERIAL_UART0 ;这个宏定义造成uart0的驱动没有被加载成普通串口,呵呵,若要做普通串口,在SMDK2440A.bat把这个环境变量去掉
- ;=============== UART0 (physical COM1 connector P1) (Serial) ===============
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial]
- "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:4
- "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
- ENDIF
- ENDIF
- IF BSP_NOUART1 !
- IF BSP_KITL != SERIAL_UART1
- IF DEBUG_SERIAL != SERIAL_UART1
- ;=============== UART1 (physical COM2 connector P2) (Serial) ===============
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial1]
- "DeviceArrayIndex"=dword:1
- "Irq"=dword:17
- "MemBase"=dword:50004000
- "MemLen"=dword:2C
- "InterruptBitsShift"=dword:3 ; UART 1 Interrupt Sub Register shift bit.
- "ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
- "Prefix"="COM"
- "Index"=dword:2
- "Dll"="serial_smdk2440.dll"
- "Order"=dword:4
- "Priority"=dword:0
- "Port"="COM2:"
- "DeviceType"=dword:0
- "FriendlyName"=LOC_DISPLAYNAME_COM2
- "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
- ENDIF
- ENDIF
- IF BSP_NOUART2 !
- IF BSP_KITL != SERIAL_UART2
- ;=============== UART2 (physical COM3 connector P2) (Serial) ===============
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial2]
- "DeviceArrayIndex"=dword:1
- "Irq"=dword:f
- "MemBase"=dword:50008000
- "MemLen"=dword:2C
- "InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
- "ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
- "Prefix"="COM"
- "Index"=dword:3
- "Dll"="serial_smdk2440.dll"
- "Order"=dword:4
- "Priority"=dword:0
- "Port"="COM3:"
- "DeviceType"=dword:0
- "FriendlyName"="Serial Cable on COM3";LOC_DISPLAYNAME_COM3
- "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
- ENDIF
- IF BSP_NOIRDA !
- ; S2440 IrDA(UART2)
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/IRDA2440]
- "DeviceArrayIndex"=dword:2
- "Irq"=dword:f
- "MemBase"=dword:50008000
- "MemLen"=dword:2C
- "InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
- ;"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
- "Prefix"="COM"
- "Index"=dword:4
- "Dll"="serial_smdk2440.Dll"
- "Order"=dword:4
- "Priority"=dword:0
- "Port"="COM4:"
- "DeviceType"=dword:0 ; IRDA modem, 0 -> null modem
- "FriendlyName"=LOC_DISPLAYNAME_RAWIR
- "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
- [HKEY_LOCAL_MACHINE/Comm/Irsir1/Parms]
- "Port"=dword:4
- ; 0 = Use external dongle, 1 = Use internal IR
- "IntIR"=dword:1
- ; 0 - internal transceiver, 1 - Extended Systems JetEye dongle.
- "TransceiverType"=dword:0
- ENDIF BSP_NOSERIAL !
- ;=========== End of UART(Serial) ===============
- ; @CESYSGEN ENDIF CE_MODULES_SERIAL
复制代码
从上面可以看出,Fl2440 已经有了三个串口作为普通串口驱动注册表信心,甚至红外也保留了。
现在来看最后一步,看看串口驱动的源码F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A/Src/Drivers/Serial/ser_smdk2440.cpp
- CSerialPDD * CreateSerialObject(LPTSTR lpActivePath, PVOID pMdd,PHWOBJ pHwObj, DWORD DeviceArrayIndex)
- {
- CSerialPDD * pSerialPDD = NULL;
- switch (DeviceArrayIndex) {
- case 0:
- pSerialPDD = new CPdd2440Serial1(lpActivePath,pMdd, pHwObj);
- break;
- case 1:
- pSerialPDD = new CPdd2440Serial2(lpActivePath,pMdd, pHwObj);
- break;
- case 2:
- pSerialPDD = new CPdd2440Serial3(lpActivePath,pMdd, pHwObj);
- break;
-
- }
- if (pSerialPDD && !pSerialPDD->Init()) {
- delete pSerialPDD;
- pSerialPDD = NULL;
- }
- return pSerialPDD;
- }
复制代码
这个说明FL2440 已经完全具备三串口驱动,所以大家放心,调试串口很容易修改的。下面是修改结论: 一、F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A/Src/Kernel/Oal 下的debug.c 中的#define DEBUG_SERIAL_UART0 1 屏蔽(//#define DEBUG_SERIAL_UART0 1) 二、F:/开发板光盘/FL24402010.01.28/FL2440/Wince/BSP源码包/SMDK2440A_091112/SMDK2440A 下的SMDK2440A.bat文件 的 set DEBUG_SERIAL=SERIAL_UART0 屏蔽(@set DEBUG_SERIAL=SERIAL_UART0) 即可,重新编译整个BSP,打包,我想这样com1 就可以当普通串口用了。呵呵。 |