我開發信號發生器的Windows物聯網通用的JavaScript應用程序樹莓派2有沒有辦法使用時鐘的方式中斷對樹莓PI 2個運行Windows IOT
我連MCP4921 DAC它直通SPI。
我想要做的是產生給定的頻率,振幅和偏移量的正弦波。我已經有了設備的工作,但是當我嘗試產生準確的波形時,應用甚至會使10Hz準確的正弦波減慢。
當前wave是這樣生成的。
var Spi = Windows.Devices.Spi;
var Enumeration = Windows.Devices.Enumeration;
var frequency = 10;
var ts = 1/frequency;
var updateFreq = ts/100;
var time = 0;
var offset = 2;
var amplitude = 2;
var resolution = 4095;
var voltage = 5;
var settings = Spi.SpiConnectionSettings(0);
settings.clockFrequency = 2 * Math.pow(10, 7);
settings.mode = Spi.SpiMode.mode0;
var ags = Spi.SpiDevice.getDeviceSelector();
Enumeration.DeviceInformation.findAllAsync(ags, null).done(dis => {
Spi.SpiDevice.fromIdAsync(dis[0].id, settings).done(device => {
for (; ;) {
var value = offset + amplitude * Math.sin(2 * Math.PI * frequency * time);
var dacValue = parseInt(resolution/voltage * value);
if (dacValue > resolution) dacValue = resolution;
time += updateFreq;
if (time > 1000) time = 0;
var buffer = new Uint8Array(2);
buffer[0] = 0x30 | (dacValue >>> 8);
buffer[1] = 0xFF & dacValue;
device.write(buffer);
}
});
});
我試着用setInterval,我知道這不是很好的做法,它等待至少10毫秒後再運行。
是否有任何方法修改樹莓定時器,時鐘或任何運行自定義中斷ISR功能每0.1毫秒?
我已經看過dma寄存器BCM2835 Datasheet和BCM2836 Datasheet數據表。我無法找到任何解決方案,只有在引腳中斷的情況下才能管理Raspberry Pi時鐘中斷。
我也知道如何在Arduino Uno中完成它,但它不會幫助我,因爲我不知道如何操作覆盆子寄存器。
這是生成的正弦波的圖像。
在此先感謝。