大家好。
在DSP项目“DA14580_DSPS_3.150.2”中,终点设备。
UART_HW_FLOW_ENABLED opened.
像这样。
#define cfg_uart_hw_flow_ctrl.
#undef cfg_uart_sw_flow_ctrl.
#define cfg_ext_sleep.
#undef CFG_DEEP_SLEEP
连接时,还经常丢失数据,有时会获取数据,有时则不是。
为什么,以及如何处理这个问题。
谢谢。
关键词:
设备:
嗨袁汉武,
你能给我设置吗?您正在使用DSPS Android应用程序,您丢失数据?是预定义的DSP性能内的数据速率吗?睡眠Udefined你还在丢失数据吗?您可以使用SW流量控制通过定义而不使用CTS RTS引脚CFG_UART_SW_FLOW_CTRL.
谢谢mt_dialog.
大家好。
在DSP项目“DA14580_DSPS_3.150.2”中,终点设备。
我的设置是如下:
#define cfg_lp_clk 0xaa // no 32.768k水晶,所以设置0xaa
#define cfg_uart_hw_flow_ctrl.
#define cfg_ext_sleep.
void set_pad_functions(void)//设置GPIO端口功能模式
{
GPIO_CONFIGUREPIN(UART1_TX_PORT,UART1_TX_PIN,OUTPUT,PID_UART1_TX,FALSE);
gpio_configurepin(Uart1_rx_port,uart1_rx_pin,input_pullup,pid_uart1_rx,false);
#if(uart_hw_flow_enabled)
GPIO_ConfigurePin (UART1_RTS_PORT UART1_RTS_PIN,OUTPUT, PID_UART1_RTSN, false );
GPIO_CONFIGUREPIN(UART1_CTS_PORT,UART1_CTS_PIN,INPUT_PULLUP,PID_UART1_CTSN,FALSE);
#endif / * uart_hw_flow_enabled * /
// gpio_configurepin(gpio_button_port,gpio_button_pin,input_pulldown,pid_gpio,false);
}
PC UART <----- FLOW1 ----> BLE UART <----- FLOW2 ------>手机。
我想做的就是:
第一步:
法官流量1是正确的。
在BLE UART中,我从PC获取数据,然后我判断流数据是对的,然后通过UART向PC发送提示。
因此,我使用PC每秒发送数据数据,但提示并不是每秒回到PC。
我认为原因是睡眠和流量控制,因为当我仔细睡眠并关闭流量控制时,数据即时是响应。
我想立即响应,打开睡眠和打开流量控制。
如何做解决这个问题?
第二步:
判断Flow2数据不会丢失或错误位。
每次电话都将数据发送到UART,数据结束时具有CRC CKECK。
现在正在测试。
请给我帮助。
谢谢。
大家好
CTS我曾经唤醒了_UP_IRQ,当UART有数据到BLE时,那么让CTS GPIO高到低电极,
app_force_active_mode();
当数据翻译过来时,让CTS GPIO低到高电平,睡觉。
app_restore_sleep_mode();
key_up_irq不起作用正常,我测试了CTS GPIO高到低电平,并不总是进入Wake_up_irq到App_Force_Active_Mode();
为什么 ?
你能帮助我吗?
嗨袁汉武,
每次在DA睡觉之前都让IRQ和唤醒控制器设置吗?
谢谢mt_dialog.
嗨,mt_dialog,
是的,我有这样的设置:
in void periph_init(void)
{
.........
app_button_enable();
........
}
在void app_button_enable(void)
{
wkupct_register_callback(app_button_press_cb);
如果(UART_CTS_INIT_FLAG == FALSE)
{
GPIO_ConfigurePin( UART1_CTS_PORT, UART1_CTS_PIN, INPUT_PULLUP, PID_UART1_CTSN, true);
wkupct_enable_irq(0x80,0x80,1,0);
UART_CTS_INIT_FLAG = TRUE;
}
别的
{
如果(UART_CTS_IRQ_FLAG == FALSE)
// if(gpio_getpinstatus(gpio_button_port,gpio_button_pin)!= false)
{
GPIO_ConfigurePin( UART1_CTS_PORT, UART1_CTS_PIN, INPUT_PULLUP, PID_UART1_CTSN, true);
wkupct_enable_irq(0x80,0x80,1,0);
}
别的
{
GPIO_CONFIGUREPIN(UART1_CTS_PORT,UART1_CTS_PIN,INPUT_PULLUP,PID_UART1_CTSN,FALSE);
wkupct_enable_irq(0x80,0,1,0);
}
}
}
在void app_button_press_cb(void)中
{
if(GetBits16(SYS_STAT_REG, PER_IS_DOWN))
periph_init();
if(app_ble_ext_wakeup_get())
{
//唤醒这里的ble
#if(ext_sleep_enabled)
app_set_extended_sleep();
#elif(deep_sleep_enabled)
app_set_deep_sleep();
#别的
app_disable_sleep();
#万一
setbits32(gp_control_reg,ble_wakeup_req,1);
app_ble_ext_wakeup_off();
}
if(gpio_getpinstatus(gpio_button_port,gpio_button_pin)!= false)
{
UART_CTS_IRQ_FLAG = FALSE;
uart_cts_irq_lastdown =0;
UART_CTS_IRQ_LASTUP = 1;
uart_sps_flow_off();
app_restore_sleep_mode();
}
别的
{
app_force_active_mode();
UART_CTS_IRQ_LASTDOWN = 1;
UART_CTS_IRQ_LASTUP = 0;
UART_CTS_IRQ_FLAG = TRUE;
UART_SPS_FLOW_ON();
}
app_button_enable();
}
在app_button_enable()
UART_CTS_INIT_FLAG == FALSE仅适用于上电站的电源,然后在APP_BUTTON_ENABLE()中设置唤醒鼠尾_UP_IRQ与APP_BUTTON_PRESS_CB相同。
谢谢。
key_up_irq不起作用正常,我测试了CTS GPIO高到低电平,并不总是进入Wake_up_irq到App_Force_Active_Mode();
为什么 ?
你能帮助我吗?
谢谢。
嗨,mt_dialog,
每次在DA睡眠之前,我每次设置IRQ和唤醒控制器,如下所示。
在void app_button_press_cb(void)中
{
if(GetBits16(SYS_STAT_REG, PER_IS_DOWN))
periph_init();
............
}
嗨袁汉武,
你的代码看起来像这样吗?
wkupct_register_callback(app_button_release_cb);
wkupct_enable_irq(PIN,PIN_POL,EVENTS_NUM,DEB_TIME);
app_ble_force_wakeup();
app_ble_ext_wakeup_off();
也许IRQ发生并且您的系统在代码中的某个地方才会睡眠。此外,您还可以使用Smart Spippets检查您的系统在引脚通过智能片段时的表现方式。
谢谢mt_dialog.