Первоначально я подозревал, что мне нужно будет использовать драйвер молнии, чтобы достичь частоты прерывания, в которой я нуждался. Оказывается, стандартный драйвер Inbox достаточно для того, что мне нужно.
Вот шаги, чтобы воспроизвести мою ситуацию:
Я создал простой 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 с простым пользовательским интерфейсом, который имеет текстовый блок в центре страницы.
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 через транзистор. Я сделал это, чтобы я мог использовать встроенный резистор Pull-Up на контактах GPIO на Pi.
Когда оба приложения выполнялись одновременно, я собирал только 30 импульсов за цикл.
Вернулся в настройку Windows IoT и сбросил драйвер обратно в драйвер Inbox и повторил оба приложения. На этот раз я не пропустил пульса.
В заключение необходимо, чтобы драйвер Inbox был достаточным, чтобы дать мне до 10 кГц без каких-либо проблем.
Я собираюсь запустить тест с ардуино, чтобы надавить импульсы на Pi и проверить мои результаты. Я поделюсь ими, как только я это сделаю. –