Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

Shared IRQ Problems in RHEL5.1

I'm using the NI USB 6009 DAQ on RHEL5.1 with version 3.1 of the driver - http://joule.ni.com/nidu/cds/view/p/id/967/lang/en. When using this device it shares an interrupt with a PCI card in the system - http://www.symmetricom.com/products/gps-solutions/bus-level-timing/bc637PCI-U/  or http://www.symmetricom.com/products/gps-solutions/bus-level-timing/bc637PCI-V2/ (depending on manf. date). I see a large number of interrupts coming from the DAQ that interfere with the interrupts coming from the bc637 that are used for timing in our application. What options do I have as far as re-assigning, limiting the number of, re-prioritizing the interrupts used by the DAQ? While moving cards around in the PCI bus is an option it is undesirable as these computers are difficult to physically access.

 

Thanks

0 Kudos
Message 1 of 7
(3,995 Views)

Hey Nick,

 

The DAQmx API doesn't provide this level of control, so the easiest way to prevent your interrupts from conflicting is to not use interrupts on the 6009.  With USB we obviously can't use DMA, but we can use ProgrammedIO or USBbulk as the transfer method.  If you need to use interrupts with both options, the only real option would be to change how Windows assigns the IRQL for each device.

 

To determine if the IRQL of your PCI and USB devices are the same, follow these instructions:

1. Right-click the My Computer icon, usually located in the top, left corner of the screen
2. Select Properties from the pop-up menu to open the System Properties window
3. Click the Device Manager tab
4. Double-click Computer to open the Computer Properties window
5. Make sure the Interrupt request (IRQ) option is selected
6. Scroll through the selection box to find the PCI device, and record the number in the Setting column (the IRQ for the device)
7. Scroll through the selection box to find the USB, and record its IRQ from the Setting column
8. Compare the number you recorded for your PCI device to the number you recorded for the USB controller.

 

Easy Methods for Improving Interrupt Processing Speed

1. Shut down and unplug your computer
2. Move the PCI device to another PCI slot
3. Start your system and follow the previous instructions (above) to determine the IRQL of your PCI Device and USB device.

 

Advanced Methods for Improving Interrupt Processing Speed

NOTE: This method should be used only as a last resort, since it requires you to manually change computer resources.

1. Restart the computer and enter the BIOS settings screen (follow the instructions that came with your computer)
2. Turn off or disable Plug and Play
3. Save the BIOS settings and restart the system
4. Right-click the My Computer icon, usually located in the top, left corner of the screen
5. Select Properties from the pop-up menu to open the System Properties window
6. Click the Device Manager tab
a. Double-click Universal Serial Bus Controller
b. Double-click USB Host Controller

7. Click on the Resources tab
8. Click to remove the checkmark from Use Automatic Settings box
9. Double-click on Interrupt Request and choose a setting level that differs from the PCI device.

-John Sullivan
Problem Solver
Message 2 of 7
(3,983 Views)

Hey Nick,

 

I just realized that you're not using Windows.  So sorry about that :).  I started off answering in Linux, and then somehow drifted back to Windows (I'm a Mac guy myself).  The concept is the same in that we need to either not use IRQ with the USB device or change the IRQL that the USB device is using.  Have a great evening.

-John Sullivan
Problem Solver
Message 3 of 7
(3,981 Views)

Hi John,

 

Thanks for the replies. I'm afraid you lost me a bit when you talked about not using interrupts. This sounds like the ideal situation, and given the amount of data that we are reading interrupts shouldn't be needed. How would I use the device without using interrupts? I'm using the following DAQmx functions:

 

DAQmxBaseCreateTask

DAQmxBaseCreateAIVoltageChan

DAQmxBaseCfgSampClkTiming

DAQmxBaseReadAnalogF64

DAQmxBaseStopTask

DAQmxBaseClearTask

 

Thanks,
Nick

0 Kudos
Message 4 of 7
(3,971 Views)

Hi Nick,

 

The issue sounds like the interrupts from your USB bus (which the 6009 happens to be plugged in to) are interferring with those from your PCI bus.  Can you try the 6009 in a different USB slot to see if it resolves the problem?  I know you mentioned you don't have easy access to the computer itself, but if this would be possible it would be a good step to try.

 

-John 

John Passiak
0 Kudos
Message 5 of 7
(3,917 Views)

Hi John,

 

Having the USB 6009 on a seperate IRQ as the other device does resolve this problem in my test system. I was hoping for a pure software/configuration fix that I could deploy to the field.

 

Thanks,
Nick

0 Kudos
Message 6 of 7
(3,907 Views)

Hi Nick,

 

There may be a way to configure which IRQ line each bus is using--this question would probably be better answered on a Linux support forum.  Unfortunately, you cannot currently disable interrupts on the 6009 using DAQmx Base.  The issue is with the devices using the same IRQ line: if you were to connect any USB device that uses interrupts I'd imagine you would see similar results.  If you do find the answer, let us know so we can have a documented solution should any other customer experience this issue in the future.

 

-John

John Passiak
0 Kudos
Message 7 of 7
(3,891 Views)