你好
我是我的自定义DSP,其中我使用P06作为输入中断,以便主CPU生成下降沿并通过UART发送到DA14580,该字符串被更新为上升沿的广告,所有在调试中正常工作模式,但是一旦我用default_sleep模式编译应用程序= ext_sleep,我需要在下降沿和数据传输之间的主CPU上放置一个断点,按顺序挑选数据,该响铃需要清醒的响铃da14580不小....
主CPU从下降沿延迟,直到开始发送数据(这应该足够),但它仍然不起作用,问题是,这是需要ARCH_DISABLE_SLEEP()的时间;在DA14580的下降沿,以便准备好接收UART数据?
// -------------------这是中断的代码--------------------
void gpioctrl_callback(void)
{
nvic_disableirq(gpio0_irqn);//禁用此中断
if(gpio_getpinstatus(gpio_port_0,gpio_ctrl)== false){
//下降沿
Advlen = 0;
if(app_default_sleep_mode == arch_ext_sleep_on)
ARCH_DISABLE_SLEEP();// ARCH_FORCE_ACTIVE_MODE();
//设置中断以检测GPIO_CTRL的上升沿
gpio_enableirq(gpio_port_0,gpio_ctrl,gpio0_irqn,0,1,0);
}别的{
//上升沿,选择新的广告数据并发布它。
if(spsstate == 0){
如果(Advlen){
if(buffad [0] =='f'&& buffad [1] =='l'){
飞行= 1;
app_easy_gap_advertise_stop();
Advlen = 0;
}别的{
// #dl16尝试更改广告消息。
if(飞行显示> = 1){
飞行= 0;
app_easy_gap_undircated_advertise_start();
}别的{
app_easy_gap_advertise_stop();
}
}
}
if(app_default_sleep_mode == arch_ext_sleep_on)
ARCH_SET_EXTEDDE_SLEEP();
}
UART_TXDATA_SETF(0x06);// echo ack.
// applen = 0;
//设置中断以检测p06的下降
gpio_enableirq(gpio_port_0,gpio_ctrl,gpio0_irqn,1,0,0);
}
nvic_clearpendingirq(gpio0_irqn);
nvic_enableirq(gpio0_irqn);//启用此中断
}
问候
请对话mt,此问题的任何帮助?
问候
嗨Joanquark,
当设备醒来时,它会通过LP和SLP处理程序,而您在LP处理程序中,您将无法使用UART,因为校准值应用于XTAL,另一方面,在SLP上另一方面可用使用(您还可以检查GTL_EIF_INIT()和HCI_EIF_INIT()函数,如果存在外部主机以便从UART接收)此操作需要小于5ms,并且您应该能够使用UART在此时间后获得适当的数据。但是,当您从程序的BLE事件唤醒时,所有上述都会发生,当您从外部事件唤醒时,执行首先执行的ISR,就是唤醒_Handler,据我所知,没有接受PERIPH_INIT()函数的调用为了开始你的外围设备,因为你不强迫BLE唤醒没有XTAL16切换,就我可以告诉设备通过SLP处理程序来才能在您调用启动时执行所有先前的过程,我假设这就是在将外部MCU设置断点后能够获得适当数据的原因。在唤醒处理程序中,尝试强制唤醒BLE,初始化您的外围设备并在此后禁用休眠状态。
谢谢mt_dialog.
你好 ,
只是将periph_init()放在下降沿使其工作
谢谢
嗨Joanquark,
很高兴它确实如此,谢谢你报道。
最好的问候mt_dialog.