SPI GPIO上对UWP

问题描述 投票:0回答:1

我尝试MAX7219与树莓派3运行UWP应用程序集成。 MAX7219连接到跟随管脚:

  • 40(GPIO21) - 时钟
  • 38(GPIO20) - 数据
  • 36(GPIO16) - CS

天然SPI端口:19,21,23,24,26都忙于触摸板。 我没有找到如何配置.NET Windows.Devices.SerialCommunication.SerialDevice使用GPIO端口,所以我移植shiftOut从Arduino的如下:

    private void shiftOut(BitOrder aBitOrder, byte val)
    {
        if (aBitOrder == BitOrder.LSBFIRST) {
            for (byte i = 0; i < 8; i++)
            {
                GpioPinValue __val = (val & (1 << i)) == 0x0 ? 
                    GpioPinValue.Low : 
                    GpioPinValue.High;

                _data_pin.Write(__val);
            }
        } else {
            for (byte i = 0; i < 8; i++)
            {
                GpioPinValue __val = (val & (1 << (7 - i))) == 0x0 ? 
                    GpioPinValue.Low : 
                    GpioPinValue.High;

                _data_pin.Write(__val);
            }
        }

        _clock_pin.Write(GpioPinValue.High);
        _clock_pin.Write(GpioPinValue.Low);
    }

在过去,项目上的Arduino无毒运行,并通过shiftOut功能用于GPIO端口。

现在,我跑过来树莓派项目3.我公司提供的数据跟踪到芯片:

{ 0x01, 0x01, 0x01, 0x01, 0x01, 0x1, 0x01, 0x01 },
{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
{ 0x01, 0x01, 0x01, 0x01, 0x01, 0x1, 0x01, 0x01 }

但表盘上(这由MAX7219管理)的LED指示灯闪烁在混乱的方式。 基础上的芯片的数据表我认为,这个问题是 - 覆盆子处理器的频率。

max7219 timing虽然Arduino的具有大约50兆赫运行时,Rasbpery裨3 1.4 GHz的运行。如TCL,总胆固醇等的值分别在上Arduino的接受范围内,可以是大约微秒一些事情,但它覆盆子可以是1或2纳秒。

接下来的问题是 - 我不能插入文字之间足够短暂停,最小的停顿可以是毫秒,而我的东西太多了SPI标准:

_clock_pin.Write(GpioPinValue.High);
Task.Delay(-1).Wait(1);  
_clock_pin.Write(GpioPinValue.Low);

另一个问题,我运行与Visual Studio 2015年的项目,所以我不能使用的NuGet库,RaspberrySharp等。 有什么可以解决?

c# raspberry-pi3 gpio spi windows-iot-core-10
1个回答
1
投票

上有树莓派3两种本地SPI接口,您可以使用SPI1:

enter image description here

使用SPI1的代码示例:

// Use chip select line CS0
var settings = new SpiConnectionSettings(0);
// Set clock to 10MHz 
settings.ClockFrequency = 10000000;

// Get a selector string that will return our wanted SPI controller
string aqs = SpiDevice.GetDeviceSelector("SPI1");

// Find the SPI bus controller devices with our selector string
var dis = await DeviceInformation.FindAllAsync(aqs);

// Create an SpiDevice with our selected bus controller and Spi settings
using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
{
    byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
    device.Write(writeBuf);
}
© www.soinside.com 2019 - 2024. All rights reserved.