Windows 10 IoT GPIO中断频率



我有一个带Windows 10 IoT的树莓派3。我想从一个发送脉冲的传感器获得数据。即瑞士流量SF800链路。该传感器将发出与通过传感器的流量相等的脉冲量。数据表上说,我将发送高达2kHz。

我的问题是树莓派上的GPIO会处理这么高的中断频率吗?我已经调查了闪电供应商https://developer.microsoft.com/en-us/windows/iot/docs/lightningproviders这应该是一个巨大的性能提升,但找不到任何关于我应该期望的性能的文档。

目前还没有GPIO中断的官方基准。

以下是Windows IoT闪电性能测试。它通过以最快的速度在0和1之间切换GPIO 5来测试GPIO性能。似乎至少可以达到17.4kHz。

并且GPIO中断事件应该被推入队列,并且不会丢失。

因此,基于以上信息,对于2kHz,应用程序将能够及时处理此类速度中断事件,而不会丢失。

请随意使用,如果有任何问题,请告诉我。

起初我怀疑我需要使用闪电驱动程序来实现所需的中断频率。事实证明,标准的收件箱驱动程序足以满足我的需求。

以下是重现我的情况的步骤:

我创建了一个简单的Arduino草图,可以以10000赫兹的频率发出脉冲。

int dataPin = 12;
void setup() {
pinMode(dataPin, OUTPUT);
}
void loop() {
int count = 0;
while (count < 400)
{
//pulse
digitalWrite(dataPin, HIGH);
digitalWrite(dataPin, LOW);
//This delay presumably makes the pulse be 10000 Hz
delayMicroseconds(100);
count++;
}
delay(5000);
}

创建了一个UWP应用程序,它有一个简单的UI,在页面的中心有一个TextBlock。

public sealed partial class MainPage : Page
{
private GpioController gpio;
private const int inputPinNumber = 17;
private GpioPin inputPin;
private int count;
private I2cController i2cController;
private SpiController spiController;
public MainPage()
{
this.InitializeComponent();
this.Setup();
}
private void Setup()
{
if (LightningProvider.IsLightningEnabled)
{
LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
}
this.gpio = GpioController.GetDefault();

this.inputPin = this.gpio.OpenPin(inputPinNumber);
if (this.inputPin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))
{
this.inputPin.SetDriveMode(GpioPinDriveMode.InputPullUp);
}
else
{
this.inputPin.SetDriveMode(GpioPinDriveMode.Input);
}
this.inputPin.ValueChanged += InputPinOnValueChanged;
}
private void InputPinOnValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
{
var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (args.Edge == GpioPinEdge.FallingEdge)
{
this.count++;
this.CountBlock.Text = this.count.ToString();
}
else
{
}
});
}
}
}

将Windows IoT设置为使用直接内存映射驱动程序。

下一步是通过晶体管将Arduino上的引脚与Pi上的引脚连接起来。我这样做是为了利用Pi上GPIO引脚上内置的上拉电阻器。

当两个应用程序同时运行时,我每个周期只收集大约30个脉冲。

返回Windows IoT设置,将驱动程序重置回收件箱驱动程序,然后重新运行两个应用程序。这一次我没有错过脉搏。

总之,收件箱驱动程序应该足以在没有任何问题的情况下为我提供高达10khz的频率。

最新更新