DA1468X延长睡眠 - 呼吸定时器和LED

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
17个职位/ 0个新职位
最后发表
bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
DA1468X延长睡眠 - 呼吸定时器和LED

你好

由于Free_rtos的空闲任务,我愿意将我的设备延长睡眠。到目前为止,我面临着一些问题。

我的代码基于对话框的示例代码。系统启动,Freertos正在启动,已正确加载任务。

我在主任务中运行一个循环,我确实闪烁一个led来检查系统是活的,并执行1秒睡眠。

我可以追踪系统,直到正确执行WFI。此时,呼吸定时器已关闭,LED关闭。

在WFI的出口处,呼吸计时器不会唤醒。

目前呼吸呼吸呼吸_cfg,hw_led_set_ledx_src(...),hw_breath_init(&approze_cfg);和hw_breath_enable();都位于Prvsetuphardware。如果我在periph_init中放置其中任何一个,即使在活动或空闲模式下也没有LED亮起。

你能确认一下吗

-呼吸定时器的初始化顺序是什么?

呼吸计时器记录在睡眠中被保留?

- 呼吸计时器状态和依赖项是由当前固件管理的吗?

调试此类案例的步骤是什么?

先感谢您

此致

关键词:
设备:
pw_dialog.
离线
最后看到:2个月2周前
工作人员
加入:2019-04-03 02:54
你好,

你好,

请问您的代码是基于哪个样例代码,您的修改是什么?您正在执行的功能是为外部LED提供自动呼吸功能吗?

对于LED的呼吸功能,以下代码显示示例:

Breath_config config = {
.dc_min = dc_min,
.dc_max = dc_max,
.dc_step = dc_step,
.freq_div = freq_div,
.polarity = HW_BREATH_PWM_POL_POS
};

/ *
*设置呼吸定时器配置,因此硬件可以自动驱动LED。
* /
hw_breath_init(配置);

/ *
*设置LED1输出由定时器驱动。
* /
hw_led_set_led1_src(hw_led_src1_breath);
hw_led_enable_led1(真实);

/ *
*然后开始呼吸计时器。
* /
hw_breath_enable();

更多详细信息可以在SDK的Peripherals_Demo中找到。

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

我的代码基于freertos_retarget源代码。

我用的正是你给我的

静态void prvsetuphardware(void)

//激活中断

....

呼吸_config呼吸_cfg = {

.dc_min = 9,//灯功率 - 1
.dc_max = 10,//灯功率设置为10/255
.dc_step = 255,
.freq_div = 255,
.polarity = HW_BREATH_PWM_POL_POS
};

/ * init硬件(OTPC,Cache,ADC,DCDC,USB焊盘,RF,适配器,公共汽车,设备,看门狗)* /
PM_SYSTEM_INIT(PERIPH_INIT);

// init中断控制器
hw_wkup_init(&wkup_cfg);

//配置LED1,红色
hw_led_set_led1_src(hw_led_src1_breath);
hw_led_enable_led1(false);
//配置LED2,绿色
hw_led_set_led2_src(hw_led_src2_breath);
hw_led_enable_led2(真实);
//配置LED3,蓝色
hw_led_set_led3_src(hw_led_src3_breath);
hw_led_enable_led3(false);
//配置RGB LED所需的呼吸计时器
hw_breath_init(&zerate_cfg);
hw_breath_enable();

如果我在Periph_Init中放置了以前的代码,则没有LED亮起。

从Extended_sleep唤醒后留下留下。

先感谢您

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
它似乎比

它似乎比LED更深。

在睡眠前:WFI和PM_SYSTEM_WAKE_UP 0x50000066 = 0x2之后0x50000066 = 0x3。

数据表指出安全启动(我正在使用WatchDog测试生产模式,但尚未安全启动)。

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
新提示0x500030D0 = 0之前

其他提示:睡觉前0x500030D0=0,睡觉后0x500030D0=1似乎醒来后这个功能没有恢复正常。

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
下一个提示是0x50000022 =

下一个提示是0x50000022 =睡觉前0x54B7,睡觉后0x54B6。RC16在长时间睡眠期间停止,在长时间睡眠之后不再启动。依赖于它的DCDC在操作期间被杀死。(0x5000002A = 0x20D2睡觉后:1V8和1V8P下降)

我试图将系统放在DG_CONFIGUSE_DCDC = 0中以停止使用DCDC。

结果,睡眠前后0x50000022 = 0xe7d3。睡觉后我没有更多的撞车。

但我仍然没有领导

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
新的提示。呼吸计时器

新的提示。LED_CONTROL_REG正在被SYS_TCS删除。如果y在periph_init中设置了LED源,那么它们被Sys_tcs在启动和唤醒时擦除。

我不是使用OTP,为什么这个寄存器将是Sys_tcs在这2次上唯一的一个?

在查看UM-B-044附录H的同时,似乎在生产过程中正在使用LED_CONTROL_REG。

你能检查一下在DA14683上运行的freertos_retarget示例代码吗?

到目前为止我不能使用睡眠模式。能量对我的产品至关重要。

谢谢

PM_Dialog
离线
最后看到:3天20小时前
工作人员
加入:2018-02-08 11:03
嗨鲍勃,

嗨鲍勃,

你能尝试在任何使用睡眠模式的SDK的BLE例子中实现它吗?你是如何测试设备无法休眠的?另外,哪些是你的配置在外围?

谢谢,PM_Dialog

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

我还没有时间在我的原型中使用ble。BSP现在相当大,所以这个集成已经被移除了,因为蓝牙不在我们的最小可行产品中。

目前只有GPIO IN/OUT配置,GPIO高/低的一些OUT在执行过程中是固定的,现在呼吸定时器init。

我设法延长了睡眠工作:

-通过禁用DCDC

>你能告诉我为什么RC16在休眠时停止而没有重启吗?

- 通过从电源管理中删除sys_tcs。

——>你能确认给我如何让它停止重新加载LED_CONTROL_REG从OTP复位值(0x80) ?(DA14683在定制板上,OTP从未使用过)

—移动呼吸定时器init / config

- > LED在睡眠期间关闭。结果,我只能在执行时间期间使用LED。

-通过在主任务中使用一个简单的循环

如果我要加载比主循环更多的代码,我确实得到了各种崩溃/麻烦:

- 如果我使用hw_i2c

- >硬故障。(我需要移动到AD_I2C唤醒后重新加载控制器状态)。

- 如果UART在CPU即将入睡或睡眠时收到数据(我认为外部调制解调器发送时钟更新)

——>中断在UART中断处理程序位于情况HW_UART_INT_BUSY_DETECTED。我可以在代码中看到与RBR_THR_DLL相关的注释。如果你有任何想法,我会很高兴。

- UART遗漏了与外部调制解调器的一些通信,因此我的应用程序不会正确行事。

——>我确实需要硬件流控制这里,但我的硬件不同意它。如果您有UART上使用硬件流控制的异步通信的参考实现,我会很高兴。我目前在一个线程轮询ad_uart_read等待数据时,与外部调制解调器通信,但它似乎错过了一些字节。

可能更多的麻烦是睡眠功能。到目前为止,我无法以可靠的方式使用它。

先感谢您

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

我将我的代码从HW_I2C移动到AD_I2C。我在这方面没有更多的问题。

在UART这一边,

- 我在睡眠期间为我的外部调制解调器提供了禁用的级别移位器,以便在睡眠期间没有消息。这不会改变任何东西。

- 我使用了JTAG探针来检查该休息的上下文。似乎这个问题与UART控制台有关,因为我的代码不使用异步通信,因此在UART上没有生成IRQ,我用来与我的外部调制解调器通信。我得到的唯一IRQ来自控制台服务。

你能解决以下问题吗?

- 唤醒后RC16 / DCDC关闭

- SYS_TCS从OTP重新加载值时,在没有使用OTP时

- __brk中的控制台服务中断结尾

先感谢您

PM_Dialog
离线
最后看到:3天20小时前
工作人员
加入:2018-02-08 11:03
嗨鲍勃,

嗨鲍勃,

对不起,我有点糊涂了。我强烈建议您不要修改SDK文件。其中hw_i2c为LLD (Low Level Driver), ad_i2c为I2C的适配器。我强烈建议使用适配器。e建议使用适配器访问硬件外设,因为这不仅提供对外设的访问,而且还确保当前正在访问它的其他任务暂停其操作,直到外设再次被释放。因此,如果另一个任务试图在同一时间访问同一外设,您不必担心。此外,在睡眠模式下,所有外围设备块都将关闭。

谢谢,PM_Dialog

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你能告诉我地址吗

你好

你能看看以下几点吗?

1.控制台服务在__brk中生成UART中断结尾。这一问题就在激活延长睡眠时发出。

硬盘分析:

—LR指向UART_Interrupt_Handler(HW_UART1),用于控制台服务。

- 在void uart_interrupt_handler(HW_UART_ID UART)中,PC点到CONFIG_UART_IGNORE_BUSY_DETECT案例

我尝试使用no dma配置为UART。没有变化。

2. sys_tcs在没有使用OTP时从OTP重新加载值。解决此问题以避免修改BSP文件。

- 查看我以前的分析。我可以使用LED_CONTROL_REG的JTAG探测器弄清楚LED_CONTROL_REG是由SYS_TCS_APPLED(TCS_SYSTEM)重新加载的唯一寄存器;职能。重新加载值为0x80。它清除了我的LED的保留状态。

3.唤醒后关闭RC16 / DCDC。ldo可以完成这项工作,直到启用DCDC后可以使用扩展睡眠。

这里我只看到在休眠之前/之后的RC16位趋于零,而不会回到1。在DS v3.1规范(第6章)中,DCDC依赖于RC16,因此它在唤醒后不能存活。

先感谢您

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

新的硬故障:在睡眠发生后,我在AD_GPADC_READ()中获得一个新的一个。我检查了GPADC寄存器,它们处于重置状态。

你能证实吗?

所有的适配器都在休眠模式下测试过了吗?

- 我可以在构造函数中有适配器“打开”功能?

- 在正常操作期间,我不需要再次调用“打开”。(这包括唤醒后)?

先感谢您

PM_Dialog
离线
最后看到:3天20小时前
工作人员
加入:2018-02-08 11:03
嗨鲍勃,

嗨鲍勃,

我真的很困惑你所做的变化。

  1. SDK文件,如适配器和LLD驱动程序,不能修改。
  2. 所有适配器都经过测试
  3. 在使用适配器之前,您应该初始化和关闭它们。
  4. 关于WDOD,您应该调试程序并找到代码卡的位置。
  5. 系统将运行16MHz时钟时,在主动模式。在睡眠模式下,它以32KHz时钟运行。

我的建议是阅读UM-B-044:DA1468X软件平台参考UM-B-056:DA1468X软件开发人员指南为了理解SDK架构。您还可以在DA1468X支持门户中找到“适配器”示例。

谢谢,PM_Dialog

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

您可以在DA14683上启动FreerTOS_Retaget,点亮LED并激活Extended_sleep(使用PrintF / Console重定向到UART,DCDC和DMA)?

- 睡眠前LED_CONTROL_REG的值是多少?后 ?

- 睡眠前RC16使能位的值是多少?后 ?DCDC还活着吗?

感谢您阅读手册的建议,但它看起来像SDK中的错误,我很高兴您在您身边检查。我从板上的支持包中获得了硬故障。

谢谢

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

好消息。我终于设法让睡眠功能没有崩溃工作。

当我在保留LDO上时,因为电源故障,我击中了3.3V的BOD。

在激活Flash 1V8开关功能后,事情是OK的,从而卸载3V3 RET LDO。

坏消息n°1。7分钟后系统停止睡觉。没有识别的错。

坏消息n°2。如果启用外设,我仍然会达到3V3的BOD。

您是否知道3.3V RET LDO的电力预算是什么时候在延长睡眠时(请不要回答10ma有很多附加的东西)?

我在1V8P和300μA上有1.2mA,3V3理论绝对最大值,但是当睡眠启用时,我会击中BOD并最终通过电源复位。

谢谢

bobspam@free.fr.
离线
最后看到:3个月3周前
加入:2018-06-20 08:07
你好

你好

我终于设法解决了最后的问题

- 我必须手动将交换机驱动到Extended_sleep,我知道系统上什么都不知道(以及控制台!)。我也必须管理手动切换到空闲模式,以避免在正常操作期间的小睡眠(如在等待适配器事件的同时睡眠)。

-我必须将VBAT上的电容提高到20µF,以避免3V3上的BOD(唤醒时的电流峰值使VBAT下降)。

- 一个外围的一个外围设备在1V8P上消耗高达8mA,同时处于完整的关闭模式。10MA预算不好!我不得不在操作后重置它,使其在睡觉时消耗少。

- 没有PM_SET_WAKEUP_MODE(TRUE)激活的系统没有唤醒睡眠任务。没有它,我用系统稳定睡眠后陷入困境,但无所事事。

在旅程的最后睡眠模式似乎是有效的,但是

- 由于sys_tcs_apply(tcs_system),我不再重新加载来自Power Manager的OTP值;PeripH_Init执行后重新加载LED_CONTROL_REG。

我再次在OTP问题上再次询问帮助,以便在不修改Boad支持包文件的情况下发布版本。

谢谢