如何防止Microsoft.SPOT.Hardware.InterruptPort的无效配置?

时间:2011-04-23 18:51:55

标签: c# .net msdn .net-micro-framework interrupt

我正在尝试使用.NET Micro Framework的Microsoft.SPOT.Hardware.InterruptPort类。但是,文档困扰我:

  

可以将InterruptPort对象配置为无效状态。在这种情况下,程序在实际使用InterruptPort对象之前可能不会生成异常。 例如,假设您创建一个InterruptPort对象,其电阻模式设置为Port.ResistorMode.PullUp,中断模式设置为Port.InterruptMode.InterruptEdgeLevelHigh,并且毛刺滤波器设置为{ {1}}。实例化true对象时,此配置不会生成异常。如果随后添加中断处理程序,则.NET Micro Framework将引发异常。

(强调是我自己的)

没有提到哪些配置会导致这些无效状态,只留下一个任意不做的例子。

有没有我缺少的文件?
我忽略了一件必不可少的电子知识吗? 或者MSDN在文档中没用?

2 个答案:

答案 0 :(得分:1)

实际上,我遇到了同样的问题/类似的问题。汉斯是正确的,它是由硬件决定的 - 如果你使用的是GHI的FEZ系列设备(我只是在将我的头发撕掉几天之后才从制造商那里发现),他们不支持级别中断,所以任何使用InterruptMode的配置。一旦尝试连接中断处理程序,InterruptEdgeLevelHigh或InterruptMode.InterruptEdgeLevelLow就会失败。 MSDN上的文档很少,主要是因为MicroFramework是社区贡献的开源。微软适用于其他版本的.NET框架的相同(商业)质量标准不适用我担心。如果您的电路板制造商不是GHI,请首先检查它们是否支持电平中断。

答案 1 :(得分:0)

我遇到了同样的问题,但我的解决方案却有所不同。是的,InterruptEdgeLevelHigh和Low都是无效选项。但是,我发现问题是设备没有连接到中断连接。即使它的代码略有不同。

您可以连接这样的按钮。

InputPort yourButton = new InputPort((Cpu.Pin)FEZ_Pin.Digital.LDR, false,
Port.ResistorMode.PullUp);

要使用中断端口,代码如下所示。

InterruptPort yourButton =
new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.LDR, true,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeBoth);

因此,如果设备连接到启用中断的端口,并且您从InterruptPort而不是InputPort创建输入设备,则应该能够创建中断事件处理程序。