Register Level DMA programming for NI6533

I am writing a register level driver (LynxOS) for the NI6533. I have the DAQ DIO register map (http://www.ni.com/pdf/daq/us/release_ni6533.pdf) but it does not list registers for the DMA controller chip.
Is there a manual that describes how to setup the DMA registers for this board?
Thanks,
- Larry

Hi Christian,
Thanks for the MITE RLPM, that was the missing piece.
I am now having trouble getting two NI6533's to handshake. One is in a PCI x86 box running LynxOS, and the other is in a desktop PC. For the latter I'm using the Examples:Harware Input and Output:Traditional DAQigital Input and Output:653x examples from LabView 7. Specifically, the Buffered Handshake Output.vi and Cont Handshake Output.vi.
The Cont Handshake Output vi is timing out at 1 second intervals waiting for the write to complete, so I'm assuming from this that no handshaking is occurring.
I can toggle the data lines statically and that looks OK in both directions. I've set the exchangePins bit=1 to swap the ACK/REQ signals on the LynxOS side.
I've attache
d a file that prints the register settings for all of the DIO registers on the LynxOS side. Perhaps you can spot something that's not right?
Also, I'm confused about the delay register settings. The manual states you can adjust the programmable delay from 0 to 700ns in 100ns increments. Yet all of the delay registers show 8-bits. I assume then that only the lower 3 bits are used.
The examples dio_ex12.cpp and dio_ex13.cpp set the group1ReqDelay=3, group1RegNotDelay=2, group1AclDelay=2, and group1AckNotDelay=2, which are consistent with this assumption. However, they set the group1DataDelay=100, which is not consistent. Is this register different than the others?
Thanks,
- Larry
Attachments:
DIO_regs_1.txt ‏7 KB

Similar Messages

  • Register Level Programmer Manual for M Series

    I am using M Series 6221 DAQ and unable to find the Register Level Programmer Manual for it. The E series manual is quite a detailed one (http://www.ni.com/pdf/manuals/341079b.pdf) , Can you please point me to a similar document for M series ..

    Hello ,
          I was directed to the same websites by the Application
    Engineer earlier too.
    I have been using the C++ code. The code is highly complex
    and without any comments. Its very difficult to reverse
    engineer it. Its a practice that code is written by refering
    the manual , instead of understanding the working from code.
    Its unbelivable that NI is selling this product without proper
    docuemntation.
    Anyways, My problem right now is :
    Info
    1. Using a x86 SBC based PC with ThreadX as operating system
    2. I want to use Port1 and Port2 as DI. Able to read from Port1 and Port2 by following the program.
    3. Channel 0 and Channel 1 as On Demand AI (RSE) for sensing 2 different parameters
       in the range of 0V to 10V. 
    4. Want to read a single sample from both the channels.
    5. Unable to read from Channel 0 and Channel 1 correctly yet.
    Questions:
    1. I am using aiex1.c program to acquire Analog signal .
        - numberOfChannels = 2 and numberOfSamples = 1
        - not using adcReset(board)
        - aiPersonalize (board, tMSeries::tAI_Output_Control::kAI_CONVERT_Output_SelectActive_High);
        - aiConfigureChannel (board, 
                                            Channel number 0 and 1 one after the other 
                                            0 gain
                                            tMSeries::tAI_Config_FIFO_Data::kAI_Config_PolarityBipolar,
                                            tMSeries::tAI_Config_FIFO_Data::kAI_Config_Channel_TypeRSE,
                                            Channel 1 is last channel )
       - As Is aiConvert (board,
                                     280,     // convert period divisor
                                     280,     // convert delay divisor
                                     kFalse);
      Any idea if i am not conguring or missing something ???
      As the acquired value i read is incorrect
    2. Suppose i configure Channel 0 and Channel 1, And want to acquire only from
       Channel 0 , What to do for it ?
    3. If acquisations happens from both the Channels , How do i know which data is acquired
        from the Channel 0 and Channel 1 in the FIFO ?
    4. Is there a method to read data directly from ADC instead of reading it from FIFO ?
    5. If there is input signal at Port0 (configured as DI), Can a interrupt be triggered ?
    6. How to make AI interrput based ?
    Thanks,
    Irfan

  • Register level programing of the 6601 counter to connect signals to the rtsi bus

    I have need for more than 4 clocks and have several 6601 counter boards. I would like to use an additional board for the extra clock but need to send signals to the this board from the other. The most efficent way seems to be to use the rtsi bus to connect the 2 boards together. I am programing the counter boards at the register level  using a kernel module in linux. The register level porgramming manual explains how to connect different signals to the sourse pins of the clocks including the rtsi signals.  I have been successful in doing this but  can not find info on how to route the output signal of one clock  to the input of another using the rtsi bus. Using  web search I have seen ways to do this using labview and dqmx calls but nothing for programin at the register level. Thanks for any help on this problem.
    Jerrv

    Hi Jerry-
    Ed's post here has some info that seems related to your question.
    Tom W
    National Instruments

  • Remap PCI 6509 below 1 MB (Register Level)

    Hi All,
    my name is Wolfgang and I ask fo your help with Regiser Level Programming of the PCI 6509
    I refer to this manual:
    DAQ
    Static DIO Register-Level Programmer Manual
    for NI 6509, 651x, 6520, 6521, and 6528 Devices
    found here:  ftp://ftp.ni.com/support/manuals/371580a.pdf
    Accoding to chapter 3 I want to remap the device below 1 MB to 0xD0000 (PCI MITE adress) and 0xD1000 (device adress)
    I do the following steps according to page 3-3:
    1.) "CWrite(0x10,0x000D0000)"
    I do this by BIOS Int 1A and it works, I can read it back.
    2.) "Write(0xD0340,0x0000AEAE)"
    This also works, I can read the values back with the DOS-Tool "debug":
    0xD0340 is 0xAE
    0xD0341 is 0xAE
    0xD0342 is 0
    3.) "CWrite(0x14,0x000D1000)"
    I also do this by BIOS Int 1A and it works, I can read it back.
    4.) "Write(0xD00C0,0x000D1080)"
    This step seems to be the problem:  After this, the device should be seen at 0xD1000, but it is not there, the space is empty.
    When I read the value back I get:
    0xD00C0 is 0x80
    0xD00C2 is 0x00 instead of the writen value 0x0D
    0xD00C3 is 0x00
    What is my mistake?
    Thank's for all help.
    0xD00C1 is 0x10
    0xD0343 is 0

    Sorry, the text seems to be mixed up then sending.
    Let me post this part again:
    I do the following steps according to page 3-3:
    1.) "CWrite(0x10,0x000D0000)"
    I do this by BIOS Int 1A and it works, I can read it back.
    2.) "Write(0xD0340,0x0000AEAE)"
    This also works, I can read the values back with the DOS-Tool "debug":
    0xD0340 is 0xAE
    0xD0341 is 0xAE
    0xD0342 is 0
    0xD0343 is 0
    3.) "CWrite(0x14,0x000D1000)"
    I also do this by BIOS Int 1A and it works, I can read it back.
    4.) "Write(0xD00C0,0x000D1080)"
    This step seems to be the problem:  After this, the device should be seen at 0xD1000, but it is not there, the space is empty.
    When I read the value back I get:
    0xD00C0 is 0x80
    0xD00C1 is 0x10
    0xD00C2 is 0x00 instead of the writen value 0x0D
    0xD00C3 is 0x00

  • Single concurrent program for multiple operating units

    HI
    I am working on XML/BI publisher to generate AR invoice reports.
    We have single rdf report using which rtf templates are generated.
    There are 10 operating units (10 ORG_ID's) and 10 rtf templates, one for each operating unit. There are 4 different responsibilities for each ORG_ID
    Eg: ORG_ID's = 11, 12, 13, 14..........etc
    Eg: Responsibility = xx, yy, zz...........etc
    I want to register a single concurrent program. When a user submits a request from "XX" responsibility, then the template associated with that org_id should be generated. Whichever responsibility the user is accessing from, that particular template must be shown as output.
    How can i register one concurrent program for multiple operating units.
    Thanks!
    Edited by: 994628 on Mar 18, 2013 4:39 PM
    Edited by: 994628 on Mar 18, 2013 4:42 PM

    >
    There are 10 operating units (10 ORG_ID's) and 10 rtf templates, one for each operating unit. There are 4 different responsibilities for each ORG_ID
    Eg: ORG_ID's = 11, 12, 13, 14..........etc
    Eg: Responsibility = xx, yy, zz...........etc
    I want to register a single concurrent program. When a user submits a request from "XX" responsibility, then the template associated with that org_id should be generated. Whichever responsibility the user is accessing from, that particular template must be shown as output.
    >
    interesting case for 10 OE set 10 template
    what is purpose? for each OE different requirements for layout?
    BTW
    if each Responsibility associated with one org_id then
    - you can get current org_id when you run concurrent program
    - create main template (will be #11) with condition like
    <?choose:?>
    <?when: ORG_ID=11?>
    <?import:xdo://FND.XX11_SUB.en.00/?>
    <?call:TEMPLATE11?>
    <?end when?>
    <?when: ORG_ID=12?>
    <?import:xdo://FND.XX12_SUB.en.00/?>
    <?call:TEMPLATE12?>
    <?end when?>
    <?otherwise:?>
    <?import:xdo://FND.XX21_SUB.en.00/?>
    <?call:TEMPLATE21?>
    <?end otherwise?>
    <?end choose?>so based on org_id will be import of needed subtemplate
    - re-register your "10 rtf templates" as subtemplates
    another way is substitution of template for concurrent then it running
    in before_report trigger set needed template
    l_conc_request_id := fnd_global.conc_request_id;
        if ORG_ID = 11 then
          UPDATE fnd_conc_pp_actions t
             SET t.argument2 = 'XX11'
           where t.concurrent_request_id = l_conc_request_id
             and t.action_type = 6;
      if ORG_ID = 21 then
          UPDATE fnd_conc_pp_actions t
             SET t.argument2 = 'XX21'
           where t.concurrent_request_id = l_conc_request_id
             and t.action_type = 6;

  • Register level programming of interrupts for PCI 6503

    Hi all,
    I'm basically trying to get an interrupt from the card upon a change in the data of one of the ports (for instance port A) so I can catch pulse signals without having to poll the pins manually at a high rate. I can't figure out from the documentation and examples whether this is actually possible using register level programming (can't use the DAQmX libraries because I use InTime OS). I can set the appropriate bits of the Interrupt Registers in order to enable the two interrupts (A and B), but I'm not sure what condition generates these interrupts.
    Additionally, I want to be able to send out a pulse on a pin and have it automatically cleared by the board.
    As far as I can tell both of my requirements mean using the card in strobed mode, but the code examples don't give enough information how to work in this mode. Do i have to use the handshaking mechanism somehow and if so, how is this better for me over using static i/o and manually checking pin values?
    Any help or referrence would be greatly appreciated.
    Thank you in advance
    Orr

    Hi Orr,
    The best source of information for this device is its user manual [1], and Appendix B discusses the register map and programming considerations.
    Speaking specifically to interrupts, please refer to PDF page 43 (B-2), emphasis mine:
    Two software-controlled registers determine which devices, if any, generate interrupts. Each of the 82C55A devices has two interrupt lines, PC3 and PC0, connected to the interrupt circuitry. On the PCI-DIO-96 and PXI-6508, the 82C53 device has two of its three counter outputs connected to the interrupt circuitry. Any of these 10 signals can interrupt the computer if the interrupt circuitry is enabled and the corresponding enable bit is set. Refer to the Programming Considerations for the 82C53 section for more information. Normally, the handshaking circuitry controls PC3 and PC0 of the 82C55A devices; however, you can configure either of these two lines for input and then use them as external interrupts. An interrupt occurs on the signal line low-to-high transition."
    The pages following that section describe the interrupt control registers and give pseudo-code examples for configuring them.
    Once we clear this obstacle, let's move on to your output questions.
    [1] PCI-DIO-96/PXI-6508/PCI-6503 User Manual
    http://digital.ni.com/manuals.nsf/websearch/6E8329494F3955528625758300678D55
    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)

  • Documentation for register level programming of PCI-62XX cards

    I'm looking for documentation for register level programming of PCI-62xx series cards. Does such a document exist?
    Thanks

    Scott,
    At this time we do not have a comprehensive M Series RLP manual available.  I was not aware of any plans to deliver this document last month, so you may have been given some incorrect information, in which case I apologize.  Currently, we provide the register map along with several examples showing how to program the boards for different types of operations.  If you have any specific questions, you can post them to this forum where our developers and other customers can help out.  I hope this helps. 
    Jeremy

  • How to do register-level programming for NI6025E when I want to acquire single scan incuding multiple input channels?

    How to do register-level programming for NI6025E when I want to acquire single scan incuding multiple input channels?

    Thanks, Alan, I think I indeed need to combine aiex1.cpp and aiex2.cpp. I made a change to Configure_Board of aiex1.cpp  as follows:
    //Call this function to configure board options.
    void Configure_Board(tSTC *theSTC,tESeries *board)
     //Clear configuration memory
     theSTC->Write_Strobe_0.writeRegister(0x0001);
     //Clear ADC FIFO
     theSTC->Write_Strobe_1.writeRegister(0x0001);
     //Writing to Config_Memory_High_Register for channel 1 settings
     board->ConfigFifoHigh.setChannel(0);
     board->ConfigFifoHigh.setBank(0);
     board->ConfigFifoHigh.setChannelType(board->ConfigFifoHigh.kChannelTypeRSE);
     board->ConfigFifoHigh.flush();
     //Writing to Config_Memory_Low_Register for following channel 1 settings
     board->ConfigFifoLow.setLastChannel(0);
     board->ConfigFifoLow.setGeneralTrigger(0);
     board->ConfigFifoLow.setGain(board->ConfigFifoLow.kGain001_0);
     board->ConfigFifoLow.setPolarity(board->ConfigFifoLow.kPolarityBipolar);
     board->ConfigFifoLow.setDither(0);
     board->ConfigFifoLow.flush();
     //Writing to Config_Memory_High_Register for following channel 0 settings
     board->ConfigFifoHigh.setChannel(1);
     board->ConfigFifoHigh.setBank(0);
     board->ConfigFifoHigh.setChannelType(board->ConfigFifoHigh.kChannelTypeRSE);//RSE mode
     board->ConfigFifoHigh.flush();
     //Writing to Config_Memory_Low_Register for following channel 0 settings
     board->ConfigFifoLow.setLastChannel(1);
     board->ConfigFifoLow.setGeneralTrigger(0);
     board->ConfigFifoLow.setGain(board->ConfigFifoLow.kGain001_0);
     board->ConfigFifoLow.setPolarity(board->ConfigFifoLow.kPolarityBipolar);//BIPOLAR
     board->ConfigFifoLow.setDither(0);
     board->ConfigFifoLow.flush(); 
     return;
     and a change to test(iBus *bus):
    do
      uStatus = theSTC->AI_Status_1.readRegister();
      if (!((uStatus & 0x1000) == 0x1000))
        uValue[i] = board->AIFifoData.readRegister();
       i++;
     } while(i<1);
     printf("Value %d is %6.2f\n",0,FindADDouble(uValue[0]));
     printf("Value %d is %6.2f\n",1,FindADDouble(uValue[1]));
    but it doesn't work, why?
    How shoud I do?

  • Register level programming for USB 6008

    Hi all,
    I am trying to work with USB 6008 in a linux environment without using DAQmxbase drivers. Since Comedi presently doesn't support USB 6008 device, I am considering writing the driver for USB 6008 myself. Is the register level programming of USB 6008 device possible? Where can i find the related documents and examples?
    Greetings
    aneez

    Hi Aneez,
    Via the following links, you can find information about Register Level programming of our hardware. 
    http://digital.ni.com/public.nsf/allkb/1C3988D7D33B925C86256C59007FB4B4?OpenDocument#Hardware Support
    http://digital.ni.com/express.nsf/bycode/exyv4w?opendocument&lang=en&node=seminar_US
    Regards,
    Bas

  • Ni 6602 Card, Configuration in Register Level Programming

    Hello,
    I want to do register level programming with the NI 6602 card .
    I want to use an x4 encoder reader and I want to use the continuous
    frequency generation.
    so i got the following tool to map the kernel space to the user space, so
    a simple shell script will do the job.
    http://www.linux.it/~rubini/software/phob/phob.html
    and than just using the provided function phob_io
    to programm the registers in a shell script:
    #!/bin/bash
    # shell script for init 6602 card with prf and encoder counter
    # set prf
    ../phob_io ''0:048=0000'' # Input Select Register
    ../phob_io ''0:00C=1109'' # Command Register
    ../phob_io ''0:038=00ffffff'' # Load A Register
    ../phob_io ''0:03C=00ffffff'' # Load B Register
    ../phob_io ''0:
    034=9218'' # Mode Register
    But don"t get any output as i expect, what is wrong?
    Do i have to set some othe registers, or write somthing to the PCI-Config?
    Does anyone has some sample configuration?
    Thanks
    Mario Behn
    Mario Behn
    Microwave Remote Sensing Laboratory Room 104
    University of Massachusetts
    Knowles Engineering Building
    Amherst, MA 01003-4410
    phone (413) 545-4675
    fax (413) 545-4652
    email [email protected]

    A typical project for one of the 660x RLP examples needs to include the following source code files:
    ../OSinterface/osiBus.cpp - generic register I/O interface used by the example code
    ../OSinterface/Linux/osiUserCode.cpp - OS specific adapter used by osiBus to access registers on the hardware in the specific OS
    ../ChipObjects/tTIO.cpp - abstraction of the chips and registers on the hardware into C++ classes and properties
    and one of the examples files, e.g.
    ../Examples/gpct_ex1.cpp - implementation of a specific operation, including all initialization of the hardware
    (The same is true for the examples for other boards although the names of the ChipObject and examples will be different.)
    Each of these files needs to be compiled to give y
    ou object files, and then all of the object files need to be linked together to build an application (executable binary). The errors you list seem to indicate that you are not using all of these files.
    There is more information on the RLP example architecture in the attached PDF document.
    Christian Loew, CLA
    Principal Systems Engineer, National Instruments
    Please tip your answer providers with kudos.
    Any attached Code is provided As Is. It has not been tested or validated as a product, for use in a deployed application or system,
    or for use in hazardous environments. You assume all risks for use of the Code and use of the Code is subject
    to the Sample Code License Terms which can be found at: http://ni.com/samplecodelicense
    Attachments:
    Register_Level_Programming_Architecture.pdf ‏165 KB

  • How can I communicate PXI-6509 by Static DIO Register-Level Programming?

    - How can I communicate PXI-6509 by Static DIO Register-Level Programming?
      PXI-6509 physically Port0 is connected to Port1.
      For checking all connections are correct for this case so I have used DAQmx Test Panel. Just in case everything is ok.
      In this case I interested in to communicate the PXI6509 by Register-Level Programming.  
      I have tried to use Open VISA Test Panel for sending and reading data (in MAX explorer) and
      use NI-Spy for checking communication data.
      The first step I configured Port0 to Outputs state and Port1 to Inputs state.
      The second step I setup Port0 to 0xAA.
      The third step I read back Port1 and expected data will be 0xAA but just only 0x0. Why???
       1              ViOut8(0x03D83318, 10, 0x00000041, 1)

    Hello!
    We don't do support on register-level programming but the problem you are experiencing might be due to tri-state on the ports?
    Please check this manual that covers register programming of the device you are using:
    http://digital.ni.com/manuals.nsf/websearch/47300C3471742AD0862570AE005E0AD1
    Regards,
    Jimmie Adolph
    Systems Engineer Manager, National Instruments Northern Region
    Bring Me The Horizon - Sempiternal

  • Where is the SCXI-1102 Register-Level Programming Manual

    The SCXI-1102 User Manual refers (in Chapter 5) to a "SCXI-1102 Register-Level Programming Manual". I can't find the register-level programming manual on www.ni.com. Where can I obtain this manual?

    Hey Don,
    Thank you for contacting National Instruments.
    There is not a register-level programming manual for the SCXI-1102. This was a mistake made in the first version January 1996 of the SCXI-1102 manual. This was corrected in the later August of 1997 version.
    http://www.ni.com/pdf/manuals/320975b.pdf
    Register-level programming is not formally supported by National Instruments. If you would like more information about alternative methods of programming other than NI-DAQ please contact your sales representative.
    Best Regards,
    Joshua P.
    Application Engineering
    National Instruments

  • 660x DIO Register Level Programming

    I am working on a comedi/linux driver for the 6602, and can't figure out how to access the other 24 DIO lines (the ones shared with counter/timer).
    Firstly, I want to use the DIO lines for output, so I must configure them as such. The RLPM doesn't say anything more than a hint about how to configure these lines .
    It seems the answer lies in using 2 bits to set to IO_Config Register(s). The RLPM says that these registers contain 2 bits for configuration direction, but only lists functionality for 00 and 01; not 10 or 11. Is it possible that setting 11 or 10 sets these PFI lines for DIO?

    Hello!
    We don't do support on register-level programming but the problem you are experiencing might be due to tri-state on the ports?
    Please check this manual that covers register programming of the device you are using:
    http://digital.ni.com/manuals.nsf/websearch/47300C3471742AD0862570AE005E0AD1
    Regards,
    Jimmie Adolph
    Systems Engineer Manager, National Instruments Northern Region
    Bring Me The Horizon - Sempiternal

  • Pci-6703 Register-Level Programming

    We wanna use the analog output channels of the 6703 and configure for DC Voltage for my application without NI-DAQ function.
    I have searched in NI website. but there is no PDF file or document file about register-level programming.
    It's important for us, we must program drivers and functions byself.
    How can I do?
    Thanks

    I believe that the Measurement Hardware DDK provides documentation, examples, and register objects for the NI 67xx series of devices.
    geoff
    Geoffrey Schmit
    Fermi National Accelerator Laborary

  • Register Level programming of the AT-DIO-32HS

    I am working with a piece of software that was written using the AT-DIO-32F card. The original programmer did NOT use the National Instruments driver with that card, but rather used a software library that allowed him to access and manipulate the registers directly on that board. The name of the library is called NTPORT (http://www.zealsoft.com/ntport/index.html).  He did this because he was not able to meet the timing requirements using the NI driver.
    We have to replace the AT-DIO-32F card with the AT-DIO-32HS card, and I would like to know if I can continue to do register level programming with the 32HS card.  I have found that I also can not meet my timing requirements using the driver that comes along with the 32HS card.
    I checked this web page (http://digital.ni.com/public.nsf/allkb/B08F4125A9325B3F862565CC0073E68F?OpenDocument), and did not find the AT-DIO-32HS listed. Does this mean I can not program its' registers ?
    Any feedback would be appreciated !!
    Thanks !!

    Hi Raminta-
    The Measurement Hardware Driver Development Kit (MHDDK) provides examples and register documentation for the 653x devices (which includes the AT-DIO-32HS).  The DIO-32F and DIO-32HS devices are quite similar, so it is possible that your existing code will work.  The resources on the MHDDK page should help you fill in any differences.
    Thanks-
    Tom W
    National Instruments

Maybe you are looking for

  • Can't Print or Scan from your OfficeJet Pro after Upgrading from your Win 8 to 8.1?

    Are you having problems when attempting to print or scan from Windows 8.1 after printing/scanning successfully prior to upgrading to 8.1?  Uninstall/Re-install.  With this, I might suggest going to your product page on HP.com (sample link posted belo

  • Cfimage inside cfdocument problem

    Very strange, but repeatable issue I've run into.  I'm using the barbecue Java barcode generator library to generate code128 compliant barcodes which are then handed to cfimage writeToBrowser to finally end up with printable packing/mailing labels. 

  • Pacman + -Syu = system freeze

    I cannot post console output because system freeze so i cannot cut& paste. My pacman output is localized so my translation may not be 100% accurate After i pacman -Syu i get a list of packages hit y they get downloaded then pacman is checking depende

  • Wide area bonjour for mac

    I know this is not an exclusive forum for "bonjour for macbook" but I could not find any category explicitly catering issues with this so I thought this could be the place to ask my query. So here is my problem. To enable wide area bonjour on my lapt

  • Error ORA-12154 trying to connect with instant client 11g / LDAP on Ubuntu

    Hello, I have successfully installed instant client 11.2.0.2 and sqlplus on my Ubuntu 11.04 workstation. I am able to successfully connect to DB's defined in tnsnames.ora, but when the resolution is (or should be) by LDAP, I get error ORA-12154: TNS: