你好,
配置了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毫秒以上的时间才能完成批量处理程序。
我错过了什么关于调度程序?
当做,
叮叮声
你好,
配置了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毫秒以上的时间才能完成批量处理程序。
我错过了什么关于调度程序?
当做,
叮叮声
嗨,对话,
我发现同样的问题以前也在论坛上报道过:
http://support.dialog-semiconductor.com/apptimerset
但没有找到解决办法。您能告诉我们问题的解决方案或根本原因吗?我猜定时器的来源不是在睡眠模式下工作。。。
当做,
叮叮声
嗨,王婷婷,
抱歉,我们无法完全理解您的问题。批量工作指的是什么?批量处理程序指的是什么?您的代码是否基于任何对话框引用代码项目?
当做!
PY公司
嗨,派瑞,
我应该澄清,“批量工作”与问题无关。
在我的设置中,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之间。
当做,
叮叮声
我正在使用app\u asynch\u proc()来实现逻辑,现在工作正常。
当做,
叮叮声