Hallo,
ich möchte gerne beim PicoMod4 (falsches Forum, aber einen eigenen Bereich gibt es noch nicht) die Digitalen IO Pins nutzen, die auf einen Interrupt reagieren sollen. Hierfür verwende ich den IOPin GPIO5.
Dafür habe ich die folgenden Registry eingefügt.
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DIGITALIO]
"UseAsIOA"=0x4200
"IRQCfg0A"=0x200
"DataDirA"=0x4000
"Prefix"="DIO"
"Dll"="DIGIO.dll"
"Order"=0x97
"Index"=0x1
"Ioctl"=0x4
"Port"=0x1
"FriendlyName"="Digital I/O driver for PicoMOD4"
Mein Code lautet wie folgt:
digio.h
digio.cpp
- BOOL CDigIO::OnInitDialog()
- ...
- /* Open the digitalio port */
- HANDLE hDIO = CreateFile(_T("DIO1:"), GENERIC_WRITE|GENERIC_READ, 0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
- if (hDIO == INVALID_HANDLE_VALUE)
- {
- AfxMessageBox(_T("Fehler! IO-Pins nicht gefunden."),0,0);
- }
- DWORD dwPort = 1;
- if( dwPort != -1 )
- {
- if( -1 == SetFilePointer( hDIO, dwPort, NULL, FILE_BEGIN ) )
- {
- Afx;essageBoxf(" ERROR: Can't access port %d (Error=%d)\r\n", dwPort, GetLastError() );
- return FALSE;
- }
- }
- /*** WAITIRQ.dwPin = pin number to use as irq.
- * I.e.: GPIO5 = PIN29 = IO09, dwPin must set to 9
- * WAITIRQ.dwTimeout = Timeout in ms to wait for irq.
- * Used for IOCTL_DIO_WAIT_IRQ.***/
- WAITIRQ cWaitIrq;
- cWaitIrq.dwPin = 9;
- cWaitIrq.dwTimeout = 10000;
- /* Request a sysintr */
- DWORD dwSysIntr;
- if(!DeviceIoControl(hDIO,IOCTL_DIO_REQUEST_SYSINTR, &cWaitIrq.dwPin, sizeof(DWORD), &dwSysIntr, sizeof(DWORD), NULL, NULL))
- [b]return FALSE;[/b]
- /* Wait for a sysintr */
- DWORD dwWaitRes = -1; /* Return value that indicates the event result. WAIT_OBJECT_0, WAIT_ABANDONED, WAIT_TIMEOUT */
- DeviceIoControl(hDIO,IOCTL_DIO_WAIT_IRQ, &cWaitIrq,sizeof(WAITIRQ), &dwWaitRes, sizeof(DWORD), NULL, NULL );
- /* Close the digitalio port */
- CloseHandle(hDIO);
- return TRUE;
- }
Das Problem ist, dass er immer beim Request ein FALSE zurück gibt. Leider weis ich nicht weiter. Können sie mir da weiter helfen?
PS: GetLastError() gibt die 50 raus: ERROR_NOT_SUPPORTED 50: The request is not supported...
PPS: Das mit der PicoMod3 mitgelieferte Programm: "USE_DIO" liefert den gleichen Fehler beim PicoMod4. Bei der PicoMod3 kommt es zu einem Fehler bei:
"InterruptInitialize( dwSysIntr,hIsrEvent, NULL, 0 )" mit Code 87 (Falscher Parameter)
[admin edit: Moved into newly created PicoMOD4 forum]