WINCE中如何操作板极寄存器

cherishhu 2004-07-18 08:39:52
WINCE中如何操作板极寄存器,读取和写入

请高手指点
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjyun 2004-07-21
  • 打赏
  • 举报
回复
那应该怎么映射啊??
请教!!
yrj 2004-07-21
  • 打赏
  • 举报
回复
你总不会为每个寄存器单独映射一次虚拟地址吧
yrj 2004-07-21
  • 打赏
  • 举报
回复
你需要对以256个字节为边界的一个段的地址做映射,你不能对任意边界的地址做映射,而且映射的内存大小必须是以page作为单位的
cherishhu 2004-07-21
  • 打赏
  • 举报
回复
Sitsang板上的板级寄存器
LLEDR 0x0800 0024
HLEDR 0x0800 0028
EX_BCR 0x0800 002c
EX_BSR 0x0800 0030
.............

手册上写的,我也看了前面的,应该是物理地址的,但它们除256后不都是一样的吗,那我怎么分它们这些寄存器呢
yrj 2004-07-21
  • 打赏
  • 举报
回复
有些错误,你能确定0x08000024是物理地址,而不是经过一级映射的虚拟地址
如果是物理地址,你就需要这样调用:
bRet=VirtualCopy((PVOID)lpv,ADD_LLEDR/256,SIZE,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL);
cjyun 2004-07-21
  • 打赏
  • 举报
回复
yrj(机枪)高见!

是页面映射的访问的问题,
首先,要用定义lpv为 PVOID类型
定义SiZE为255
访问寄存器时用short int类型转换,
ss.Format(_T("LLEDR %d "),*((short int*)lpv));
访问相应的其他寄存器只是偏移地址的改变。
ss.Format(_T("LLEDR %d "),*(short int*)lpv+ x );即可

我试了可以的
cherishhu 2004-07-20
  • 打赏
  • 举报
回复
自己顶一下
cherishhu 2004-07-20
  • 打赏
  • 举报
回复
//另一个按钮的事件里,写0xFF,应该16个LED都亮才对的
这段里最后少一句


*lpv=0xffff;
cherishhu 2004-07-20
  • 打赏
  • 举报
回复
我的程序是这样的

#define ADD_LLEDR ((PVOID)0x08000024) //LLEDR为一个板极寄存器,User Guide上写的地址是0x08000024
#define SIZE 0x4 //它下一个寄存器地址为0x08000028,但它是一个十六位的,我觉得2好

CString ss;
int *lpv;
BOOL bRet,bRet2;

//一个按钮读数据
lpv=(int *)VirtualAlloc(0,SIZE,MEM_RESERVE,PAGE_READWRITE);
bRet=VirtualCopy((PVOID)lpv,ADD_LLEDR,SIZE,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL);
ss.Format(_T("LLEDR %d "),*lpv);
m_list.AddString(ss);


//另一个按钮的事件里,写0xFF,应该16个LED都亮才对的
lpv=(int *)VirtualAlloc(0,SIZE,MEM_RESERVE,PAGE_READWRITE);
bRet=VirtualCopy((PVOID)lpv,ADD_LLEDR,SIZE,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL);


没有语法错误,但执行出来没有值的,即使我先按的赋值的按钮再读也没有值,也没有错误提示

高手看下是怎么回事呀

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧