1 / 12
文档名称:

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

格式:pdf   大小:353KB   页数:12页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:我是开始 2023/3/20 文件大小:353 KB

下载得到文件列表

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

相关文档

文档介绍

文档介绍:该【GPIO驱动程序及测试程序 】是由【我是开始】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【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""
#include""
#include""
#include"":.
欢迎阅读
#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,DWORD
BUFOUT)?//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)???//thefunctionisusedfor
GPIOINPUTBETTER
?{
???
BUFCON&=~(3<<(2*NUM));
??DeviceIoControl(gpiodriver,,&BUFCON,4,NULL,0,NULL,NULL);?
??DeviceIoControl(gpiodriver,,NULL,0,&BUFOUT,4,NULL,NULL);?
??memcpy(&RData,&BUFOUT,4);
returnRData;
?}
:.
欢迎阅读
VOIDCRelay2Dlg::GPIOOUTPUT(DWORDGPIOCON,DWORDGPIOOUT,DWORD
BUFCON,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)?//thefunction
isusedforGPIOOUTPUTbetter
{
???
???
if(!=NULL)
?BUFCON=(BUFCON&~(3<<(2*NUM)))|(1<<(2*NUM));
else
????BUFCON&=~(1<<NUM);
if(PINSTATE)
BUFIN|=(1<<NUM);:.
欢迎阅读
else?
BUFIN&=~(1<<NUM);
??DeviceIoControl(gpiodriver,,&BUFCON,4,NULL,0,NULL,NULL);?
??DeviceIoControl(gpiodriver,,&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"));?
??
}