当DA14580作为spi从端接收或发送时,我应该禁用系统休眠吗?

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
9个帖子/ 0新
最后发表
CGHA.
离线
最后一次露面:10个月3天前
加入:2016-03-23 13:05
当DA14580作为spi从端接收或发送时,我应该禁用系统休眠吗?

我想实现da14580作为spi奴隶,并使用额外的2引脚为传输流控制,1引脚为主到从数据irq(M2S_irq_pin)和1引脚为从主irq(S2M_sync_pin)。主从机可以在任何时候开始spi传输。当主端对从端irq断言时,它应该等待从端S2M_sync_pin断言,以表明从端已经准备好接收数据。

1.我应该调用arch_disable_sleep()当我已经启动da14580 spi作为奴隶和等待spi主人开始spi转移,并调用arch_set_extended_sleep()当转移完成?

2.wkupct_enable_irq在任何时候都工作吗?分配到唤醒的引脚可以在任何时候(当系统处于睡眠,空闲,活动模式)产生中断,?因为当spi主人想要传输数据到da14580(assert M2S_irq),它不知道da14580是否处于活动模式或睡眠模式,但从应该准备spi数据传输在任何时候,当spi主人断言m2s_irq_pin。

3.我是否应该启用EXTERNAL_WAKEUP预处理器,因为M2S_irq_pin将唤醒DA14580?

设备:
PM_DIALOG.
离线
最后一次露面:5天23小时前
工作人员
加入:2018-02-08 11:03
嗨cgha,

嗨cgha,

感谢您的在线咨询。老实说,我不完全确定你想要完成什么。据我所知,您想配置DA14580为SPI从,并通过M2S_irq_pin唤醒它?请注意,当设备处于休眠模式时,所有外设块都将关闭电源,因此芯片应在n活动模式下运行。如果您使用唤醒控制器来捕获M2S_irq,那么这在任何时候都可以工作。但是,如果你能为我提供更多关于你正在做的事情的信息,那将会非常有帮助。

谢谢,PM_DIALOG.

CGHA.
离线
最后一次露面:10个月3天前
加入:2016-03-23 13:05
是的,我想使用m2s

是的,我想使用M2S_irq_pin唤醒DA14580 spi主想要发送数据时通过spi(如果DA14580是否在睡眠模式或主动模式),当DA14580准备接收数据时,它与S2M_irq_pin ack外部单片机活跃,那么外部单片机发送数据。流程如下:

DA14580正在发布或断开连接,没有发布或连接,应用程序运行时启用深度睡眠或下一次睡眠:

1.SPI_MASTER(外部mcu)想要发送数据,把M2S_irq_pin调高。

2. SPI_SLAVE(DA14580)通过M2S_IRQ_PIN获取引脚中断

3.sp_slave将自己初始化为sp_slave,并使用high来ack S2M_irq_pin。

4. SPI_MASTER检查S2M_IRQ_PIN,在S2M_IRQ_PIN上检测高电平,然后将SPI数据发送到DA14580。

5.数据传输完成后,SPI_MASTER将M2S_IRQ_PIN LOW放置。

6. SPI_SLAVE将S2M_IRQ_PIN LOW。

CGHA.
离线
最后一次露面:10个月3天前
加入:2016-03-23 13:05
现在我只能得到第一个了

现在我只能获得第一个引脚中断并获得第一个数据包,当SPI母版想要发送第二数据包时,DA14580似乎无法再次获得引脚中断。

PM_DIALOG.
离线
最后一次露面:5天23小时前
工作人员
加入:2018-02-08 11:03
嗨cgha,

嗨cgha,

由于您发送第二个中断,请您可以在唤醒控制器回调函数中添加断点,以检查是否匹配?要配置唤醒引脚,请查看SDK>的BLE_APP_SLEEPMODE示例>您是否使用了相同的代码架构?

谢谢,PM_DIALOG.

CGHA.
离线
最后一次露面:10个月3天前
加入:2016-03-23 13:05
不,它无法进入

现在它可以输入回调。在PIN再次高度后,我应该调用INT_ENABLE函数。但是,在发送数十个数据包后,SPI丢失了一些字节。SPI_Handler似乎无法快速获得字节。主速度约为250k bps。

void SPI_Handler(void) {if(packetLen ==13 && spiisinit) {//GLOBAL_INT_DISABLE();while(0xFF&GetBits16(SPI_CTRL_REG,SPI_INT_BIT)) {while(GetBits16(SPI_CTRL_REG,SPI_TXH)==1);SetWord16 (SPI_RX_TX_REG0 * p_spi_txdata + +);/ / p_spi_txdata + +;* p_spi_rxdata + + = 0 xff&getword16 (SPI_RX_TX_REG0);SetWord16 (SPI_CLEAR_INT_REG 0 x01);如果(packetLen) {packetLen——;if(packetLen == 0) {sp_transfer_irq_off(); / /发送报文newPacket = 1;rcvedCnt + +; } } } } //GLOBAL_INT_RESTORE(); } }

PM_DIALOG.
离线
最后一次露面:5天23小时前
工作人员
加入:2018-02-08 11:03
嗨cgha,

嗨cgha,

老实说,我不明白您想如何在M2S_irq_pin中断检测时唤醒设备。你配置唤醒控制器了吗?只有唤醒控制器才能唤醒芯片。

谢谢,PM_DIALOG.

CGHA.
离线
最后一次露面:10个月3天前
加入:2016-03-23 13:05
现在它有效,所以我需要

现在唤醒工作,所以我需要调用arch_disable_sleep()当spi传输?或者我应该在spi转移的时候保持祝福吗?

PM_DIALOG.
离线
最后一次露面:5天23小时前
工作人员
加入:2018-02-08 11:03
嗨cgha,

嗨cgha,

arch_disable_sleep()禁用了所有的睡眠模式,所以系统只能以active / idle模式运行。DA14580有2种睡眠模式:

扩展睡眠模式:只有SystemRAM 42kB和RetentionRAM保持打开状态。

深度睡眠模式:只有保留内存保持打开状态。OTP必须被烧毁才能测量深度睡眠电流。

在这两种睡眠模式下,所有外围块包括SPI块和RF块都是关闭的,所以我建议在与SPI块交互时保持设备处于主动模式。

谢谢,PM_DIALOG.