|
在GPIOTEST的应用例程里(配套光盘中),用 “gpiodriver=CreateFile(L"GIO1:",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL );”来初始化IO口。再用“DeviceIoControl(gpiodriver,IO_CTL_GPIO_1_ON, NULL,0,NULL,0,NULL,NULL);”来设置IO口的值。源码如下:
============================================================
BOOL CGPIO_TestDlg::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 );
if(!gpiodriver)
MessageBox(L"打开GPIO设备失败!");
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CGPIO_TestDlg::OnBnClickedLed1On()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_1_ON, NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,10,117,22);
pDC->SelectObject(pOldBrush);
delete pDC;
}
============================================================
问题是:在测试程序中有四个LED,DeviceIoControl函数只有gpiodrier一个句柄,怎么定位到某个特定的IO口上? |
|