Javascript 在运行windows iot的raspberry pi 2上有没有办法使用时钟中断
我正在为Raspberry Pi 2开发信号发生器Windows Iot通用javascript应用程序 我通过SPI将MCP4921 DAC连接到它 我想做的是产生具有给定频率、振幅和偏移量的正弦波。我已经让设备工作,但当我试图产生精确的波,应用程序是减慢甚至10赫兹精确的正弦波 目前波浪是这样产生的Javascript 在运行windows iot的raspberry pi 2上有没有办法使用时钟中断,javascript,raspberry-pi2,spi,windowsiot,isr,Javascript,Raspberry Pi2,Spi,Windowsiot,Isr,我正在为Raspberry Pi 2开发信号发生器Windows Iot通用javascript应用程序 我通过SPI将MCP4921 DAC连接到它 我想做的是产生具有给定频率、振幅和偏移量的正弦波。我已经让设备工作,但当我试图产生精确的波,应用程序是减慢甚至10赫兹精确的正弦波 目前波浪是这样产生的 var Spi = Windows.Devices.Spi; var Enumeration = Windows.Devices.Enumeration; var frequency = 10
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毫秒才能再次运行
是否有任何方法可以修改raspberry定时器、时钟或任何东西,以便每0.1毫秒运行一次自定义中断ISR功能
我已经看过dma寄存器和数据表了。我找不到任何解决方案来管理Raspberry Pi时钟中断,只有pin中断
我也知道如何在Arduino Uno中使用它,但这对我没有帮助,因为我不知道如何操作覆盆子寄存器
这是生成的正弦波的图像
提前感谢。- 如果可能,您可以尝试使用LUT生成正弦,因为 线路: 它们非常耗时。本质上,对于LUT,您需要 预生成的正弦波样本并存储在RAM中
- 如果您打算通过计算经过的时间来计算正弦波值,我认为您不应该使用
首先。这样,如果你指望软件计时,你可能会得到严重的波形扭曲。我建议使用计时器`time += updateFreq;`
- Windows IoT不是实时操作系统。即使使用
高分辨率定时器它不能以极其精确的速度重复操作
间歇(
`time += updateFreq;`