Interrupts on a NI-6602

I want to get interrupt from my 6602 board, e.g. on a rising or
falling edge of an output.
I do register level programming. The RLPM does not fully describe all
related registers.
Does anyone have experience with this, or has the related
register-layout available?
I am looking for information about the:
Global Interrupt Control Register (address 0x770);
Global Interrupt Status Register (address 0x754);
Interrupt Acknowledge Register (address 0x4 for G0);
How do I specify I want an interrupt on an edge of the output, or on
an edge of the gate signal?
The Interrupt Enable Register only specifies TC (Terminal Count),
(address 0x092 for G0).
And how to acknowledge such an interrupt?
Thanks.

This is the answer to my own questions, it is working:
GLOBAL_INTERRUPT_STATUS_REG = 0x754, // One register on each TIO chip |size:32bit
GLOBAL_INTERRUPT_CONTROL_REG = 0x770, // One register on each TIO chip |size:32bit
enum GlobalInterruptControlRegBits
EnableInterrupts = (1 << 31), // For TIO(0) and TIO(1)
CascadeInterrupts = (1 << 29), // For TIO(0), cacade interrupts from TIO(1) through TIO(0)
INTERRUPT_ENABLE_REG = 0x92// for G0, for G1..G3 see RLPM page 3-18, 3-19
enum InterruptEnableRegBits
TCInterruptEnableG02 = (1 << 6), // for counter G0, G2, G4, G6, see RLPM page 3-18
TCInterruptEnableG13 = (1 << 9), // for counter G1, G3, G5, G7, see RLPM page 3-19
GateInterruptEnable
G02 = (1 << 8), // for counter G0, G2, G4, G6, not in RLPM
GateInterruptEnableG13 = (1 << 10), // for counter G1, G3, G5, G7, not in RLPM
STATUS_REG = 0x04 // for G0, for G1..G3 see RLPM page 3-28
enum StatusRegBits
// see RLPM page 3-28
assertsInt = (1 << 15),
TCStatus = (1 << 3), // bit03
GateIntStatus = (1 << 2), // bit02 Not in RLPM,
InterruptAckReg = 0x04, // 0x004 (G0), 0x006 (G1), 0x104 (G2), 0x106 (G3) | Write-only | size:16bit
enum InterruptAckRegBits
// Not in RLPM
GateErrorConfirm = (1 << 5),
TCErrorConfirm = (1 << 6),
TCInterruptAck = (1 << 14),
GateInterruptAck = (1 << 15),
Have fun with it.

Similar Messages

  • Dma interrupt transfer modes in 6602

    I am using four simultaneous counters of a 6602 in continuous buffer modes
    using traditional DAQ. Gates used are PFI38 PFI 26 PFI 18 PFI 10.
    When I use set DAQ Device Information.vi to specify the "data transfer
    mode for GPCTR # " either in DMA (3 of them) or interruption mode ( one of
    them), I am not sure which # to use for the GPCTR #.
    In other words, must I specify GPCTR0, 3, 5 in DMA and GPCTR7 in interrupt?
    Otherwise stated, the simple fact that I use predefined PFI would associate
    the GPCTR concerned or, else, are these GPCTR defined as GPCTR0, 1, 2, and 3
    in the order I open their configurations in my Labview program.
    There is no clear definition of what GPCTR # actually mean in the Labview
    references.
    I have the feeling that some counters generating 15000 counts/sec do not use
    DMA but interrupt transfer modes instead.
    Gérard

    GPCTR# is the general purpose counter resource you are using, there are eight 32-bit counters on the 6602 card.  Unfortunately there are only 3DMA channels which means that if you plan on 4 very high speed buffered counting acquisitions then you could have some trouble since interrupts run much slower than the DMA channels.  I have had no problem using a mix of interrupts and DMA channels for continuously buffered counting with 4-8 counters at a time but the collection rate was only a few KHz faster than this the buffering using interrupts can not keep up an will overrun causing a "buffer overrun" error.  If you really need many highspeed buffer counters running simultaneously you could try using 2 cards but this seems costly (RTSI cable will allow multi-card synchronization).
    Paul
    Paul Falkenstein
    Coleman Technologies Inc.
    CLA, CPI, AIA-Vision
    Labview 4.0- 2013, RT, Vision, FPGA

  • 6602: Rising edge capturing hardware interrupt

    I have this signal in input:
    I have to do something on rising edge as soon as possible.
    My idea is to receive an hw interrupt from the board, and to write an isr soubroutine.
    I read about callback function so i write some code.
    But when i call:
        DAQmxErrChk ( DAQmxCfgChangeDetectionTiming ( udpTaskHandle,
                                                      "Dev1/Ctr0",
                                                      "Dev1/Ctr0",
                                                      DAQmx_Val_ContSamps,
                                                      1));
    I have an error for the ctr0, it seems i can use onli the port0.
    Now my question.... is there on port0 a software thread that read continuosly the value of the pins?
    Or is there an hardware interrupt anyway ?
    I think that a software thread has a big latency for me, at this point don't need the 6602 board,
    i could read  the signal on LPT standard port.
    Thank you for the answer.
    There are 10 kinds of people. Those who understand binary notation, and those who do not.
    Solved!
    Go to Solution.

    Sorry if it's passed a long time, i tryed to do as you suggested, but if i set  DAQmx_Val_HWTimedSinglePoint how can i have a continuos acquisition?
    that's my code, it seems that thecallback function is called only once.
    #include <stdio.h>
    #include <NIDAQmx.h>
    #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
    int32 CVICALLBACK TriggerDetectionCallback(TaskHandle taskHandle, int32 signalID, void *callbackData);
    void Cleanup (void);
    static TaskHandle  taskHandle=0;
    int main(void)
        int         error=0;
        int32       read;
        uInt32      data[1000];
        char        errBuff[2048]={'\0'};
        // DAQmx Configure Code
        DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
        DAQmxErrChk (DAQmxCreateCICountEdgesChan(taskHandle,
                                                 "Dev1/ctr1",
                                                 DAQmx_Val_Rising,
                                                 0,
                                                 DAQmx_Val_CountUp));
        DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,
                                           "/Dev1/PFI35",
                                           1000.0,
                                           DAQmx_Val_Rising,
                                           DAQmx_Val_HWTimedSinglePoint ,
                                           1000));
        DAQmxErrChk (DAQmxRegisterSignalEvent(taskHandle,
                                              DAQmx_Val_SampleClock ,
                                              0,
                                              TriggerDetectionCallback,
                                              NULL)
        // DAQmx Start Code
        DAQmxErrChk (DAQmxStartTask(taskHandle));
        printf("Continuously reading. Press Ctrl+C to interrupt\n");
        while( 1 ) {
    Error:
        puts("");
        if( DAQmxFailed(error) )
            DAQmxGetExtendedErrorInfo(errBuff,2048);
        if( taskHandle!=0 ) {
            // DAQmx Stop Code
            DAQmxStopTask(taskHandle);
            DAQmxClearTask(taskHandle);
        if( DAQmxFailed(error) )
            printf("DAQmx Error: %s\n",errBuff);
        printf("End of program, press Enter key to quit\n");
        getchar();
        return 0;
    int32 CVICALLBACK TriggerDetectionCallback(TaskHandle taskHandle, int32 signalID, void *callbackData)
        int32   error=0;
        uInt32  data[200]={0};
        int32   numRead;
        uInt32  i=0;
        char    errBuff[2048]={'\0'};
        static int count =0;
        count++;
        printf("\n\n%d", count);
        if( taskHandle ) {
            // DAQmx Read Code
            DAQmxErrChk (DAQmxReadCounterU32(taskHandle,1000,10.0,data,1000,&numRead,NULL));
            printf("\n%d",data);
        return 0;
    Error:
        if( DAQmxFailed(error) )
            DAQmxGetExtendedErrorInfo(errBuff,2048);
            Cleanup();
            printf("DAQmx Error: %s\n",errBuff);
        return 0;
    void Cleanup (void)
        if( taskHandle!=0 )
            // DAQmx Stop Code
            DAQmxStopTask(taskHandle);
            DAQmxClearTask(taskHandle);
            taskHandle = 0;
    Message Edited by blacksocket on 30-03-2010 03:56 PM
    There are 10 kinds of people. Those who understand binary notation, and those who do not.

  • Interruption on 6602

    I would like  to generate interruption on each edge (rising and falling ) of a TTL signal
    I have a 6602 board .with PXI 8102 CPU in PXI crate. on labview RT
    And I set 3 semi period tasks.
    And the other hand I need 2 phases measures  with the two edge buffer task and 3 pulse measure tasks
    So all of my eight counter is necessary to my application.(i have only one 6602 board).
    I have expected to detect the rising and the falling edge with the buffer semi period task
    I have no succeed to do this
    I have to run process on each edge (rising and falling )
    How i do that
    Please  help me
    Thanks

    Hey Kounga,
    Thanks for posting on NI forums.
    First, I'd like to ask you if you're french, because this is the french part of forums. So that other users could understand you, you will need to post in french, or to post your problem in english on the dedicated forum (in you case, Counter/Timer).
    J'ai donc quelques questions sur votre problème :
    - Quel genre de problème avez-vous avec les tâches de demi-périodes ? Perte de données, absence de données ? Observez-vous une erreur (quel est son code) ?
    - Toutes vos mesures se font-elles sur le même signal ?
    - Observez-vous le même problème avec un système réduit (par exemple, seulement 1 compteur, utilisé pour une mesure d'impulsion, ou de demi-période) ?
    - Avez-vous bien câblé vos compteurs ? (voir l'aide DAQmx, faire une recherche et taper "éléments compteur")
    Les tâches de demi-période n'ont a priori pas besoin qu'on leur spécifie un front, elles renvoient simplement la valeur de temps entre deux événements numériques.
    Bien cordialement,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

  • PXI 6602 interrupts

    I cannot configure a PXI-6602 counter to use Interrupts"
    "I am trying to collect data on 4 channels. Each channel uses a counter of the NI-DAQ PXI-6602.
    For the first three channels I use DMA by default.
    I have added this line of code for the fourth channel which uses counter 3, before I PREPARE & ARM this counter:
    Set_DAQ_Device_Info (device,
    ND_DATA_XFER_MODE_GPCTR3,
    ND_INTERRUPTS);
    but I always become a SetupError (-10600)
    I've tried several different things, also:
    GPCTR_Change_Parameter(device, ND_TRANSFER_MODE, ND_INTERRUPTS);
    but it does not work.
    I am obviously not setting the last channel to use interrupts correctly. Am I supposed to do something else besides Set_Device_Info? Is ND_PROGRAM initializing
    the counter back to use DMA?
    Any help?

    There is a KnowledgeBase Entry that discusses the problem:
    http://digital.ni.com/public.nsf/websearch/540B236C81310B6F862569B5007D5DDC?OpenDocument
    So I would recommend to download and install the latest NI-DAQ driver. After that it should work.

  • Programming periodic interrupt generation on PCI-6601/6602

    Does anyone have experience or knowledge programming the the PCI-6601/6602 or similar card in Visual C++ using the NI-DAQ library to generate an interrupt at a user defined rate (eg. 60Hz) and tying a user defined ISR to that interrupt? I've been looking for sample code, and even the commands in the NI-DAQ function reference to be able to do this, but have found nothing.
    Thanks,
    M Evans

    Anuj,
    I have a vehicle driving simulation application which must me executed at a constant, steady rate, could be 60, 70, 72 Hz, depending on the hardware in the system. The update rate cannot be controlled internally by the application itself due to the limitation of millisecond resolution in Windows' callbacks, etc. So we want to use the high resolution timer on a card like this one and tie our application to an interrupt or event generated by the card.
    With the millisecond resolution in Windows, the closest we can get to 60Hz is 62.5Hz (0.016 seconds per frame). With microsecond resolution we can actually get 60Hz (0.016666 seconds per frame).
    I realize that we will still be at the mercy of the Windows operating system to some extent, but this solution gets us a lot closer to the steady, realtime update rate that we need.
    Thanks,
    M Evans

  • 6602 interrupt programming

    I have started writing a driver for the NI6602 card (since one does not exist in Linux) and have been using the register level programmer manual as a guide.
    I want to use the card in a mode as described in the manual (p. 2-4, Buffered Cumulative Event Counting). I have been able to configure the card to start a counter, and have sucessfully read the HW and SW Save Registers while it is running.
    What is the "method" for having an interrupt created on a HW Save (due to a rising gate edge)? I can read the HW Save register after I have created a pulse on the selected gate, but my interrupt handler is never invoked.
    I am guessing that some more configuration of the MITE needs to be done, but I can't find any documentation on that.
    Also, the "Interrupt Acknowledge" register description seems to be lacking from the manual.
    Is there more documentation floating around on any of this?
    Thanks...
    -Rob

    Rob;
    Unfortunately National Instruments doesn't support Register Level applications.
    I suggest you to go to www.ni.com and type +register +level in the search field to get access to all documentation posted on line about that topic.
    Regards
    Filipe A.
    Applications Engineer
    National Instruments

  • PCI-6602 ,interrupt error

      when I init the board,and Init the MITE,and I write 0x0040 to the register G0InterruptEnable (offset 0x092),and  I read the G0Status register(offset 0x004);
    the value is also 0, the relevant bit should be 1,right? what is wrong?

    I found the problem. I had my VI's priority set to 'highest(time critical)'. If I change the priority setting, everything works great.

  • Maximum number of PCI-6602 cards in 1 computer?

    Is it possible to have 4 PCI-6602 cards in 1 computer?
    Are there any DMA channels or IRQ limitations we need
    to worry about?
    Our computer will have 1 graphics card in the AGP slot,
    possibly a PCI NIC ethernet card and possibly a PCI
    based sound card. It will also have an IDE controller
    with 2 hard drives and 1 CDRW.
    The PCI-6602 manual seems to imply that if you are
    using more than 3 counter channels that you must
    use the slower Interrupt based transfer mode which
    has a maximum transfer rate specified as 2000
    Reading/second. If there are 4 PCI-6602 boards in
    the same computer and all 8 of the channels are
    used on each board does that mean the total
    transfer rate is still 2000 Readings/sec? Or
    wo
    uld the total transfer rate be 8000 Readings/Sec
    since there are 4 PCI-6602's (2000 Readings/Sec
    for each of the 4 PCI-6602's)?

    Hello;
    The only concern you need to have is the number of IRQs available. As far as DMA channels, as the PCI bus itself has only 3 DMA channels available, all the devices that use DMA will share those 3 channels. But, as IRQs can't be shared, the number of counters you will be able to use will be the exact number of available IRQs you still have on your machine.
    As far as transfer rate, the maximum transfer rate will be 2000 Readings/sec, regardless the number of counters you are using.
    Hope this helps.
    Filipe

  • How to generate an interrupt using DI change detection on m-series card

    Hi,
    I want to generate an interrupt on the positive edge of a digital input signal on the IO connector.
    Does anybody know how to configure an m-series card (PXI-6224) for this use through RLP programming?
    Thanks in advance,
    Richard

    Richard vl wrote:
    I want to generate an interrupt on the positive edge of a digital input signal on the IO connector.
    Does anybody know how to configure an m-series card (PXI-6224) for this use through RLP programming?
    RuthC wrote:
    I also want to generate an external interrupt on an M- series pci-6229, and on a pci-6602.
    1. Is there an exampe how to configure the registers?
    2. which external signals can genarate interrupts on those cards?
    Hi Richard, hi Ruth,
    Let me address your questions together: first for 662x (part of M Series) digital change detection and then for 6602 (part of 660x).
    622x (M Series)
    Digital change detection has not been released in the DDK for M Series devices. If you must use an M Series device, please ask your field engineer to contact NI support so we can discuss options. On the other hand, digital change detection has been released in the DDK for X Series devices (63xx) [1].
    If you can use one from that family, then your programming will be much easier -- the RLP manual discusses change detection as well as interrupts (Chapter 1: Interrupts, beginning on PDF page 48), and the example distribution demonstrates how to configure change detection on the device (dioex3). The last piece is data transfer: the example's data transfer mechanism is DMA, so you would need to supply your own interrupt handler to move data to the host (or alert the host that a DMA transfer has completed).
    6602 (660x family)
    Moving to the 6602, change detection is not possible. The 660x device family only supports polling for transfering data read on the digital lines [2].
    Please let me know if I overlooked anything in your questions.
    [1] NI Measurement Hardware Driver Development Kit
    http://sine.ni.com/nips/cds/view/p/lang/en/nid/11737
    [2] NI 660x Specifications
    http://digital.ni.com/manuals.nsf/websearch/57893F11B0C0687F862579330064FF6F
    Joe Friedchicken
    NI VirtualBench Application Software
    Get with your fellow hardware users :: [ NI's VirtualBench User Group ]
    Get with your fellow OS users :: [ NI's Linux User Group ] [ NI's OS X User Group ]
    Get with your fellow developers :: [ NI's DAQmx Base User Group ] [ NI's DDK User Group ]
    Senior Software Engineer :: Multifunction Instruments Applications Group
    Software Engineer :: Measurements RLP Group (until Mar 2014)
    Applications Engineer :: High Speed Product Group (until Sep 2008)

  • 6602 as X4 encoder/ex​ternal clock

    Hello,
    Im trying to use a PCI 6602 to read the output of a linear encoder.  I have a few (I think simple) questions about setting things up...
    Right now I am only using CTR 0 (channel A hooked up to pin 2, B to 40, and Z to 3).  I have been trying to use the DAQ assistant to set up the code.  When i change the acquisition mode to continuous, it asks me to specify a clock type and source.  The only option I am given for clock type is external (is this right?), and for source I have options like PFIxx or RTSxx.  None of these source options seem to allow me to acquire data in continuous mode (The "test" routine doesn't read back anything).  Any suggestions on what I should be doing differently?  Don't feel bad about "dumbing down" your reply :-)  Any info is useful, I'm pretty new to Labview...
    Thanks

    I don't have an LV machine available near my network PC and have only been able to look at the screenshots.  To be perfectly frank, I see far too many issues to address and tutor individually with the limited time I have.  As friendly advice, I would *strongly* recommend backing up several steps and first make an app that works with 1 encoder.  Once you get through that part of the learning curve, *then* add the other encoder channels to your app.  Then my prior post about DMA and interrupts will become relevant again.
    Other things:
    1. I really, *really*, think you've got the wrong idea about how the counters measure encoder signals.  You do NOT need to sample at 2x the encoder pulse rate, the Nyquist theorem does NOT apply here.  The hardware count register tracks encoder position accurately with your 400 kHz encoder signals.  Your app is free to choose how often to sample that count register according to your needs.  This may be anywhere from 1 Hz or less to several kHz.  It does NOT need to approach 1 MHz and even if you tried, the system is almost certain to be incapable of such a rate.
    2. After all the talk about sampling at 1 MHz, you have a software loop that reads 1 single value at a time from each encoder and has a timer to run it only once every 10 msec.  There is a *very* fundamental disconnect here.  (It also appears that you have optional file writes inside the same loop, another factor that'll slow you down.)
    3. The encoder readings are not hardware-sync'ed in time -- the first value read from each represents their positions at different points in time.  With such high-precision encoders, I'd think you would need hardware sync on the read times.
    Finally, why not give us an overall description of your app's needs?  Kind of a big picture description.  I know you've told us what you think the problems are, but I'd wager my NI screwdriver that the 1 MHz sampling rate you think is your main problem will turn out not to be relevant. 
    -Kevin P.
    I don't have an LV machine available near my network PC and have only been able to look at the screenshots.  To be perfectly frank, I see far too many issues to address and tutor individually with the limited time I have.  As friendly advice, I would *strongly* recommend backing up several steps and first make an app that works with 1 encoder.  Once you get through that part of the learning curve, *then* add the other encoder channels to your app.  Then my prior post about DMA and interrupts will become relevant again.
    Other things:
    1. I really, *really*, think you've got the wrong idea about how the counters measure encoder signals.  You do NOT need to sample at 2x the encoder pulse rate, the Nyquist theorem does NOT apply here.  The hardware count register tracks encoder position accurately with your 400 kHz encoder signals.  Your app is free to choose how often to sample that count register according to your needs.  This may be anywhere from 1 Hz or less to several kHz.  It does NOT need to approach 1 MHz and even if you tried, the system is almost certain to be incapable of such a rate.
    2. After all the talk about sampling at 1 MHz, you have a software loop that reads 1 single value at a time from each encoder and has a timer to run it only once every 10 msec.  There is a *very* fundamental disconnect here.  (It also appears that you have optional file writes inside the same loop, another factor that'll slow you down.)
    3. The encoder readings are not hardware-sync'ed in time -- the first value read from each represents their positions at different points in time.  With such high-precision encoders, I'd think you would need hardware sync on the read times.
    Finally, why not give us an overall description of your app's needs?  Kind of a big picture description.  I know you've told us what you think the problems are, but I'd wager my NI screwdriver that the 1 MHz sampling rate you think is your main problem will turn out not to be relevant. 
    -Kevin P.

  • What is the use of the auxiliary pins of 6602 counter card

    Hello,
              I want to know about the Behavior of the auxilliary pins in 6602 counter card.

    Hi Satish,
    Counter n Auxiliary Signal
    You can select any PFI or RTSI, as well as many other internal signals asthe Counter n Auxiliary (CtrnAux) signal. Much like this CtrnGate signal,the CtrnAux signal is configured in edge-detection or level-detection mode depending on the application performed by the counter. The aux signal can
    perform many different operations including starting and stopping the
    counter, generating interrupts, and saving the counter contents. You can
    also use this signal to control the counting direction in edge-counting
    applications.
    Regards,
    Santhosh M

  • PXI 6602 +BNC-2121 +LabView 7.0

    Hello,
    I am using a PXI 6602 with BNC-2121 Connector Accessory and LabView 7.1 to measure a time in a cams programmer (it is composed by a motor, cams, microswitches. The cams rotate and commutate the microswitch state). I need to use all eight counter but for the moment I set up the program with only one counter ( only one cam). When the measure start I need to count the seconds until the microswitch commutate. In a complete rotation of the cam the microswitch can commutate more times and I need to measure every operation (see Figure 1) and I want to save every time (ti) in a matrix because in a second time I would create a output plot. There is a difficult in this measure: when the microswitch commutate there are a rebound problem. The rebound time (Tr in Figure 2) in negligible respect the cams programmer tolerance and I want eliminate it from my measure. Can Somebody help me to write the program, I am new in LabView world.
    Thank you
    Luca
    Attachments:
    Figure.jpg ‏26 KB

    Hi AlessioD,
    I understand that this is an old post, but I'm also interested in using
    buffered event counting with all the 8 counters of PXI-6624. Is it
    possible to do this and will there be any DMA issues. Do I need to use
    some sort of interrupt for counting? Also the link that you send no
    longer seems to be valid. I would love to read the document that you
    are referring to.
    Actually i'm more concerned because my application requires me to sync
    all the 8 counters of 6624 with 4472( I will be sharing the
    oversampling clock of 4472 with the counters).
    Thanks
    Kallis
    Have a nice day!!!
    LabVIEW | LabWindows/CVI | TestStand
    Certified LabVIEW Architect

  • Timed digital IO in PXI-6602

    Dear All,
            I have PXI-6602 timer card. In which i have 8 timer IO and 32 Digital IO. In my application i need timer tick or counter on which i have to change my 32 digital IO state.
            I mean to say that if timer tick is 100, i have to make high on D0
                                         at timer tick 250, i have to make D0 low and D1 high.
                                         at timer tick 500, i have to make D0 hign and D2 high etc......
    means i want to use one timer, use timer interrupt at each timer tick and in software at particular timer tick i have to do start heate, then after give chemical......
    Thanks
    --Vishnu

    Hi Andreu,
    the best way to analyze your question is to post a short example on the programming language that you´re using in order to investigate a little bit.
    Moreover, under NI Find Examples of LabVIEW (if you programm with LabVIEW), you can find several examples how you can programm your digital port about (you can type "Write" or "digital" under Search tab).
    One example would be: "Write Dig Chan-Int Clk-Dig Start.vi".
    Regards
    Diego M.

  • How to generate an Interupt for DMA transfer from Counter on NI-PCI-6602

    dear guys:
          how to generate an Interupt for DMA transfer from Counter on NI-PCI-6602,and I have set the DMA and DMA_INT, and also the global interrupt register.
    but there is no Interupt generated in the Interupt callback function.And when I have set the DMA_INT and global interrupt register ,and then read the relevant register,the relevant bit is also 0.
         I suspect there is an Interupt register contral, like the MITE, you must write the value to 0xc4 for opening .
         there is some codes In my enclosure .What can I do?
    Attachments:
    TEST.C ‏21 KB

    dear Steven_T:
            the registers are In my enclosure ,if you have some ideas,please reply me  first time.thank you !
    Attachments:
    PCI6602.pdf ‏818 KB

Maybe you are looking for