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

上传人:b****5 文档编号:30235682 上传时间:2023-08-13 格式:DOCX 页数:13 大小:16.12KB
下载 相关 举报
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

《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-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1