wince50下USB注册表信息

eeszg   2008-12-3 23:48 楼主
各位
   在WINCE50下关于USB的注册表信息如下:
   ; @CESYSGEN IF CE_MODULES_USBD
IF BSP_NOUSB !
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\OHCI]
    "InterfaceType"=dword:0     ; Internal
    "Prefix"="HCD"
;   "Dll"="ohci2.dll"
    "Dll"="pxa270_ohci.dll"
    "Index"=dword:1
    "Order"=dword:1
    "Irq"=dword:3
    "SysIntr"=dword:11                        ; (SYSINTR_FIRMWARE+1)
    "MemBase"=dword:4C000000
    "MemLen"=dword:1000
    "UseExistingSettings"=dword:0
ENDIF BSP_NOUSB !
; @CESYSGEN ENDIF CE_MODULES_USBD
请问各位:
1、这里设置了一个Irq为3,应该是物理中断号,PXA270的USB物理中断号确实为3
   又设置了一个"SysIntr"=dword:11 应该是系统中断号 ,
   可是在WINCE50下不是可以动态申请系统中断号的吗?即利用kernelIocontrol
   这里这样设置,是不是可以认为是指定了系统中断号???即程序中不需要用kernelIocontrol动态申请系统中断号
   只要读出注册表设置的系统中断号就可以?是这样吗??
2、我的BSP是WINCE42升级到WINCE50的,所以kernelIocontrol是肯定不能用了
   我的中断号也与WINCE50下的有些区别
   其中#define SYSINTR_OHCI_MDD                        (SYSINTR_FIRMWARE+8)  SYSINTR_FIRMWARE=16
   那么这个系统中断号应该是24 即16进制18,而不是11
   是不是我在注册表中修改成18即可??
3、这个系统中断在低层是通过
    case SYSINTR_OHCI_MDD:
                        //lpWriteDebugStringFunc(TEXT("INT EN SYSINTR_OHCI_MDD\r\n"));
                        INTC_USBOHCI_INT_EN( v_pICReg->icmr );
                        break;
   跟物理中断号3关联的
   那么我也不需要OALIntrStaticTranslate这个函数把系统和物理中断号关联了,是吧??
4、在 public中用到很多KernelLibIoControl这个函数,
   还有这个:KernelIoControl(IOCTL_HAL_ENABLE_WAKE, &m_dwSysIntr, sizeof(m_dwSysIntr), NULL, 0, NULL);
           KernelIoControl(IOCTL_HAL_DISABLE_WAKE, &m_dwSysIntr, sizeof(m_dwSysIntr), NULL, 0, NULL);
   请问这个我需要用什么方法替换掉他们呢??又或者根本不需要替换

回复评论 (8)

你问题真多,明天再看了,哈哈
点赞  2008-12-3 23:56
haha
兄弟帮帮忙吧!!!
点赞  2008-12-4 00:00
顶!
点赞  2008-12-4 09:28
ding !1
点赞  2008-12-4 10:54
1、这里设置了一个Irq为3,应该是物理中断号,PXA270的USB物理中断号确实为3
  又设置了一个"SysIntr"=dword:11 应该是系统中断号 ,
  可是在WINCE50下不是可以动态申请系统中断号的吗?即利用kernelIocontrol
  这里这样设置,是不是可以认为是指定了系统中断号???即程序中不需要用kernelIocontrol动态申请系统中断号
  只要读出注册表设置的系统中断号就可以?是这样吗??
物理中断号是固定的,不能修改,系统中断号是可以自己指定的,而且一般注册表里的定义都是给驱动里面使用的,所以到底怎么用这个系统中断号一定要查看代码的
系统中断号最好用动态申请的,如果不方便动态申请,那自己指定的话要注意不能同现有的冲突就OK了
另外什么叫只要读出注册表设置的系统中断号就可以?请LZ好好去了解一下整个中断发生的流程


2、我的BSP是WINCE42升级到WINCE50的,所以kernelIocontrol是肯定不能用了
  我的中断号也与WINCE50下的有些区别
  其中#define SYSINTR_OHCI_MDD (SYSINTR_FIRMWARE+8)  SYSINTR_FIRMWARE=16
  那么这个系统中断号应该是24 即16进制18,而不是11
  是不是我在注册表中修改成18即可??
这个问题还是要去看代码
其实你可以完全不管注册表中的中断号,直接在集中定义系统中断号的地方定义一个,然后在USB代码里面使用


3、这个系统中断在低层是通过
    case SYSINTR_OHCI_MDD:
//lpWriteDebugStringFunc(TEXT("INT EN SYSINTR_OHCI_MDD\r\n"));
INTC_USBOHCI_INT_EN( v_pICReg->icmr );
break;
  跟物理中断号3关联的
  那么我也不需要OALIntrStaticTranslate这个函数把系统和物理中断号关联了,是吧??

没有记错的话上面这个代码应该是在OEMInterruptEnable里的,这只是在驱动代码里调用InterruptInitialize的时候会调用到,跟物理中断号和系统中断号关联没有什么联系,如果你是动态申请的系统中断号,那OALIntrStaticTranslate这个函数可以不管它,但如果你是手动指定的,你必须调用该函数进行关联


4、在 public中用到很多KernelLibIoControl这个函数,
  还有这个:KernelIoControl(IOCTL_HAL_ENABLE_WAKE, &m_dwSysIntr, sizeof(m_dwSysIntr), NULL, 0, NULL);
          KernelIoControl(IOCTL_HAL_DISABLE_WAKE, &m_dwSysIntr, sizeof(m_dwSysIntr), NULL, 0, NULL);
  请问这个我需要用什么方法替换掉他们呢??又或者根本不需要替换
不清楚这啥问题?
没有问题就不管它呗


给你总结一下:
这么多问题发现你对最基本的CE下面的中断处理流程还不是很清楚,建议随便找个BSP,静下心来好好研究一下,从中断的注册,到中断发生后从中断向量表到ISR,IST的整个流程等等,这对你以后的学习工作都会非常有帮助的
点赞  2008-12-6 11:55
不好意思,本来说第二天给你回贴的,可你的问题太多,回答还是需要一些时间的,所以只能拖到周末了
点赞  2008-12-6 11:57
强!学习了! 给分!!
点赞  2008-12-8 13:34
mark
点赞  2009-8-25 09:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复