我想将DA14580实现为SPI从站,并使用额外的2个引脚进行传输流量控制,1PIN用于主数据IRQ(M2S_IRQ_PIN)和1pin for Slave掌握IRQ(S2M_SYNC_PIN)。主站或从站可以随时启动SPI转移。当Master到Slave IRQ Assert时,它应该等待从S2M_Sync_pin断言指示从站准备好接收数据。
1.我应该调用Arch_disable_sleep()当我终于作为从站和等待SPI Master启动SPI传输时,并在传输完成后调用Arch_set_extended_sleep()时?
2. wkupct_enable_irq是否随时工作?可以随时分配引脚唤醒(当系统处于睡眠状态时,闲置,活动模式),?由于当SPI母版本要将数据传输到DA14580(断言M2S_IRQ)时,它不知道DA14580是否处于活动模式或睡眠模式,但从SPI主站SEDSTMM2S_IRQ_PIN时,从站应该准备SPI数据传输。。
3.如果M2S_IRQ_PIN将唤醒DA14580,我应该启用EXTERNAL_WAKEUP预处理器吗?
设备:
嗨cgha,
谢谢你在线的询问。说实话,我并不完全确定你想要完成的事情。据我所知,您希望将DA14580配置为SPI奴隶并通过M2S_IRQ_PIN唤醒它?请注意,当设备处于睡眠模式时,所有外围设备块都会断电,因此芯片应操作n个活动模式。如果使用唤醒控制器才能捕获M2S_IRQ,这将随时工作。但是,为您提供更多的输入,为我提供更多的投入是非常有帮助的。
Thanks, PM_Dialog
是的,我想使用M2S_IRQ_PIN唤醒DA14580当SPI主母版本通过SPI发送数据时(如果DA14580是处于睡眠模式或活动模式),当DA14580已准备好接收数据时,它将其与外部MCUS2M_IRQ_PIN活动,然后外部MCU发送数据。该过程如下:
DA14580是广告或断开连接,没有广告或连接,并启用深睡眠或EXT睡眠的应用程序运行:
1. SPI_MASTER(外部MCU)想要发送数据,请将M2S_IRQ_PIN高。
2. SPI_SLAVE(DA14580) get pin interrupt via M2S_irq_pin
3. spi_slave将其初始化为spi_slave和高的ACK S2M_IRQ_PIN。
4. SPI_MASTER check the S2M_irq_pin, detect high level on S2M_irq_pin, then send spi data to DA14580.
5. SPI_MASTER put the M2S_irq_pin low when data transfer finished.
6. SPI_SLAVE put S2M_irq_pin low.
现在我只能获得第一销中断the first packet of data, when the spi master want to send second packet, da14580 seems can not get the pin interrupt again.
嗨cgha,
Since you send the second interrupt, can you please add a breakpoint in the wake-up controller callback function in order to check if hits? For configuring a wake-up pin, please have a look at the ble_app_sleepmode example of the SDK> Are you using the same code architecture?
Thanks, PM_Dialog
Now it can enter the callback. I should call int_enable function after the pin get high again. But sometime the spi lost some byte after I send dozens of packets. The SPI_Handler seems can not get the bytes quickly enough. The master speed is about 250K bps.
嗨cgha,
要诚实,我无法理解您如何在M2S_IRQ_PIN中断检测时唤醒您的设备。您是否配置了唤醒控制器?只有唤醒控制器可以唤醒芯片。
Thanks, PM_Dialog
现在唤醒工作,所以我需要在SPI转移时调用ARCH_DISABLE_SLEEP()吗?或者,当SPI转移时,我应该保持弹力吗?
嗨cgha,
ARCH_DISABLE_SLEEP()禁用所有睡眠模式,因此系统仅在活动/空闲模式下运行。DA14580有2种睡眠模式:
扩展睡眠模式:只有SystemRAM 42KB&RetentionRAM仍保持打开。
深度睡眠模式:只有RetentionRAM仍然接通。OTP必须被烧焦,以便能够测量深度睡眠电流。
在两个睡眠模式中,包括SPI块和RF块的所有外围块都被断电,因此我建议在与SPI块交互的同时将设备保持在活动模式。
Thanks, PM_Dialog