Exemple #1
0
        public void LoopPinTest()
        {
            Stopwatch timer = new Stopwatch();
            long      expectedTime;

            if (FX3.ActiveFX3.BoardType < FX3BoardType.iSensorFX3Board_C)
            {
                Console.WriteLine("The connected boards do not have loop back pins");
                return;
            }

            for (double freq = 100; freq < 2000; freq += 100)
            {
                Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 1");
                FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK1);
                Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK2, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 2");
                FX3.StopPWM(FX3.FX3_LOOPBACK1);
                Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 2");
                FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK2);
                Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK1, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 1");
                FX3.StopPWM(FX3.FX3_LOOPBACK2);
            }

            Console.WriteLine("Testing SPI triggering with loop back pins...");
            FX3.StartPWM(100, 0.5, FX3.FX3_LOOPBACK1);
            FX3.DrPin    = FX3.FX3_LOOPBACK2;
            FX3.DrActive = true;
            expectedTime = 1000 * 1000 / 100;

            timer.Start();
            FX3.TransferArray(new uint[1], 1, 1000);
            timer.Stop();
            Console.WriteLine("Elapsed stream time " + timer.ElapsedMilliseconds.ToString() + "ms");
            Assert.AreEqual(expectedTime, timer.ElapsedMilliseconds, 0.05 * expectedTime, "ERROR: Invalid stream time");
        }
Exemple #2
0
        public void PinFreqMeasureTest()
        {
            Console.WriteLine("Starting pin frequency measure test...");

            const double MIN_FREQ = 5;
            const double MAX_FREQ = 10000;

            double measuredFreq, expectedFreq;

            Console.WriteLine("Sweeping PWM duty cycle with fixed frequency...");
            expectedFreq = 4000;
            for (double dutyCycle = 0.02; dutyCycle < 0.98; dutyCycle += 0.01)
            {
                Console.WriteLine("Testing duty cycle of " + dutyCycle.ToString());
                FX3.StartPWM(4000, dutyCycle, FX3.DIO3);
                measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 500, 5);
                Console.WriteLine("Pin freq measured on DIO2: " + measuredFreq.ToString() + "Hz");
                Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO2");
            }
            FX3.StopPWM(FX3.DIO3);

            Console.WriteLine("Sweeping freq range...");
            for (expectedFreq = MIN_FREQ; expectedFreq < MAX_FREQ; expectedFreq = expectedFreq * 1.08)
            {
                Console.WriteLine("Testing PWM freq of " + expectedFreq.ToString() + "Hz");
                FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3);
                measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 2000, 3);
                Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz");
                Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4");
                FX3.StopPWM(FX3.DIO3);
                FX3.StartPWM(expectedFreq, 0.5, FX3.DIO4);
                measuredFreq = FX3.MeasurePinFreq(FX3.DIO3, 1, 2000, 3);
                Console.WriteLine("Pin freq measured on DIO3: " + measuredFreq.ToString() + "Hz");
                Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO3");
                FX3.StopPWM(FX3.DIO4);
            }

            Console.WriteLine("Testing averaging...");
            expectedFreq = 4000;
            FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3);
            for (ushort average = 1; average < 1000; average += 2)
            {
                Console.WriteLine("Testing pin freq measure with " + average.ToString() + " averages...");
                measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 1000, average);
                Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz");
                Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4");
            }
        }
Exemple #3
0
        public void ADcmXLStreamCancelTest()
        {
            Console.WriteLine("Starting ADcmXL stream cancel test...");

            long firstCount;

            FX3.DrActive   = true;
            FX3.SensorType = DeviceType.ADcmXL;
            FX3.PartType   = DUTType.ADcmXL3021;
            FX3.DrPin      = FX3.DIO3;
            /* Start 6KHz DR signal on DIO4 */
            FX3.StartPWM(6000, 0.1, FX3.DIO4);

            for (int trial = 0; trial < 4; trial++)
            {
                Console.WriteLine("Starting trial " + trial.ToString());
                /* Start stream */
                FX3.StartRealTimeStreaming(1000000);
                firstCount = FX3.GetNumBuffersRead;
                System.Threading.Thread.Sleep(50);
                Assert.Greater(FX3.GetNumBuffersRead, firstCount, "ERROR: Expected to have read buffers");

                /* Cancel stream (stop stream) */
                FX3.StopStream();
                System.Threading.Thread.Sleep(50);

                /* Check SPI functionality */
                TestSpiFunctionality();

                /* Start stream */
                FX3.StartRealTimeStreaming(1000000);
                firstCount = FX3.GetNumBuffersRead;
                System.Threading.Thread.Sleep(50);
                Assert.Greater(FX3.GetNumBuffersRead, firstCount, "ERROR: Expected to have read buffers");

                /* Cancel stream (cancel stream) */
                FX3.CancelStreamAsync();
                System.Threading.Thread.Sleep(50);

                /* Check SPI functionality */
                TestSpiFunctionality();
            }
        }
Exemple #4
0
        public void PWMGenerationTest()
        {
            Console.WriteLine("Starting PWM generation test...");
            double posWidth, negWidth;
            double measuredFreq, measuredDutyCycle;

            for (double freq = 20; freq < 40000; freq *= 1.2)
            {
                for (double dutyCycle = 0.02; dutyCycle <= 0.98; dutyCycle += 0.02)
                {
                    Console.WriteLine("Starting PWM with freq " + freq.ToString("f2") + "Hz, " + dutyCycle.ToString("f2") + " duty cycle...");
                    FX3.StartPWM(freq, dutyCycle, FX3.DIO3);
                    posWidth          = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO4, 1, 1000);
                    negWidth          = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO4, 0, 1000);
                    measuredFreq      = 1000 / (posWidth + negWidth);
                    measuredDutyCycle = posWidth / (posWidth + negWidth);
                    Console.WriteLine("Measured freq: " + measuredFreq.ToString("f2") + "Hz, measured duty cycle: " + measuredDutyCycle.ToString("f2"));
                    Assert.AreEqual(freq, measuredFreq, 0.01 * freq, "ERROR: Invalid freq measured");
                    Assert.AreEqual(dutyCycle, measuredDutyCycle, 0.01, "ERROR: Invalid duty cycle measured");
                }
            }
        }
Exemple #5
0
        public void PWMPinInfoTest()
        {
            Console.WriteLine("Starting pin PWM info test...");

            int        exCount;
            PinPWMInfo info;

            Console.WriteLine("Testing default PWM pin info for each pin...");
            foreach (PropertyInfo prop in FX3.GetType().GetProperties())
            {
                if (prop.PropertyType == typeof(AdisApi.IPinObject))
                {
                    Assert.AreEqual(0, FX3.GetPinPWMInfo((AdisApi.IPinObject)prop.GetValue(FX3)).IdealFrequency, "ERROR: Expected PWM pins to be disabled for all pins initially");
                }
            }
            Console.WriteLine("Testing PWM pin info for each pin...");
            foreach (PropertyInfo prop in FX3.GetType().GetProperties())
            {
                if (prop.PropertyType == typeof(AdisApi.IPinObject))
                {
                    if (((AdisApi.IPinObject)prop.GetValue(FX3)).pinConfig % 8 != 0)
                    {
                        FX3.StartPWM(2000, 0.5, (AdisApi.IPinObject)prop.GetValue(FX3));
                        info = FX3.GetPinPWMInfo((AdisApi.IPinObject)prop.GetValue(FX3));
                        Assert.AreEqual(((AdisApi.IPinObject)prop.GetValue(FX3)).pinConfig, info.FX3GPIONumber, "ERROR: Invalid GPIO Number");
                        Assert.AreEqual(info.FX3GPIONumber % 8, info.FX3TimerBlock, "ERROR: Invalid FX3 timer block");
                        Assert.AreEqual(2000, info.IdealFrequency, "ERROR: Invalid frequency");
                        Assert.AreEqual(0.5, info.IdealDutyCycle, "ERROR: Invalid duty cycle");
                        FX3.StopPWM((AdisApi.IPinObject)prop.GetValue(FX3));
                    }
                    else
                    {
                        exCount = 0;
                        try
                        {
                            FX3.StartPWM(2000, 0.5, (AdisApi.IPinObject)prop.GetValue(FX3));
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                            exCount = 1;
                        }
                        Assert.AreEqual(1, exCount, "ERROR: Expected exception to be thrown for pins which cannot run PWM");
                    }
                }
            }
            Console.WriteLine("Sweeping PWM freq...");
            {
                for (double freq = 0.5; freq < 100000; freq = freq * 1.1)
                {
                    FX3.StartPWM(freq, 0.5, FX3.DIO1);
                    Assert.AreEqual(freq, FX3.GetPinPWMInfo(FX3.DIO1).IdealFrequency, "ERROR: Invalid IdealFrequency");
                    Assert.AreEqual(freq, FX3.GetPinPWMInfo(FX3.DIO1).RealFrequency, 0.001 * freq, "ERROR: Invalid RealFrequency");
                }
            }

            Console.WriteLine("Sweeping PWM duty cycle at 1KHz...");
            for (double dutyCycle = 0.01; dutyCycle < 1.0; dutyCycle += 0.01)
            {
                FX3.StartPWM(1000, dutyCycle, FX3.DIO1);
                Assert.AreEqual(dutyCycle, FX3.GetPinPWMInfo(FX3.DIO1).IdealDutyCycle, "ERROR: Invalid ideal duty cycle");
                Assert.AreEqual(dutyCycle, FX3.GetPinPWMInfo(FX3.DIO1).RealDutyCycle, 0.001 * dutyCycle, "ERROR: Invalid real duty cycle");
            }
        }
Exemple #6
0
        public void MeasureBusyPulseTest()
        {
            double period;

            double pwmPeriod = 1000;

            double measuredPeriodPin, measuredPeriodSpi;

            List <byte> SpiData = new List <byte>();

            SpiData.Add(0);
            SpiData.Add(0);

            /* Test small period measurements (0.5us - 500us) */
            for (period = 0.5; period < 500; period += 0.5)
            {
                FX3.StartPWM(1000, (pwmPeriod - period) / pwmPeriod, FX3.DIO4);
                measuredPeriodPin = 1000 * FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 0, 100);
                measuredPeriodSpi = 1000 * FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 0, 100);
                Console.WriteLine("Negative PWM Period: " + period.ToString() + "us.\t Error: " + (period - measuredPeriodPin).ToString() + "us");
                Console.WriteLine("Measured period: " + measuredPeriodPin.ToString() + "us");
                /* Assert with 0.2us margin of error */
                Assert.AreEqual(period, measuredPeriodSpi, 0.2, "ERROR: Invalid period measured");
                Assert.AreEqual(period, measuredPeriodSpi, 0.2, "ERROR: Invalid period measured");

                /* Measure positive period */
                FX3.StartPWM(1000, period / pwmPeriod, FX3.DIO4);
                measuredPeriodPin = 1000 * FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 1, 100);
                measuredPeriodSpi = 1000 * FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 1, 100);
                Console.WriteLine("Positive PWM Period: " + period.ToString() + "us.\t Error: " + (period - measuredPeriodPin).ToString() + "us");
                Console.WriteLine("Measured period: " + measuredPeriodPin.ToString() + "us");
                /* Assert with 0.2us margin of error */
                Assert.AreEqual(period, measuredPeriodSpi, 0.2, "ERROR: Invalid period measured");
                Assert.AreEqual(period, measuredPeriodSpi, 0.2, "ERROR: Invalid period measured");
            }

            /* Test large period measurements (2ms - 50ms) */
            pwmPeriod = 100;
            for (period = 2; period < 50; period += 2)
            {
                FX3.StartPWM(10, (pwmPeriod - period) / pwmPeriod, FX3.DIO4);
                measuredPeriodPin = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 0, 200);
                measuredPeriodSpi = FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 0, 200);
                Console.WriteLine("Negative PWM Period: " + period.ToString() + "ms.\t Error: " + (period - measuredPeriodPin).ToString() + "ms");
                /* Assert with 1% margin of error */
                Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
                Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");

                /* Measure positive period */
                FX3.StartPWM(10, period / pwmPeriod, FX3.DIO4);
                measuredPeriodPin = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 1, 200);
                measuredPeriodSpi = FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 1, 200);
                Console.WriteLine("Positive PWM Period: " + period.ToString() + "ms.\t Error: " + (period - measuredPeriodPin).ToString() + "ms");
                /* Assert with 1% margin of error */
                Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
                Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
            }

            /* Test very large period measurements (1 sec) */
            Console.WriteLine("Testing 1 second period signal measurements...");
            period = 1000;
            FX3.StartPWM(0.5, 0.5, FX3.DIO4);
            measuredPeriodPin = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 0, 5000);
            measuredPeriodSpi = FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 0, 5000);
            Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
            Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
            measuredPeriodPin = FX3.MeasureBusyPulse(FX3.DIO2, 1, 0, FX3.DIO3, 1, 5000);
            measuredPeriodSpi = FX3.MeasureBusyPulse(SpiData.ToArray(), FX3.DIO3, 1, 5000);
            Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
            Assert.AreEqual(period, measuredPeriodSpi, period * 0.1, "ERROR: Invalid period measured");
        }
Exemple #7
0
        public void ADcmXLRealTimeStreamTest()
        {
            Console.WriteLine("Starting ADcmXL data stream test...");

            double expectedTime;

            double realTime;

            double baseTime;

            uint numBuffers = 13600;

            Stopwatch timer = new Stopwatch();

            FX3.DrActive   = true;
            FX3.SensorType = DeviceType.ADcmXL;
            FX3.PartType   = DUTType.ADcmXL3021;
            FX3.DrPin      = FX3.DIO3;
            /* Start 6.8KHz, 80% duty cycle DR signal on DIO4 */
            FX3.StartPWM(6800, 0.8, FX3.DIO4);

            Console.WriteLine("Measuring base stream time...");
            baseTime = 0;
            for (int trial = 0; trial < 5; trial++)
            {
                timer.Restart();
                FX3.StartRealTimeStreaming(1000);
                System.Threading.Thread.Sleep(5);
                FX3.WaitForStreamCompletion(1000);
                baseTime += (timer.ElapsedMilliseconds - (1000.0 / 6.8));
            }
            baseTime /= 5;
            Console.WriteLine("Base stream overhead time: " + baseTime.ToString() + "ms");

            for (int trial = 0; trial < 4; trial++)
            {
                Console.WriteLine("Starting trial " + trial.ToString());
                /* Start stream */
                timer.Restart();
                FX3.StartRealTimeStreaming(numBuffers);
                System.Threading.Thread.Sleep(100);
                FX3.WaitForStreamCompletion((int)(numBuffers / 6.0) + 1000);
                timer.Stop();
                Assert.AreEqual(FX3.GetNumBuffersRead, numBuffers, "ERROR: Invalid number of buffers read");
                realTime = timer.ElapsedMilliseconds;
                /* Take off a base time */
                realTime -= baseTime;

                expectedTime = numBuffers / 6.8;
                Console.WriteLine("Expected time: " + expectedTime.ToString() + "ms, Real time: " + realTime.ToString() + "ms");
                Assert.AreEqual(expectedTime, realTime, 0.01 * expectedTime, "ERROR: Invalid stream time");

                /* Check SPI functionality */
                FX3.WordLength = 16;
                TestSpiFunctionality();
            }

            Console.WriteLine("Verifying that when the DR edge is missed the stream waits until the following edge to start...");
            FX3.SclkFrequency = 8000000;
            timer.Restart();
            FX3.StartRealTimeStreaming(numBuffers);
            System.Threading.Thread.Sleep(100);
            FX3.WaitForStreamCompletion((int)(2 * numBuffers / 6.0) + 1000);
            timer.Stop();
            Assert.AreEqual(FX3.GetNumBuffersRead, numBuffers, "ERROR: Invalid number of buffers read");
            realTime = timer.ElapsedMilliseconds;
            /* Take off a base time */
            realTime -= baseTime;

            /* Twice the time because we read every other data ready */
            expectedTime = 2 * numBuffers / 6.8;
            Console.WriteLine("Expected time: " + expectedTime.ToString() + "ms, Real time: " + realTime.ToString() + "ms");
            Assert.AreEqual(expectedTime, realTime, 0.01 * expectedTime, "ERROR: Invalid stream time");
        }
Exemple #8
0
        public void BurstSpiTest()
        {
            Console.WriteLine("Starting SPI burst read test...");

            List <byte> BurstTxData = new List <byte>();

            ushort[] BurstData;
            int      index;

            RegMapClasses.RegClass triggerReg = new RegMapClasses.RegClass();
            triggerReg.NumBytes = 2;
            triggerReg.Address  = 0x12;

            FX3.DrActive = false;

            for (int byteCount = 4; byteCount < 400; byteCount += 2)
            {
                Console.WriteLine("Testing burst read of " + byteCount.ToString() + " bytes...");
                FX3.BurstByteCount = byteCount;
                Assert.AreEqual(byteCount, FX3.BurstByteCount, "ERROR; Byte count not applied correctly");
                Assert.AreEqual((byteCount - 2) / 2, FX3.WordCount, "ERROR: FX3 burst word count not set correctly");

                /* Burst trigger reg */
                FX3.TriggerReg = triggerReg;

                /* strip header */
                Console.WriteLine("Testing burst read with trigger reg and header stripped...");
                FX3.StripBurstTriggerWord = true;
                FX3.SetupBurstMode();
                FX3.StartBurstStream(1, FX3.BurstMOSIData);
                FX3.WaitForStreamCompletion(50);
                BurstData = FX3.GetBuffer();
                Assert.AreEqual((byteCount / 2) - 1, BurstData.Count(), "ERROR: Invalid burst data count");
                for (int i = 0; i < BurstData.Count(); i++)
                {
                    Assert.AreEqual(0, BurstData[i], "ERROR: Expected all burst data to be 0");
                }

                /* No strip header */
                Console.WriteLine("Testing burst read with trigger reg and header not stripped...");
                FX3.StripBurstTriggerWord = false;
                FX3.SetupBurstMode();
                FX3.StartBurstStream(1, FX3.BurstMOSIData);
                FX3.WaitForStreamCompletion(50);
                BurstData = FX3.GetBuffer();
                Assert.AreEqual((byteCount / 2), BurstData.Count(), "ERROR: Invalid burst data count");
                Assert.AreEqual(0x1200, BurstData[0], "ERROR: Invalid burst data echoed");
                for (int i = 1; i < BurstData.Count(); i++)
                {
                    Assert.AreEqual(0, BurstData[i], "ERROR: Expected remainder of burst data to be 0");
                }

                /* Burst transmit data */
                BurstTxData.Clear();
                for (int i = 0; i < byteCount; i++)
                {
                    BurstTxData.Add((byte)(i & 0xFFU));
                }
                FX3.BurstMOSIData = BurstTxData.ToArray();
                for (int i = 0; i < BurstTxData.Count; i++)
                {
                    Assert.AreEqual(BurstTxData[i], FX3.BurstMOSIData[i], "ERROR: Burst MOSI data not applied correctly");
                }

                /* strip header */
                Console.WriteLine("Testing burst read with MOSI byte array and header stripped...");
                FX3.StripBurstTriggerWord = true;
                FX3.SetupBurstMode();
                FX3.StartBurstStream(1, FX3.BurstMOSIData);
                FX3.WaitForStreamCompletion(50);
                BurstData = FX3.GetBuffer();
                Assert.AreEqual((byteCount / 2) - 1, BurstData.Count(), "ERROR: Invalid burst data count");
                index = 2;
                for (int i = 0; i < BurstData.Count(); i++)
                {
                    Assert.AreEqual(BurstTxData[index], BurstData[i] >> 8, "ERROR: Invalid burst data echoed");
                    Assert.AreEqual(BurstTxData[index + 1], BurstData[i] & 0xFF, "ERROR: Invalid burst data echoed");
                    index += 2;
                }

                /* No strip header */
                Console.WriteLine("Testing burst read with MOSI byte array and header not stripped...");
                FX3.StripBurstTriggerWord = false;
                FX3.SetupBurstMode();
                FX3.StartBurstStream(1, FX3.BurstMOSIData);
                FX3.WaitForStreamCompletion(50);
                BurstData = FX3.GetBuffer();
                Assert.AreEqual((byteCount / 2), BurstData.Count(), "ERROR: Invalid burst data count");
                index = 0;
                for (int i = 0; i < BurstData.Count(); i++)
                {
                    Assert.AreEqual(BurstTxData[index], BurstData[i] >> 8, "ERROR: Invalid burst data echoed");
                    Assert.AreEqual(BurstTxData[index + 1], BurstData[i] & 0xFF, "ERROR: Invalid burst data echoed");
                    index += 2;
                }
            }

            Console.WriteLine("Testing Dr Active triggering for burst...");
            FX3.DrPin = FX3.DIO3;
            FX3.StartPWM(100, 0.5, FX3.DIO4);

            FX3.BurstByteCount = 64;
            BurstTxData.Clear();
            for (int i = 0; i < 64; i++)
            {
                BurstTxData.Add((byte)(i & 0xFFU));
            }
            FX3.BurstMOSIData         = BurstTxData.ToArray();
            FX3.StripBurstTriggerWord = false;
            FX3.SetupBurstMode();
            FX3.DrActive = true;

            double    expectedTime;
            long      drActiveTime, baseTime;
            Stopwatch timer = new Stopwatch();

            for (uint numBuffers = 100; numBuffers <= 300; numBuffers += 100)
            {
                Console.WriteLine("Capturing " + numBuffers.ToString() + " buffers with DrActive set to false...");
                FX3.DrActive = false;
                FX3.StartBurstStream(numBuffers, FX3.BurstMOSIData);
                timer.Restart();
                while (FX3.GetNumBuffersRead < numBuffers)
                {
                    System.Threading.Thread.Sleep(1);
                }
                baseTime = timer.ElapsedMilliseconds;
                Console.WriteLine("Stream time: " + baseTime.ToString() + "ms");
                CheckBurstBuffers(BurstTxData.ToArray(), numBuffers);

                Console.WriteLine("Capturing " + numBuffers.ToString() + " buffers with DrActive set to true...");
                expectedTime = 10 * numBuffers; //100Hz DR
                FX3.DrActive = true;
                FX3.StartBurstStream(numBuffers, FX3.BurstMOSIData);
                timer.Restart();
                while (FX3.GetNumBuffersRead < numBuffers)
                {
                    System.Threading.Thread.Sleep(1);
                }
                drActiveTime = timer.ElapsedMilliseconds;
                Console.WriteLine("Stream time: " + drActiveTime.ToString() + "ms");
                Assert.AreEqual(expectedTime, drActiveTime, 0.25 * expectedTime, "ERROR: Invalid stream time");
                CheckBurstBuffers(BurstTxData.ToArray(), numBuffers);

                Assert.Less(baseTime, drActiveTime, "ERROR: Base stream time greater than DrActive stream time");
            }
        }
Exemple #9
0
        public void TransferArrayWithWriteTest()
        {
            uint[] res;
            uint[] initialMOSI  = new uint[6];
            uint[] repeatedMOSI = new uint[4];

            Stopwatch timer = new Stopwatch();
            double    time;

            Console.WriteLine("Starting SPI write then read stream test...");

            FX3.WordLength    = 32;
            FX3.StallTime     = 3;
            FX3.SclkFrequency = 4000000;
            FX3.DrActive      = false;
            FX3.DrPin         = FX3.DIO3;

            for (uint i = 0; i < 4; i++)
            {
                repeatedMOSI[i] = i;
            }
            initialMOSI[0] = 0xAAAAAAAA;
            initialMOSI[5] = 0x55555555;

            /* Both false */
            Console.WriteLine("Testing both DR inactive...");
            FX3.DrActive = false;
            System.Threading.Thread.Sleep(10);
            FX3.StartPWM(10, 0.5, FX3.DIO4);
            timer.Restart();
            res  = FX3.WriteReadTransferArray(initialMOSI, false, repeatedMOSI, 10);
            time = timer.ElapsedMilliseconds;
            Assert.LessOrEqual(time, 10, "Expected time of less than 10ms");
            Assert.AreEqual(repeatedMOSI.Count() * 10, res.Count(), "Invalid data size");
            CheckRxData(res);

            /* dr active */
            Console.WriteLine("Testing DR active read...");
            FX3.DrActive = true;
            System.Threading.Thread.Sleep(10);
            FX3.StartPWM(10, 0.5, FX3.DIO4);
            timer.Restart();
            res  = FX3.WriteReadTransferArray(initialMOSI, false, repeatedMOSI, 10);
            time = timer.ElapsedMilliseconds;
            //10 reads at 10Hz -> approx 1 sec. Give range 1000 - 1200
            Assert.AreEqual(time, 1100, 100, "Expected time of between 1000ms and 1200ms");
            Assert.AreEqual(repeatedMOSI.Count() * 10, res.Count(), "Invalid data size");
            CheckRxData(res);

            /* initial dr active */
            Console.WriteLine("Testing DR active write...");
            FX3.DrActive = false;
            System.Threading.Thread.Sleep(10);
            FX3.StartPWM(10, 0.5, FX3.DIO4);
            timer.Restart();
            res  = FX3.WriteReadTransferArray(initialMOSI, true, repeatedMOSI, 10);
            time = timer.ElapsedMilliseconds;
            //Should be between 50ms and 150ms
            Assert.AreEqual(time, 100, 50, "Expected time of between 50ms and 150ms");
            Assert.AreEqual(repeatedMOSI.Count() * 10, res.Count(), "Invalid data size");
            CheckRxData(res);

            /* Both true */
            Console.WriteLine("Testing both DR active...");
            FX3.DrActive = true;
            System.Threading.Thread.Sleep(10);
            FX3.StartPWM(10, 0.5, FX3.DIO4);
            timer.Restart();
            res  = FX3.WriteReadTransferArray(initialMOSI, true, repeatedMOSI, 10);
            time = timer.ElapsedMilliseconds;
            //10 reads at 10Hz -> approx 1 sec. Give range 1000 - 1200
            Assert.AreEqual(time, 1100, 100, "Expected time of between 1000ms and 1200ms");
            Assert.AreEqual(repeatedMOSI.Count() * 10, res.Count(), "Invalid data size");
            CheckRxData(res);
        }