Exemplo n.º 1
0
        // public methods

        /// <summary>
        /// Attempt to open Opal Kelly XEM3010 USB FPGA board.
        /// </summary>
        /// <param name="dataRate">Data rate (High, Medium, or Low).</param>
        /// <param name="boardID">Board ID number.</param>
        /// <param name="boardVersion">Board version number.</param>
        /// <returns>Board name.</returns>
        public string Open(DataRate dataRate, out int boardID, out int boardVersion)
        {
            boardID      = -1;
            boardVersion = -1;

            // Open Opal Kelly XEM3010 board
            myXEM = new okCFrontPanel();

            if (myXEM.OpenBySerial("") != okCFrontPanel.ErrorCode.NoError)
            {
                UsbException e = new UsbException("USB Setup Error: Could not find USB board.");
                throw e;
            }

            // Setup the PLL from the stored configuration.
            myXEM.LoadDefaultPLLConfiguration();

            // Read back the CY22393 PLL configuation (6/3/11)
            okCPLL22393 myPLL = new okCPLL22393();

            myXEM.GetEepromPLL22393Configuration(myPLL);

            // Modify PLL settings from default
            myPLL.SetOutputDivider(0, 5); // set clk1 to 80 MHz (normally 4 = 100 MHz)
            myPLL.SetOutputDivider(1, 8); // set clk2 to 50 MHz (normally 4 = 100 MHz)
            // ... 8 works at 30 MHz with state 7 present (BER = 5.3e-4), zero BER at 20 MHz
            myXEM.SetPLL22393Configuration(myPLL);

            // Download the configuration file.
            if (okCFrontPanel.ErrorCode.NoError != myXEM.ConfigureFPGA("bug3a_receiver_1.bit"))
            {
                UsbException e = new UsbException("USB Setup Error: FPGA configuration failed.");
                throw e;
            }

            Debug.WriteLine("FPGA configuration complete.");

            // Check for FrontPanel support in the FPGA configuration.
            if (false == myXEM.IsFrontPanelEnabled())
            {
                UsbException e = new UsbException("USB Setup Error: FrontPanel support is not available.");
                throw e;
            }

            // Reset FIFOs
            myXEM.SetWireInValue(wireInResetReadWrite, 0x04);
            myXEM.UpdateWireIns();
            myXEM.SetWireInValue(wireInResetReadWrite, 0x00);
            myXEM.UpdateWireIns();

            // Turn raw data mode off by default
            myXEM.SetWireInValue(wireInRawDataMode, 0x00);
            myXEM.UpdateWireIns();

            myXEM.UpdateWireOuts();
            boardID      = (int)myXEM.GetWireOutValue(wireOutBoardID);
            boardVersion = (int)myXEM.GetWireOutValue(wireOutBoardVersion);

            string boardName;

            boardName = myXEM.GetDeviceID();
            // Debug.WriteLine("Board ID: " + boardID);
            return(boardName);
        }