2440 5.0BSP增加三串口(作者:wogoyixikexie@gliet)

来源:互联网 发布:网络cos 参数 编辑:程序博客网 时间:2024/06/05 11:43

2440 5.0BSP增加三串口(作者:wogoyixikexie@gliet

 

———————————————————————————————————————————————————————

    以前很多老兄写的增加三串口的方法都是4.2BSP的,现在搞个5.0的BSP,发现好多东西不一样了,现在咱也来弄弄吧。

首先看BSP下的serial文件夹下的sources文件

  1. !if "$(BSP_NOSERIAL)" == "1"//其实根本没有定义BSP_NOSERIAL
  2. SKIPBUILD=1
  3. !endif
  4. WINCEOEM=1                  //据说这个是说明要用到微软下的头文件
  5. TARGETNAME=serial_smdk2440
  6. TARGETTYPE=DYNLINK
  7. RELEASETYPE=PLATFORM        //BSP下的驱动都这样个类型
  8. TARGETLIBS=$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
  9.            $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib
  10. //MDD所在地方(微软实现,不能改动),从名字看出使用了哪个代码了
  11. //C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL
  12. SOURCELIBS=$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/serpddcm.lib /
  13.            $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib
  14. DEFFILE=serial.def
  15. DLLENTRY=DllEntry
  16. INCLUDES=$(_TARGETPLATROOT)/src/inc;//BSP下的头文件
  17. SOURCES= ser_smdk2440.cpp /
  18.          pdds3c2440_ser.cpp
  19. //下面两个用来干什么的?
  20. #xref VIGUID {549CAC8D_8AF0_4789_9ACF_2BB92599470D}
  21. #xref VSGUID {0601CE65_BF4D_453A_966B_E20250AD2E8E}

——————————————————————————————————————————

下面来看看这个串口0(com1)的注册表

  1. ;=============== UART0 (physical COM1 connector P1) (Serial) ===============
  2. [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial]
  3.    "DeviceArrayIndex"=dword:0
  4.    "Irq"=dword:1c                          //#define IRQ_UART0    28(0x1c) 
  5.    "MemBase"=dword:50000000                //物理地址  
  6.    "MemLen"=dword:2C
  7.    "InterruptBitsShift"=dword:0 ; UART 0 Interrupt Sub Register shift bit.
  8.    "ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
  9.    "Prefix"="COM"                          //接口函数前缀
  10.    "Index"=dword:1                         //加载顺序
  11.    "Dll"="serial_smdk2440.dll"
  12.    "Order"=dword:0
  13.    "Priority"=dword:0
  14.    "Port"="COM1:"
  15.    "DeviceType"=dword:0                    //?
  16.    "FriendlyName"=LOC_DISPLAYNAME_COM1
  17.    "Tsp"="unimodem.dll"
  18.    "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
  19.    "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的红外串口注册表

  1. [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/IRDA2440]
  2.    "DeviceArrayIndex"=dword:1
  3.    "Irq"=dword:f                //#define IRQ_UART2     15 
  4.    "MemBase"=dword:50008000
  5.    "MemLen"=dword:2C
  6.    "InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
  7.    ;"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
  8.    "Prefix"="COM"
  9.    "Index"=dword:4
  10.    "Dll"="serial_smdk2440.Dll"
  11.    "Order"=dword:0
  12.    "Priority"=dword:0
  13.    "Port"="COM4:"
  14.    "DeviceType"=dword:0  ; IRDA modem, 0 -> null modem
  15.    "FriendlyName"=LOC_DISPLAYNAME_RAWIR
  16.    "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
  17.    "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下有很多不同,我暂时停止修改,先把串口流程走一遍,再继续了........