工具/软件:TI-RTOS
大家好!
背景:
我有一个传感器、我需要每秒进行250次采样。 我正在使用传感器控制器来延长电池寿命。 我无法在需要时随时启动传感器控制器任务 、因为我需要确保在正确的时间开始对传感器进行采样、否则会在寄存器中的数据发生变化时冒险对传感器进行采样。 我的解决方案是、传感器有一个中断。 我将等待传感器给我一个中断、现在我知道我可以每秒开始采样250次(并关闭中断)。
问题:
由于某种原因、单次触发中断被触发两次。
我的代码:
void set_up (){
//将中断设置为在我们从传感器
System_printf 获取新数据时触发("我们正在为 DATA_RDY 信号设置中断\n");System_flush ();
PIN_registerIntCb (ledPinHandle、pinInterHandler);
PIN_setInterrupt (ledPinHandle、 PIN_ID (19)| PIN_IRQ_POedge);
}
//由于某种原因,此块会触发两次,原因是什么?
//我需要一次性中断
void pinInterruptHandler (PIN_Handle handle、PIN_ID pinId){
System_printf ("我们从传感器获得中断\n"); System_flush ();
PIN_setInterrupt (ledPinHandle、PIN_ID (19)| PIN_IRQ_DIS);
PIN_Status hello = PIN_clrPendInterrupt (ledPinHandle、PIN_ID (19));
//启动传感器控制器任务
scifStartTasksNbl (BV (SCIF_SAMPLE_SENSOR_TASK_ID));
}
控制台输出:
[Cortex_M3_0]我们正在运行设置过程 我们正在为 DATA_RDY 信号设置中断 我们从传感器获得中断 我们从传感器获得中断
奖励问题:
我是否可以不使用中断、而只是轮询传感器的 DATA_RDY 中断、以便知道何时开始运行任务? 我想做一个 while 循环并检查引脚、但这似乎不能捕获0.25us 脉冲。 也许我可以使用阻塞中断或其他操作?
代码如下所示:
1.初始化传感器 2.等待100ms 以使数据稳定(请参阅数据表) 3.等待 DATA_RDY 变为高电平 4.启动传感器控制器任务
我的问题:
- 为什么我的单次中断会被触发两次、尽管我关闭了它、然后在收到第一个中断时清除了挂起?
- 如何使用阻塞中断?