3845|0

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince6 gpio读数据的驱动问题 [复制链接]

小弟做毕设遇到个棘手问题,望各位好心人帮助
小弟用的arm开发板是友坚恒天的S3C6410,将GPIO的GPK的15-8位和GPL的7-0位从高到低组合成16位数据,但在编写驱动时报错,可能是XXX_read函数有问题,代码如下:
驱动部分代码:
DWORD GIO_Init(LPCTSTR PContext, LPCVOID lpvBuscontext
{
BOOL bResult = TRUE;
PGIO_PUBLIC_CONTEXT pPublicGIO = NULL;
PHYSICAL_ADDRESS    ioPhysicalBase = {0,0};
ioPhysicalBase.LowPart = S3C6410_BASE_REG_PA_GPIO;
    // 申请GIO的CONTEXT
if ( !(pPublicGIO = (PGIO_PUBLIC_CONTEXT)LocalAlloc( LPTR, sizeof(GIO_PUBLIC_CONTEXT) )) )//申请空间
{
  RETAILMSG(TEXT("[GIO] Can't not allocate for GIO Context\n"));
  bResult = FALSE;
  goto CleanUp;
}
// 得到GPIO寄存器的地址
pPublicGIO->v_pIOPregs = (volatile S3C6410_GPIO_REG *)MmMapIoSpace(ioPhysicalBase, sizeof(S3C6410_GPIO_REG), FALSE);
if (pPublicGIO->v_pIOPregs == NULL)
{
  RETAILMSG(TEXT("[GIO] For pGPIOregs: MmMapIoSpace failed!\r\n"));
  bResult = FALSE;
  goto CleanUp;
}
    //GPK
pPublicGIO->v_pIOPregs->GPKCON1 = pPublicGIO->v_pIOPregs->GPKCON1 & ~(0xffffffff);//GPK8...GPK15=0000=输入
pPublicGIO->v_pIOPregs->GPKPUD =  pPublicGIO->v_pIOPregs->GPKPUD & ~(0xffffffff) | 0xaaaaffff;//GPK[8]...GPK[15]=10=上拉使能
pPublicGIO->v_pIOPregs->GPKDAT =  pPublicGIO->v_pIOPregs->GPKDAT & 0x000000ff;//GPK8...GPK15置零
    //GPL
pPublicGIO->v_pIOPregs->GPLCON0 = pPublicGIO->v_pIOPregs->GPLCON0 & ~(0xffffffff);//GPL0...GPL7=0000=输入
pPublicGIO->v_pIOPregs->GPLPUD =  pPublicGIO->v_pIOPregs->GPLPUD & ~(0xffffffff) | 0xffffaaaa;//GPL[0]...GPL[7]=10=上拉使能
pPublicGIO->v_pIOPregs->GPLDAT =  pPublicGIO->v_pIOPregs->GPLDAT & 0x0000ff00;//GPL0...GPL7置零

 

 

DWORD GIO_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{                 
PGIO_PUBLIC_CONTEXT pReadGIOPublic = (PGIO_PUBLIC_CONTEXT)hOpenContext;
    WORD *rd;
    (WORD *)rd = (WORD *)pBuffer;
WORD KDAT = WORD((pReadGIOPublic->v_pIOPregs->GPKDAT) & 0xffff);
WORD LDAT = WORD((pReadGIOPublic->v_pIOPregs->GPLDAT) & 0xffff);
    *(rd) = (KDAT & 0xff00) | (LDAT & 0x00ff);
RETAILMSG(1,(TEXT("GIO_Read: Read Success!\r\n"),*rd));
return 1;
}

应用程序代码:创建你一个工程后,使用一个button触发事件来读数据,用static text将16位显示成十进制:
void CgpioDlg::OnBnClickedButton1()
{
     DWORD actlen;
     BOOL ret;
     WORD dt = 0;
     m_hLed = CreateFile(L"GIO1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
  ret=ReadFile(m_hLed,&dt,2,&actlen,NULL);
        CString str;
        str.Format(_T("%d"),dt);
        CWnd *pWnd=GetDlgItem(IDC_STATIC);
        pWnd->SetWindowText(str);
}

运行时当点击button时开发板界面弹出错误信息:“an invalid argument was encountered”
驱动调试窗口信息为:
+OEMSetAlarmTime(11/4/2012 2:0:0.000)
GIO_Read: Read Success!
Exception 'Raised Exception' (-1): Thread-Id=082f0002(pth=846b4c80), Proc-Id=082e0002(pprc=846b4b60) 'gpio.exe', VM-active=082e0002(pprc=846b4b60) 'gpio.exe'
PC=4006bdfc(coredll.dll+0x0005bdfc) RA=8011a4c8(kernel.dll+0x000064c8) SP=0004f5b8, BVA=0004f5ec

小弟实在不懂哪里出了问题,望各位大侠相助,先谢谢了!!!

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表