Hans Wurst
2007-01-12 15:10:10 UTC
Hello,
I want to realise an SPI Bus with a DIO6534. Therefore I need to read and write simultaneously. In former traditional DAQ concept I simply started DIG_Block_In before DIG_Block_Out and it worked pretty fine in parallel. Hence I assume the multithreading was handled by the DAQ driver. Now I use DAQmxReadDigitalU32/DAQmxWriteDigitalU32 and it only works sequentially. I neither know if I'm doing any mistake nor can I find any suitable examples. Thanks in advance if anybody can help!
Here's a code snippet:
DAQmxCreateTask("", &taskHandleRead);
DAQmxCreateTask("", &taskHandleWrite);
DAQmxCreateDIChan(taskHandleRead, "Dev1/port0", "", DAQmx_Val_ChanForAllLines);
DAQmxCfgChangeDetectionTiming(taskHandleRead,"Dev1/port0/line0", "Dev1/port0/line0", DAQmx_Val_FiniteSamps , numSampsPerChanRead);
DAQmxSetDIDataXferMech(taskHandleRead, "Dev1/port0", DAQmx_Val_DMA);
DAQmxCfgInputBuffer(taskHandleRead, sampleBuffer);
//DAQmxCfgDigEdgeStartTrig (taskHandleRead, "/Dev1/PFI2", DAQmx_Val_Rising);
DAQmxCreateDOChan(taskHandleWrite, "Dev1/port2", "", DAQmx_Val_ChanForAllLines);
DAQmxSetDODataXferMech(taskHandleWrite, "Dev1/port2", DAQmx_Val_DMA);
DAQmxCfgSampClkTiming (taskHandleWrite, "OnboardClock", clockRate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, numSampsPerChanWrite);
DAQmxCfgOutputBuffer(taskHandleWrite, numSampsPerChanWrite);
DAQmxWriteDigitalU32(taskHandleWrite, numSampsPerChanWrite, false, 10.0, DAQmx_Val_GroupByScanNumber, writeArray, sampsPerChanWritten, reserved);
DAQmxStartTask(taskHandleRead);
DAQmxReadDigitalU32(taskHandleRead, numSampsPerChanRead, 5.0, DAQmx_Val_GroupByScanNumber, readArray, arraySizeInSamps, &sampsPerChanRead, reserved);
DAQmxStartTask(taskHandleWrite);
DAQmxWaitUntilTaskDone(taskHandleWrite,10.0);
DAQmxWaitUntilTaskDone(taskHandleRead,10.0);
DAQmxStopTask(taskHandleWrite);
DAQmxStopTask(taskHandleRead);
DAQmxClearTask(taskHandleWrite);
DAQmxClearTask(taskHandleRead);
I want to realise an SPI Bus with a DIO6534. Therefore I need to read and write simultaneously. In former traditional DAQ concept I simply started DIG_Block_In before DIG_Block_Out and it worked pretty fine in parallel. Hence I assume the multithreading was handled by the DAQ driver. Now I use DAQmxReadDigitalU32/DAQmxWriteDigitalU32 and it only works sequentially. I neither know if I'm doing any mistake nor can I find any suitable examples. Thanks in advance if anybody can help!
Here's a code snippet:
DAQmxCreateTask("", &taskHandleRead);
DAQmxCreateTask("", &taskHandleWrite);
DAQmxCreateDIChan(taskHandleRead, "Dev1/port0", "", DAQmx_Val_ChanForAllLines);
DAQmxCfgChangeDetectionTiming(taskHandleRead,"Dev1/port0/line0", "Dev1/port0/line0", DAQmx_Val_FiniteSamps , numSampsPerChanRead);
DAQmxSetDIDataXferMech(taskHandleRead, "Dev1/port0", DAQmx_Val_DMA);
DAQmxCfgInputBuffer(taskHandleRead, sampleBuffer);
//DAQmxCfgDigEdgeStartTrig (taskHandleRead, "/Dev1/PFI2", DAQmx_Val_Rising);
DAQmxCreateDOChan(taskHandleWrite, "Dev1/port2", "", DAQmx_Val_ChanForAllLines);
DAQmxSetDODataXferMech(taskHandleWrite, "Dev1/port2", DAQmx_Val_DMA);
DAQmxCfgSampClkTiming (taskHandleWrite, "OnboardClock", clockRate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, numSampsPerChanWrite);
DAQmxCfgOutputBuffer(taskHandleWrite, numSampsPerChanWrite);
DAQmxWriteDigitalU32(taskHandleWrite, numSampsPerChanWrite, false, 10.0, DAQmx_Val_GroupByScanNumber, writeArray, sampsPerChanWritten, reserved);
DAQmxStartTask(taskHandleRead);
DAQmxReadDigitalU32(taskHandleRead, numSampsPerChanRead, 5.0, DAQmx_Val_GroupByScanNumber, readArray, arraySizeInSamps, &sampsPerChanRead, reserved);
DAQmxStartTask(taskHandleWrite);
DAQmxWaitUntilTaskDone(taskHandleWrite,10.0);
DAQmxWaitUntilTaskDone(taskHandleRead,10.0);
DAQmxStopTask(taskHandleWrite);
DAQmxStopTask(taskHandleRead);
DAQmxClearTask(taskHandleWrite);
DAQmxClearTask(taskHandleRead);