天嵌 ARM开发社区

 找回密码
 注册
查看: 7055|回复: 7

GPIO口状态读取问题

[复制链接]
weihan 发表于 2010-4-18 23:24:51 | 显示全部楼层 |阅读模式
请问亚瑟王,用EVC开发的应用程序中怎样读出GPXDAT寄存器的数值?GPIO驱动中对应的GPXDAT又是如何传递给应用程序的呢?一句话,我要怎样才能在应用程序中判断GPIO口的电平状态呢?希望你能给我清楚地说明下,本人愚笨。我看过一些帖子,都没有相关的回答。而且也没有这方面的例子。很迷茫啊。万分感谢!
亚瑟王 发表于 2010-4-19 11:09:16 | 显示全部楼层
在WinCE开发手册里面的GPIO章节讲了的。
1、需要一个GPIO的驱动。
2、编写应用程序操作该驱动。
 楼主| weihan 发表于 2010-4-19 16:46:29 | 显示全部楼层
先感谢!
1  WinCE开发手册里面的GPIO章节我看过了,是一个讲LED灯的控制,这个功能我也能做了。但是相应的GPIO驱动里面未涉及怎样读取GPXDAT这个寄存器数据的问题。而我是希望能读取这寄存器数据啊!
2   我已经用EVC写了 一个应用程序,里面用CreatFile()函数和DeviceIOControl()函数去操作了GPIO驱动。那又该如何用DeviceIOControl()函数去读取GPXDAT这个寄存器中的数据呢?这个寄存器中数据时如何传递给应用程序的呢?尤其是这2个问题希望您能详细指教一下,最好举个例子。我找了好多地方都没有发现有这方面的,最多的就是利用中断。万分感激!!!
亚瑟王 发表于 2010-4-20 10:40:53 | 显示全部楼层
在TQ2440配套的WinCE开发教程中的第五章讲解了对流驱动的操作函数,其中讲到了一个read函数,它就可以从驱动中读取数据。然后你在GPIO的驱动中的read函数中添加对应的代码就可以了。
 楼主| weihan 发表于 2010-4-25 22:11:40 | 显示全部楼层
本帖最后由 weihan 于 2010-4-25 22:13 编辑

亚瑟王:
烦请指点,我用EVC写了应用程序,其中操作函数如下代码
void CFPGADlg::OnInput1()
{
   // TODO: Add your control notification handler code here
    LPVOID inBuffer;
    DWORD nBytesToRead=0;
    LPDWORD nBytesRead;
    //LPOVERLAPPED lpOverlapped;
BOOL bResult = ReadFile(gpiodriver, &inBuffer, nBytesToRead, nBytesRead, NULL);  
    if (bResult &&  nBytesToRead == 0)
        MessageBox(L"READFILE FAILED!");
   else
            if(inBuffer && (0x1<<7)==128)  //判断GPB7什么电平?
                MessageBox(L"HIGH POWER!");
           else
                        MessageBox(L"LOW POWER!");
           return;
}

而我修改GPIO驱动中Read函数,其中修改处代码如下:
DWORD GIO_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
        RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Read\r\n")));
        pBuffer=LPVOID(v_pIOPregs->GPBDAT);             //将pBuffer指针变量指向数据寄存器
        return TRUE;
}

我在调试时,应用程序结果是执行了MessageBox(L"READFILE FAILED!");这一句,似乎ReadFile()也读取失败,那么这两段代码该如何写才算正确呢?本人菜鸟,刚买你们开发板,做起很迷茫啊,谢谢你的指教!
亚瑟王 发表于 2010-4-28 20:52:36 | 显示全部楼层
你要读取GPIO口的数据,前提是驱动中的读函数要有内容,否则得不到正确值的。
 楼主| weihan 发表于 2010-5-9 16:41:31 | 显示全部楼层
我已经试过多次了,但是始终读不了数据啊!!
如下分别是我的应用程序中READFILE()函数代码,驱动程序中READ()代码,在调试时串口打印信息:
1.  
void CFPGADlg::OnInput1()
{
        // TODO: Add your control notification handler code here
        LPVOID inBuffer;
               DWORD nBytesToRead=0;
               LPDWORD nBytesRead;
               BOOL bResult = ReadFile(gpiodriver, inBuffer, nBytesToRead, nBytesRead, NULL);    //inBuffer(应用)=pBuffer(驱动)地址
          if (bResult &&  nBytesToRead == 0)
                MessageBox(L"READFILE FAILED!");
        else
                       if(inBuffer && (0x1<<7)==128)                                                  //判断指针变量inBuffer的数据内容
                 MessageBox(L"HIGH POWER!");
           else
         MessageBox(L"LOW POWER!");
         return;
}

2.
DWORD GIO_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
         RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Read\r\n")));    /* 提示执行读函数 */
         DWORD dwRet=0;
         if ((pBuffer == NULL) || (Count <= 0))   
         {                                                      
             RETAILMSG(1, (TEXT("::: Read() parameter is error.\r\n")));            
              return 0;   
         }   
         achBuffer[BUFSIZE]=v_pIOPregs->GPBDAT;        //1个元素的双字节                                          
         DWORD cbBuffer=wcslen ( achBuffer );
         dwRet=min( cbBuffer, Count );
         wcsncpy( ( LPWSTR ) pBuffer, achBuffer, dwRet);
        //Return the number of the actual bytes
         return dwRet;
}

3.

::: Read() parameter is error.
Data Abort: Thread=83910a84 Proc=82126340 'device.exe'
AKY=00000805 PC=03f62e4c(devmgr.dll+0x00002e4c) RA=03f62e4c(devmgr.dll+0x00002e4
c) BVA=06000000 FSR=00000007
RaiseException: Thread=83910a84 Proc=82126340 'device.exe'
AKY=00000805 PC=03f8e05c(coredll.dll+0x0001e05c) RA=802c2e8c(NK.EXE+0x000c2e8c)
BVA=00000003 FSR=00000003

还请您看后帮我分析下,错误原因在哪里呢?改如何修改?能不能给我一个源代码例子。我在这上面花了3个星期的时间,都没有结果,很郁闷!!希望您别让您的客户再郁闷下去了。谢谢!!
亚瑟王 发表于 2010-5-10 15:24:39 | 显示全部楼层
把你的驱动中的read改简单些,只需要调用一句打印GPIO的GPBDAT中的值的语句。你给出来的信息表明驱动有毛病,引起系统异常了哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-21 06:57 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表