2440 5.0BSP增加三串口(作者:wogoyixikexie@gliet)
———————————————————————————————————————————————————————
以前很多老兄写的增加三串口的方法都是4.2BSP的,现在搞个5.0的BSP,发现好多东西不一样了,现在咱也来弄弄吧。
首先看BSP下的serial文件夹下的sources文件
- !if "$(BSP_NOSERIAL)" == "1"//其实根本没有定义BSP_NOSERIAL
- SKIPBUILD=1
- !endif
- WINCEOEM=1 //据说这个是说明要用到微软下的头文件
- TARGETNAME=serial_smdk2440
- TARGETTYPE=DYNLINK
- RELEASETYPE=PLATFORM //BSP下的驱动都这样个类型
- TARGETLIBS=$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
- $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib
- //MDD所在地方(微软实现,不能改动),从名字看出使用了哪个代码了
- //C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL
- SOURCELIBS=$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/serpddcm.lib /
- $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib
- DEFFILE=serial.def
- DLLENTRY=DllEntry
- INCLUDES=$(_TARGETPLATROOT)/src/inc;//BSP下的头文件
- SOURCES= ser_smdk2440.cpp /
- pdds3c2440_ser.cpp
- //下面两个用来干什么的?
- #xref VIGUID {549CAC8D_8AF0_4789_9ACF_2BB92599470D}
- #xref VSGUID {0601CE65_BF4D_453A_966B_E20250AD2E8E}
——————————————————————————————————————————
下面来看看这个串口0(com1)的注册表
- ;=============== UART0 (physical COM1 connector P1) (Serial) ===============
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial]
- "DeviceArrayIndex"=dword:0
- "Irq"=dword:1c //#define IRQ_UART0 28(0x1c)
- "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
现在来看看4.2BSP的uart0_com1注册表
——————————————————————————————————————————————————————
和上面对比,其实只有irq这个东西不同而已,从我前面的文章可以得出,这个是由于5.0BSP和4.2BSP中断架构不同的原因。
所以见怪不怪了。
现在来看4.2下是如何把红外占用的串口的注册表修改成我们所要的串口的。
.修改“/FILES/platform.bib”
用分号注释掉:
irsir.dll $(_FLATRELEASEDIR)/irsir.dll NK SH
————————————————————————————————————————————————————
中断等东西和uart0_com1的设置类似,加载顺序有变化(这个在驱动中有对应)
现在再来看看5.0BSP的红外串口注册表
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/IRDA2440]
- "DeviceArrayIndex"=dword:1
- "Irq"=dword:f //#define IRQ_UART2 15
- "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:0
- "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
在注册表中,唯独没有出现UART1(#define IRQ_UART1 23),这是因为它被调试串口占用了,即使在驱动实现,会被调试信息干扰,必须任选一个功能才行。其实和4.2注册表也没有多大区别,只是IRQ值不一样而已。好吧,come on。
————由于5.0和4.2下有很多不同,我暂时停止修改,先把串口流程走一遍,再继续了........