当前位置: 代码迷 >> Wireless >> 有关 CSR 的bc417中的SPP的数据流控有关问题
  详细解决方案

有关 CSR 的bc417中的SPP的数据流控有关问题

热度:986   发布时间:2016-04-28 09:37:01.0
有关 CSR 的bc417中的SPP的数据流控问题
本帖最后由 adzqx2008 于 2013-05-14 15:46:09 编辑
最近转向了蓝牙虚拟机编程,利用bluelab对BC417芯片进行编程。目前想实现RS485的数据流控制的功能,其中PIO2和PIO3控制485芯片的收发,默认485芯片处于接收有线数据的状态。现在遇到以下的问题.
需实现的功能:1、当UART口的数据发送到蓝牙模块时,蓝牙模块将其发送到空中。
              2、当蓝牙模块接收到空中数据时,此时设置485芯片为发送状态,将空中数据发送到485线路上。

程序结构:
case SPP_CONNECT_CFM:
         .......
        SPP_CONNECT_CFM_T *cfm = (SPP_CONNECT_CFM_T *) message;
        .....
        SourceConfigure(StreamSourceFromSink(cfm->sink), VM_SOURCE_MESSAGES, VM_MESSAGES_SOME);
        StreamConnect(StreamUartSource(), cfm->sink);
        .....
case SPP_MESSAGE_MORE_DATA:
        .......
        mmd = (SPP_MESSAGE_MORE_DATA_T *) message;
        (copy the data of mmd to uartSink);
        SinkFlush(uartSink, numberOfBytes);
        delay(N ms);
        setPio(status);
        .....
其中,延时N ms是为了保证uart中所有数据都能发送完毕,但此时出现了一个问题,进行回流测试时,若N设置过长,那么蓝牙芯片数据发送完毕后,其就不能立马接收到485的数据,若N设置过短,蓝牙芯片中的数据就不能全部发送出去。

因此,对于N的设置有没有什么办法,或者 蓝牙芯片将其数据发送完毕后,能不能使其产生一个中断?
SPP BC417 CSR 蓝牙 芯片

------解决方案--------------------
SinkFlush是非阻塞的?
那需要看看有没有状态寄存器可以查询到发送完成的。
------解决方案--------------------
MORE_SPACE是发送完成的消息 
  相关解决方案