我正在尝试读取 Telosb 中的外部按钮中断。我正在使用 GIO2 来读取中断,它与轮询技术配合得非常好,但我正在寻找更接近实际中断方法的东西。
参考 TinyOS,有一个 HplMsp430Interrupt 接口可以实现。我在 Contiki-OS 中找不到类似的东西。
更改引脚状态似乎不会触发任何事件,因为PROCESS_WAIT_EVENT
没有响应。
TelosB 上的按钮驱动程序已在 Contiki 中实现。无需在中断处理程序级别工作即可使用它,只需调用 Contiki API:
#include "dev/button-sensor.h"
PROCESS_THREAD(app_Process, ev, data)
{
PROCESS_BEGIN();
SENSORS_ACTIVATE(button_sensor);
for(;;) {
PROCESS_WAIT_EVENT();
if (ev == sensors_event && data == &button_sensor) {
puts("button clicked");
}
}
}
如果您在谈论其他事情并且实际上需要实现您自己的中断处理程序,那么 Contiki 不会帮助您太多。对于某些 Contiki 平台,有用于控制 GPIO 引脚的宏或函数,但对于msp430
. 因此,您只需要使用编译器头文件中的 I/O 端口接口,并使用ISR(PORT_NUMBER, function_name)
、 where PORT_NUMBER
isPORT1
或PORT2
(支持中断处理程序的端口)声明中断处理程序函数。
请参阅contiki/cpu/msp430/button.c
TelosB 按钮中断处理程序是如何实现的示例,它非常简单。