DSP不需要CTS RTS引脚

10个帖子/ 0新
最后一篇
袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
DSP不需要CTS RTS引脚

大家好。

在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

连接时,还经常丢失数据,有时会获取数据,有时则不是。
为什么,以及如何处理这个问题。

谢谢。

关键词:
设备:
mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

你能给我设置吗?您正在使用DSPS Android应用程序,您丢失数据?是预定义的DSP性能内的数据速率吗?睡眠Udefined你还在丢失数据吗?您可以使用SW流量控制通过定义而不使用CTS RTS引脚CFG_UART_SW_FLOW_CTRL.

谢谢mt_dialog.

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
大家好。

大家好。

在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。
现在正在测试。

请给我帮助。
谢谢。

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
大家好

大家好
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();

为什么 ?

你能帮助我吗?

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

每次在DA睡觉之前都让IRQ和唤醒控制器设置吗?

谢谢mt_dialog.

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
嗨,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();
}

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
在app_button_enable()

在app_button_enable()
UART_CTS_INIT_FLAG == FALSE仅适用于上电站的电源,然后在APP_BUTTON_ENABLE()中设置唤醒鼠尾_UP_IRQ与APP_BUTTON_PRESS_CB相同。

谢谢。

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
key_up_irq不起作用

key_up_irq不起作用正常,我测试了CTS GPIO高到低电平,并不总是进入Wake_up_irq到App_Force_Active_Mode();

为什么 ?

你能帮助我吗?
谢谢。

袁汉武
离线
最后一次露面:4年11个月前
专家
加入:2015-03-25 08:19
嗨,mt_dialog,

嗨,mt_dialog,
每次在DA睡眠之前,我每次设置IRQ和唤醒控制器,如下所示。

在void app_button_press_cb(void)中
{
if(GetBits16(SYS_STAT_REG, PER_IS_DOWN))
periph_init();
............
}

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

你的代码看起来像这样吗?

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.