使用app\u timer\u set时出现长时间延迟

5个职位/0个新职位
最后一篇文章
廷旺
离线
最后一次见到:5年10个月前
已加入:2014-08-19 04:27
使用app\u timer\u set时出现长时间延迟

你好,

配置了CFG\u EXT\u SLEEP。

我在做周期性的SPI接收外设:1。外围设置GPIO高,通知DA14580;2。DA14580通过SPI读回数据。请求每秒一次,读取所有数据大约需要10毫秒。

使用wkupct\u register\u callback/wkupct\u enable\u irq,外部中断通知DA。我安排了一个计时器在10毫秒后完成批量工作,但是实际上要花100毫秒以上的时间才能完成批量处理程序。

我错过了什么关于调度程序?

当做,
叮叮声

廷旺
离线
最后一次见到:5年10个月前
已加入:2014-08-19 04:27
嗨,对话,

嗨,对话,

我发现同样的问题以前也在论坛上报道过:

http://support.dialog-semiconductor.com/apptimerset

但没有找到解决办法。您能告诉我们问题的解决方案或根本原因吗?我猜定时器的来源不是在睡眠模式下工作。。。

当做,
叮叮声

PY\u对话框
离线
最后一次见到:2年7个月前
工作人员
已加入:2014-08-25 09:59
嗨,王婷婷,

嗨,王婷婷,

抱歉,我们无法完全理解您的问题。批量工作指的是什么?批量处理程序指的是什么?您的代码是否基于任何对话框引用代码项目?

当做!
PY公司

廷旺
离线
最后一次见到:5年10个月前
已加入:2014-08-19 04:27
嗨,派瑞,

嗨,派瑞,

我应该澄清,“批量工作”与问题无关。

在我的设置中,da14580端口0/pin0与外部中断源相连,端口0/pin0上有1Hz的上升沿信号。

我的代码基于keil\u projects/approximity/reporter\u fh。在while(1)循环之前的main_func()中,我注册了回调以捕获端口0/pin0上的GPIO触发器信号:

//设置ECG中断
wkupct\u register\u callback(ecg\u wakeup\u cb);

wkupct_enable_irq(1<<0,0,1,0);

以下是回调:

无效ecg\U唤醒\U cb(无效)
{
if(GetBits16(SYS\u STAT\u REG,PER\u IS \u DOWN)){
periph_init();
}

app\u timer\u set(app\u ECG\u TRIGGER\u timer,TASK\u app,1);
wkupct_enable_irq(1<<0,0,1,0);

如果(!(GetWord16(P0\u DATA\u REG)和(1<<1))){
GPIO\ U设置激活(GPIO\ U端口\ U 0,GPIO\ U引脚\ U 1);
}其他{
GPIO\ U SetInactive(GPIO\ U端口\ U 0,GPIO\ U引脚\ U 1);
}
}

在回调中,我启动了一个计时器,使其在10毫秒内过期,同时切换port0/pin1进行调试。

int app\u ecg\u trigger\u handler(ke\u msg\u id\u t const msgid,
void const*参数,
任务id常量目标id,
Keu任务\u id \u t const src \u id)
{
清除计时器(应用程序ECG触发器计时器,任务应用程序);

如果(!(GetWord16(P0\u DATA\u REG)和(1<<2))){
GPIO\ U设置激活(GPIO\ U端口\ U 0,GPIO\ U引脚\ U 2);
}其他{
GPIO\ U SetInactive(GPIO\ U端口\ U 0,GPIO\ U引脚\ U 2);
}

返回(已消耗的消息);
}

上面的“app\u ecg\u trigger\u handler”是超时处理程序。它切换另一个IO以进行调试。

我观察到的是:当扩展睡眠和深度睡眠都未定义时,计时器在10ms内过期,工作正常;而当扩展睡眠被定义时,第一个超时时间是10ms,接下来的超时时间变化很大,大约在400~500ms之间。

当做,
叮叮声

廷旺
离线
最后一次见到:5年10个月前
已加入:2014-08-19 04:27
我正在使用app\u asynch\u proc()

我正在使用app\u asynch\u proc()来实现逻辑,现在工作正常。

当做,
叮叮声