阅读:5792回复:11
请问在CE上如何读写寄存器?
我不是作驱动开发的,让msdn搞晕了。
我希望使用 Intel cpu PXA 250 的watch dog功能。cpu的说明书告诉 我应该写0x40A0_0010等寄存器(都是32位寄存器),这个地址需要做map才能给WRITE_REGISTRE_ULONG使用吧? 具体应该怎么做呢?请给我一个例子吧?谢谢! |
|
论坛版主
|
沙发#
发布于:2005-05-10 17:33
你先在BSP里面找OEMADDRESSTABLE,然后查这个表得到0x40A0_0010被映射成了什么地址。
1.如果你要在OAL代码中访问,可以直接使用刚才那张表映射后的虚拟地址,这个表是怎么映射的请查帮助。 2.如果你要在驱动中访问,需要使用VIRTUALALLOC和VIRTUALCOPY这两个函数将刚才那个虚拟地址在映射一次使用,具体使用查帮助。 |
|
板凳#
发布于:2005-05-11 08:26
我不是想在驱动中写寄存器,我只是想在evc写的应用程序里写寄存器。
请问这应该怎么做呢?您刚才说得我都不懂。:) |
|
论坛版主
|
地板#
发布于:2005-05-11 15:00
应用中使用采用第二个方式,你就直接用物理地址吧,用VIRTUALALLOC和VIRTUALCOPY这两个函数来映射,查查帮助再试试吧,要说清楚好长喔:)))
|
|
地下室#
发布于:2005-05-11 15:47
VIRTUALALLOC和VIRTUALCOPY对我有用吗?我只是想修改一个寄存器中某几位的数值。这个寄存器是CPU自己的watchdog用的。
{ ULONG ulPort = 0x40A0000C; WRITE_PORT_ULONG((unsigned long*)ulPort,0xFFFF); } 可以吗? 这个调用总是引起访问违例 帮帮我吧,谢谢! |
|
论坛版主
|
5楼#
发布于:2005-05-11 16:08
应用程序要用虚拟地址访问底层硬件,使用物理地址是不行DI。
PVOID MyVirtualMap(PVOID phyMem, UINT32 size) { PVOID pVirtualAddr; pVirtualAddr = (PVOID)VirtualAlloc(0,size,MEM_RESERVE,PAGE_NOACCESS); VirtualCopy(pVirtualAddr,phyMem/256,size,PAGE_READWRITE|PAGE_NACACHE)); } 这里phyMem给0x40A00000,从MyvirtualMap得到的值再加0x0c,就可以了,注意哈,不能直接用0x40A0000C哈 最后,虽然CE允许,但最好不要在应用里面这样,显得有点儿...那个:))) |
|
论坛版主
|
6楼#
发布于:2005-05-11 16:11
应用程序要用虚拟地址访问底层硬件,使用物理地址是不行DI。
PVOID MyVirtualMap(PVOID phyMem, UINT32 size) { PVOID pVirtualAddr; pVirtualAddr = (PVOID)VirtualAlloc(0,size,MEM_RESERVE,PAGE_NOACCESS); VirtualCopy(pVirtualAddr,phyMem/256,size,PAGE_READWRITE|PAGE_NOCACHE)); } 这里phyMem给0x40A00000,从MyvirtualMap得到的值再加0x0c,就可以了,注意哈,不能直接用0x40A0000C哈 最后,虽然CE允许,但最好不要在应用里面这样,显得有点儿...那个:))) |
|
论坛版主
|
7楼#
发布于:2005-05-11 16:12
照着第二个写哈,第一个写错了个字母
|
|
8楼#
发布于:2005-05-11 16:34
嗬嗬,成功了.谢谢!
|
|
论坛版主
|
9楼#
发布于:2005-05-11 17:05
HOHO,厉害!:))
|
|
10楼#
发布于:2005-07-18 14:05
新来的,真长见识
|
|
11楼#
发布于:2008-11-26 10:39
刚好遇到和楼主一样的问题,想在EVC下读写WINCE的硬件寄存器,我的处理器是SH系列的,看了此贴很受益,不过还有一些地方没弄明白,想请教高手:
1. 文中提到的phyMem 不能直接用,那应该怎么拆分呢?比如楼主的0x40A0000C就拆分成0x40A00000和0x0c,那么如:0xa4050160,0xa4050140,0xa4c50004以及0xa4c50020等这样一些地址应该如何拆分? 2. 另外,VirtualAlloc()和VirtualCopy()这种用法和 MmMapIOspace()有何区别? 3. 最后一点,在读写8位,16位以及32位寄存器时,以上方法在参数上有何区别? |
|