GPIO驱动程序及测试程序.docx

上传人:b****2 文档编号:17763848 上传时间:2023-08-03 格式:DOCX 页数:13 大小:16.13KB
下载 相关 举报
GPIO驱动程序及测试程序.docx_第1页
第1页 / 共13页
GPIO驱动程序及测试程序.docx_第2页
第2页 / 共13页
GPIO驱动程序及测试程序.docx_第3页
第3页 / 共13页
GPIO驱动程序及测试程序.docx_第4页
第4页 / 共13页
GPIO驱动程序及测试程序.docx_第5页
第5页 / 共13页
GPIO驱动程序及测试程序.docx_第6页
第6页 / 共13页
GPIO驱动程序及测试程序.docx_第7页
第7页 / 共13页
GPIO驱动程序及测试程序.docx_第8页
第8页 / 共13页
GPIO驱动程序及测试程序.docx_第9页
第9页 / 共13页
GPIO驱动程序及测试程序.docx_第10页
第10页 / 共13页
GPIO驱动程序及测试程序.docx_第11页
第11页 / 共13页
GPIO驱动程序及测试程序.docx_第12页
第12页 / 共13页
GPIO驱动程序及测试程序.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

GPIO驱动程序及测试程序.docx

《GPIO驱动程序及测试程序.docx》由会员分享,可在线阅读,更多相关《GPIO驱动程序及测试程序.docx(13页珍藏版)》请在冰点文库上搜索。

GPIO驱动程序及测试程序.docx

GPIO驱动程序及测试程序

GPIO驱动程序,主要是GIO_Control:

BOOLGIO_IOControl(DWORDhOpenContext, 

 DWORDdwCode, 

 PBYTEpBufIn, 

 DWORDdwLenIn, 

 PBYTEpBufOut, 

 DWORDdwLenOut, 

 PDWORDpdwActualOut)

{

switch(dwCode)

{

caseIO_CTL_GPIO_A_CON:

     v_pIOPregs->GPACON=*(DWORD*)pBufIn;//GPACONSET

break;

  caseIO_CTL_GPIO_A_DAT_OUTPUT:

v_pIOPregs->GPADAT=*(DWORD*)pBufIn; //GPADATSET(OUTPUT)alsoforFunctionalPin

break;

 

  caseIO_CTL_GPIO_B_CON:

     v_pIOPregs->GPBCON=*(DWORD*)pBufIn;//GPBCONSET

break;

caseIO_CTL_GPIO_B_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPBDAT;//GPBDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_B_DAT_OUTPUT:

v_pIOPregs->GPBDAT=*(DWORD*)pBufIn; //GPBDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_B_UP:

 v_pIOPregs->GPBUP=*(DWORD*)pBufIn;//GPBUPSET

break;

 

   caseIO_CTL_GPIO_C_CON:

     v_pIOPregs->GPCCON=*(DWORD*)pBufIn;//GPCCONSET

break;

caseIO_CTL_GPIO_C_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPCDAT;//GPCDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_C_DAT_OUTPUT:

v_pIOPregs->GPCDAT=*(DWORD*)pBufIn; //GPCDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_C_UP:

 v_pIOPregs->GPCUP=*(DWORD*)pBufIn;//GPCUPSET

break;

 

  caseIO_CTL_GPIO_D_CON:

     v_pIOPregs->GPDCON=*(DWORD*)pBufIn;//GPDCONSET

break;

caseIO_CTL_GPIO_D_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPDDAT;//GPDDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_D_DAT_OUTPUT:

v_pIOPregs->GPDDAT=*(DWORD*)pBufIn; //GPDDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_D_UP:

 v_pIOPregs->GPDUP=*(DWORD*)pBufIn;//GPDUPSET

break;

 

  caseIO_CTL_GPIO_E_CON:

     v_pIOPregs->GPECON=*(DWORD*)pBufIn;//GPECONSET

break;

caseIO_CTL_GPIO_E_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPEDAT;//GPEDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_E_DAT_OUTPUT:

v_pIOPregs->GPEDAT=*(DWORD*)pBufIn; //GPEDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_E_UP:

 v_pIOPregs->GPEUP=*(DWORD*)pBufIn;//GPEUPSET

break;

 

caseIO_CTL_GPIO_F_CON:

     v_pIOPregs->GPFCON=*(DWORD*)pBufIn;//GPFCONSET

break;

caseIO_CTL_GPIO_F_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPFDAT;//GPFDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_F_DAT_OUTPUT:

v_pIOPregs->GPFDAT=*(DWORD*)pBufIn; //GPFDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_F_UP:

 v_pIOPregs->GPFUP=*(DWORD*)pBufIn;//GPFUPSET

break;

 

  caseIO_CTL_GPIO_G_CON:

     v_pIOPregs->GPGCON=*(DWORD*)pBufIn;//GPGCONSET

break;

caseIO_CTL_GPIO_G_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPGDAT;//GPGDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_G_DAT_OUTPUT:

v_pIOPregs->GPGDAT=*(DWORD*)pBufIn; //GPGDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_G_UP:

 v_pIOPregs->GPGUP=*(DWORD*)pBufIn;//GPGUPSET

break;

   

 

  caseIO_CTL_GPIO_H_CON:

     v_pIOPregs->GPHCON=*(DWORD*)pBufIn;//GPHCONSET

break;

caseIO_CTL_GPIO_H_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPHDAT;//GPHDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_H_DAT_OUTPUT:

v_pIOPregs->GPHDAT=*(DWORD*)pBufIn; //GPHDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_H_UP:

 v_pIOPregs->GPHUP=*(DWORD*)pBufIn;//GPHUPSET

break;

 

  caseIO_CTL_GPIO_J_CON:

     v_pIOPregs->GPJCON=*(DWORD*)pBufIn;//GPJCONSET

break;

caseIO_CTL_GPIO_J_DAT_INPUT:

     *(DWORD*)pBufOut=v_pIOPregs->GPJDAT;//GPJDATSET(INPUT)alsoforFunctionalPin

break;

  caseIO_CTL_GPIO_J_DAT_OUTPUT:

v_pIOPregs->GPJDAT=*(DWORD*)pBufIn; //GPJDATSET(OUTPUT)alsoforFunctionalPin

break;

caseIO_CTL_GPIO_J_UP:

 v_pIOPregs->GPJUP=*(DWORD*)pBufIn;//GPJUPSET

break;

   

default:

break;

}

   

RETAILMSG(0,(TEXT("GPIO_Control:

Ioctlcode=0x%x\r\n"),dwCode));

returnTRUE;

测试程序,封装了2个输入输出GPIO函数,调用十分方便:

#include"stdafx.h"

#include"Relay2.h"

#include"Relay2Dlg.h"

#include"GPIO_Driver.h"

 

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

 

 DWORDRData,BUFCON,BUFOUT,BUFIN;

 structGPIO

   {

     DWORDGPIOCON;

     DWORDGPIOIN;

DWORDGPIOOUT;

    };

 structGPIO GPA={gpacon,NULL,gpaout},

     GPB={gpbcon,gpbin,gpbout},

 GPC={gpccon,gpcin,gpcout},

 GPD={gpdcon,gpdin,gpdout},

 GPE={gpecon,gpein,gpeout},

     GPF={gpfcon,gpfin,gpfout},

 GPG={gpgcon,gpgin,gpgout},

 GPH={gphcon,gphin,gphout},

 GPJ={gpjcon,gpjin,gpjout};   //defineandchooseGPIO

     

//CRelay2Dlg对话框

 

CRelay2Dlg:

:

CRelay2Dlg(CWnd*pParent/*=NULL*/)

:

CDialog(CRelay2Dlg:

:

IDD,pParent)

{

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

voidCRelay2Dlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

 

BEGIN_MESSAGE_MAP(CRelay2Dlg,CDialog)

#ifdefined(_DEVICE_RESOLUTION_AWARE)&&!

defined(WIN32_PLATFORM_WFSP)

ON_WM_SIZE()

#endif

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDC_BUTTON1,&CRelay2Dlg:

:

OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2,&CRelay2Dlg:

:

OnBnClickedButton2)

 

END_MESSAGE_MAP()

 

//CRelay2Dlg消息处理程序

 

BOOLCRelay2Dlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

 

//设置此对话框的图标。

当应用程序主窗口不是对话框时,框架将自动

// 执行此操作

SetIcon(m_hIcon,TRUE);//设置大图标

SetIcon(m_hIcon,FALSE);//设置小图标

 

//TODO:

在此添加额外的初始化代码

gpiodriver=CreateFile(L"GIO1:

",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//gpiodriverinit

if(!

gpiodriver)

MessageBox(L"打开GPIO设备失败!

");

 

returnTRUE; //除非将焦点设置到控件,否则返回TRUE

}

 

#ifdefined(_DEVICE_RESOLUTION_AWARE)&&!

defined(WIN32_PLATFORM_WFSP)

voidCRelay2Dlg:

:

OnSize(UINT/*nType*/,int/*cx*/,int/*cy*/)

{

if(AfxIsDRAEnabled())

{

DRA:

:

RelayoutDialog(

AfxGetResourceHandle(), 

this->m_hWnd, 

DRA:

:

GetDisplayMode()!

=DRA:

:

Portrait?

 

MAKEINTRESOURCE(IDD_RELAY2_DIALOG_WIDE):

 

MAKEINTRESOURCE(IDD_RELAY2_DIALOG));

}

}

#endif

 

 DWORDCRelay2Dlg:

:

GPIOINPUT(DWORDGPIOCON,DWORDGPIOIN,DWORDBUFCON,DWORDBUFOUT) //thefunctionisusedforGPIOINPUT

{ DWORDRData;

  DeviceIoControl(gpiodriver,GPIOCON,&BUFCON,4,NULL,0,NULL,NULL); 

  DeviceIoControl(gpiodriver,GPIOIN,NULL,0,&BUFOUT,4,NULL,NULL); 

memcpy(&RData,&BUFOUT,4);

returnRData;

}

 DWORD CRelay2Dlg:

:

GPIOINPUT1(structGPIOGP,USHORTNUM)   //thefunctionisusedforGPIOINPUTBETTER

 {

   

BUFCON&=~(3<<(2*NUM));

  DeviceIoControl(gpiodriver,GP.GPIOCON,&BUFCON,4,NULL,0,NULL,NULL); 

  DeviceIoControl(gpiodriver,GP.GPIOIN,NULL,0,&BUFOUT,4,NULL,NULL); 

  memcpy(&RData,&BUFOUT,4);

returnRData;

 

 }

 

VOIDCRelay2Dlg:

:

GPIOOUTPUT(DWORDGPIOCON,DWORDGPIOOUT,DWORDBUFCON,DWORDBUFIN) //thefunctionisusedforGPIOOUTPUT

{  

  DeviceIoControl(gpiodriver,GPIOCON,&BUFCON,4,NULL,0,NULL,NULL); 

  DeviceIoControl(gpiodriver,GPIOOUT,&BUFIN,4,NULL,0,NULL,0); 

 

}

 

VOIDCRelay2Dlg:

:

GPIOOUTPUT1(structGPIOGP,USHORTNUM,BYTEPINSTATE) //thefunctionisusedforGPIOOUTPUTbetter

{

   

   

if(GP.GPIOIN!

=NULL)

 BUFCON=(BUFCON&~(3<<(2*NUM)))|(1<<(2*NUM));

else

    BUFCON&=~(1<

 

if(PINSTATE)

BUFIN|=(1<

else 

BUFIN&=~(1<

  DeviceIoControl(gpiodriver,GP.GPIOCON,&BUFCON,4,NULL,0,NULL,NULL); 

  DeviceIoControl(gpiodriver,GP.GPIOOUT,&BUFIN,4,NULL,0,NULL,0); 

 

}

 

voidCRelay2Dlg:

:

OnBnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

   

GPIOOUTPUT1(GPB,8,1);

GPIOINPUT1(GPB,7);

GPIOOUTPUT1(GPB,6,0);

GPIOOUTPUT1(GPB,5,0);

  //GPIOOUTPUT1(GPF,3,1); //GPF3OUTPUT1

  GPIOOUTPUT1(GPF,2,0);

  //GPIOOUTPUT1(GPG,5,0);

//GPIOOUTPUT1(GPG,7,1);

 

  

}

 

voidCRelay2Dlg:

:

OnBnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

   

  DWORDGetData;

  GetData=GPIOINPUT1(GPF,6);  //GPF4INPUT

if(GetData&=(1<<6))

 MessageBox(_T("1"));

  else

 MessageBox(_T("0")); 

  

 

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2