我想将da14580实现为spi从机,并使用额外的2个引脚进行传输流控制,1个引脚用于主-从数据irq(M2S_irq_引脚),1个引脚用于从-主irq(S2M_同步_引脚)。主设备或从设备可以随时启动spi传输。当主从irq断言时,它应该等待从S2M_sync_引脚断言以指示从机已准备好接收数据。
1.当我将da14580 spi初始化为从并等待spi主机启动spi传输时,我是否应该调用arch_disable_sleep(),当传输完成时调用arch_set_extended_sleep()?
2.wkupct_enable_irq是否随时工作?分配给唤醒的引脚是否可以在任何时候(当系统处于睡眠、空闲、活动模式时)生成中断?因为spi主机希望将数据传输到da14580(断言M2S_irq),它不知道da14580处于活动模式还是睡眠模式,但当spi主机断言m2s_irq_引脚时,从机应随时准备spi数据传输。
3.由于M2S_irq_引脚将唤醒DA14580,我是否应该启用外部_唤醒预处理器?
设备:
你好,cgha,
感谢您的在线查询。老实说,我不完全确定您想要完成什么。据我所知,您想将DA14580配置为SPI从设备,并通过M2S_irq_引脚将其唤醒?请注意,当设备处于睡眠模式时,所有外围设备模块都断电,因此芯片应在活动模式下运行e、 如果您使用唤醒控制器来捕捉M2S_irq,这将在任何时候都起作用。但是,为您所做的工作提供更多的输入将非常有帮助。
谢谢,PM_Dialog
是的,当spi主机希望通过spi发送数据时(无论DA14580处于睡眠模式还是活动模式),我想使用M2S_irq_引脚唤醒DA14580,当DA14580准备接收数据时,它在S2M_irq_引脚活动的情况下确认外部mcu,然后外部mcu发送数据。过程如下:
DA14580正在播发或已断开连接,但未播发或已连接,应用程序在启用深度睡眠或ext睡眠的情况下运行:
1.SPI_主机(外部mcu)要发送数据,请将M2S_irq_引脚置于高位。
2.SPI_SLAVE(DA14580)通过M2S_irq_pin获得引脚中断
3.SPI_从机将其自身初始化为SPI_从机,并确认S2M_irq_引脚为高电平。
4.SPI_MASTER检查S2M_irq_pin,检测S2M_irq_pin上的高电平,然后发送spi数据给DA14580。
5.当数据传输完成时,SPI_MASTER将M2S_irq_pin设置为低电平。
6.把S2M_irq_pin放低。
现在我只能得到第一个引脚中断和第一个数据包的数据,当spi主人想要发送第二个数据包,da14580似乎不能再得到引脚中断。
你好,cgha,
既然你发送了第二个中断,你能不能在唤醒控制器回调函数中添加一个断点,以检查是否命中?关于配置唤醒pin,请查看SDK>的ble_app_sleepmode示例。你使用相同的代码架构吗?
谢谢,PM_Dialog
现在它可以进入回调了。我应该在大头针再次变高之后调用int_enable函数。但有时spi丢失一些字节后,我发送几十个包。SPI_Handler似乎不能足够快地获得字节。主速度大约是250K bps。
你好,cgha,
老实说,我无法理解您希望如何在M2S_irq_引脚中断检测时唤醒设备。您是否配置了唤醒控制器?只有唤醒控制器才能唤醒芯片。
谢谢,PM_Dialog
现在唤醒工作了,那么我需要在spi传输时调用arch_disable_sleep(),还是在spi传输时保持ble打开?
你好,cgha,
arch_disable_sleep()禁用所有睡眠模式,因此系统仅在活动/空闲模式下运行。DA14580有两种可用的睡眠模式:
延长睡眠模式:只有SystemRAM 42kB和RetentionRAM保持打开状态。
深度睡眠模式:只有RetentionRAM保持打开状态。必须烧掉OTP才能测量深度睡眠电流。
在这两种睡眠模式中,包括SPI块和RF块在内的所有外围块都已断电,因此我建议在与SPI块交互时将设备保持在活动模式。
谢谢,PM_Dialog