編寫S3C2440總線方式控制的流式驅動程序問題

andyhere 2009-09-08 02:00:51
我想用nGCS2作片选,LDADDR0-LDADDR7作地址线,LDDATA0-LDDATA7作数据线进行CPLD的读写数据.于是我定义了下面的结构体:
#define NGCS2_BASE 0XA4000080
#define NGCS2_PHY_BASE 0x10000080
///定义CPLD控制寄存器地址
typedef struct {
unsigned int gCSSLTAABC;
unsigned int gCSSLTBABC;
unsigned int gCSENTA;
unsigned int gCSENTB;
unsigned int gCSSLP;
unsigned int gCSADSOURCE;
}CPLD_CONTEXT;

volatile CPLD_CONTEXT *g_CPLDReg;

然后用VirtualAlloc()和VirtualCopy()进行内存地址映射和邦定 如下:
g_CPLDReg = (volatile CPLD_CONTEXT*)VirtualAlloc(0, sizeof(CPLD_CONTEXT), MEM_RESERVE, PAGE_NOACCESS);

b_CPLDREG=VirtualCopy((PVOID)g_CPLDReg,(PVOID)NGCS2_BASE, sizeof(CPLD_CONTEXT), PAGE_READWRITE|PAGE_NOCACHE);
编译后下载驱动到平台,运行时提示VirtualCopy()调用失败.
我不知道問題到底出在哪?
急昐高手指點.!


...全文
208 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyhere 2009-10-20
  • 打赏
  • 举报
回复
#define NGCS2_BASE 0XA4000000  注意這裡的地址是0x100对齐的.
#define NGCS2_PHY_BASE 0x10000000
///定义CPLD控制寄存器地址
typedef struct {
unsigned int gCSSLTAABC;
unsigned int gCSSLTBABC;
unsigned int gCSENTA;
unsigned int gCSENTB;
unsigned int gCSSLP;
unsigned int gCSADSOURCE;
}CPLD_CONTEXT;

按上面的方法就可.
chyuwa 2009-10-12
  • 打赏
  • 举报
回复
楼主,你好,恳请您的帮忙,地址总线是怎样映射的,有没有案例子给予参考,方便的话发给我,635310394@qq.com,谢谢了!
andyhere 2009-10-02
  • 打赏
  • 举报
回复
我知道了,是这样的,需映射的地址必须是0x100对齐的。不过还是谢谢你的支持!
chyuwa 2009-09-22
  • 打赏
  • 举报
回复
我也测试类似的驱动,遇到的问题也一样,读数据不准确,没法写数据,试了很长时间了,也没弄明白.
andyhere 2009-09-14
  • 打赏
  • 举报
回复
怎样没人理我呀。
帮帮在下吧!
andyhere 2009-09-12
  • 打赏
  • 举报
回复
经过初始分析,调用VirtualAlloc()应是成功的;问题出现在VirtualCopy(),是不是我的内存地址不对?还是并口操作时不是这样的方法?
 请各位指点迷津!

andyhere 2009-09-08
  • 打赏
  • 举报
回复
不好意思,補充下:
  我用的CPU是S3C2440,WINCE5.0系統.

19,502

社区成员

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

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