예제 #1
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
        private bool EndTransaction(Configuration configuration)
        {
            SpiDevice spiDevice = this.Emulator.SpiBus.GetActiveDevice();

            if (configuration.ChipSelect_Port != Cpu.Pin.GPIO_NONE)
            {
                this.Emulator.ManagedHal.Gpio.SetPinState((uint)configuration.ChipSelect_Port, !configuration.ChipSelect_ActiveState);
            }

            if (!IsInTransaction)
            {
                Debug.Assert(false, "not in a SPI transaction");
                Trace.WriteLine("Error: Attempt to end a transaction when none is in place.");
                return(false);
            }
            if (_spiDeviceCurrent != spiDevice)
            {
                Debug.Assert(false, "wrong SPI device");
                Trace.WriteLine("Error: Attempt to end a transaction, but the SPI device does not match.");
                return(false);
            }

            _spiDeviceCurrent = null;

            return(true);
        }
예제 #2
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
 private void SetConfiguration(Configuration configuration)
 {
     _chipSelectPin         = configuration.ChipSelect_Port;
     _chipSelectActiveState = configuration.ChipSelect_ActiveState;
     _chipSelectSetupTime   = configuration.ChipSelect_SetupTime;
     _chipSelectHoldTime    = configuration.ChipSelect_HoldTime;
     _clockIdleState        = configuration.Clock_IdleState;
     _clockEdge             = configuration.Clock_Edge;
     _clockRateKHz          = configuration.Clock_RateKHz;
     _spiModule             = configuration.SpiModule;
 }
예제 #3
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
        private Configuration SpiConfigurationToConfiguration(SpiConfiguration configuration)
        {
            Configuration cfg = new Configuration(
                (Cpu.Pin)configuration.DeviceCS,
                configuration.CS_Active,
                configuration.CS_Setup_uSecs,
                configuration.CS_Hold_uSecs,
                configuration.MSK_IDLE,
                configuration.MSK_SampleEdge,
                configuration.Clock_RateKHz,
                (Hardware.Spi.SpiModule)configuration.SPI_mod);

            return(cfg);
        }
예제 #4
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
        private bool StartTransaction(Configuration configuration)
        {
            if (IsInTransaction)
            {
                Debug.Assert(false, "already in a SPI transaction");
                Trace.WriteLine("Error: Attempt to start a transaction when another one is in place.");
                return(false);
            }

            if (configuration.ChipSelect_Port != Cpu.Pin.GPIO_NONE)
            {
                this.Emulator.ManagedHal.Gpio.SetPinState((uint)configuration.ChipSelect_Port, configuration.ChipSelect_ActiveState);
            }

            _spiDeviceCurrent = this.Emulator.SpiBus.GetActiveDevice();

            return(true);
        }
예제 #5
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
        bool ISpiDriver.nWrite8_nRead8(ref SpiConfiguration Configuration, IntPtr Write8, int WriteCount, IntPtr Read8, int ReadCount, int ReadStartOffset)
        {
            Configuration configuration = SpiConfigurationToConfiguration(Configuration);

            bool res = false;

            try
            {
                if (StartTransaction(configuration))
                {
                    SpiXaction xaction = new SpiXaction(Write8, WriteCount, Read8, ReadCount, ReadStartOffset);

                    res = ((ISpiDriver)this).Xaction_nWrite8_nRead8(ref xaction);
                }
            }
            finally
            {
                res &= EndTransaction(configuration);
            }

            return(res);
        }
예제 #6
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
 public SpiDevice(Configuration configuation)
 {
     SetConfiguration(configuation);
 }
예제 #7
0
파일: Spi.cs 프로젝트: weimingtom/miniclr
        bool ISpiDriver.Xaction_Stop(ref SpiConfiguration Configuration)
        {
            Configuration configuration = SpiConfigurationToConfiguration(Configuration);

            return(EndTransaction(configuration));
        }