最近转向了蓝牙虚拟机编程,利用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是发送完成的消息