[CSR8] 分享一个CSR8670串口收发程序 [复制链接]

news/2024/11/15 1:24:04/

chuck_pz

暂无签到数据
电梯直达楼主
发表于 2015-2-5 16:06:07 | 只看该作者 

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 
x
本帖最后由 chuck_pz 于 2015-2-5 17:00 编辑


最近在调试csr8670串口收发程序,为了方便大家使用,下面就介绍下怎么使用8670的串口。
介绍前,先吐槽下CSR,也许是以前没用过CSR芯片,尼玛资料太少了。
使用uart的步骤:
1.工程属性中将Transport改为raw ,还需确认mak中的Transport也为raw
CS-207483-UGP8ImplementingStreamsinBlueCoreApplications.pdf文档里面有介绍serial port类型就是raw。
2.在工程中加入以下代码
#define uart_RECV_BUF_SIZE                20
static TaskData uart;
static uint8 uartl_recv_buf[UART_RECV_BUF_SIZE];

void uart_init(void)
{
        uart.handler = uart_handler;
        
        StreamConfigure(VM_STREAM_UART_CONFIG, VM_STREAM_UART_THROUGHPUT);
        StreamUartConfigure(VM_UART_RATE_115K2,VM_UART_STOP_ONE,VM_UART_PARITY_NONE);        
        MessageSinkTask(StreamUartSink(), &uart);
}

void uart_send(uint8 *buf, uint16 len)
{
        uint16 offset;
        uint8 *dest;

        /*get the sink for the uart, panic if not available*/
        Sink sink = StreamUartSink();
        PanicNull(sink);

        /*claim space in the sink, getting the offset to it*/
        offset = SinkClaim(sink, len);
        if(offset == 0xFFFF) Panic(); /*space not available*/

        /*Map the sink into memory space*/
        dest = SinkMap(sink);
        (void) PanicNull(dest);

        /*copy the string into the claimed space*/
        memcpy(dest + offset, buf, len);

        /*Flush the data out to the uart*/
        PanicZero(SinkFlush(sink, len));
}

static void uart_recv(void)
{
        Source src;
        uint8 size, i;
        uint8 *buf;

        /*get the uart source header*/
        src = StreamUartSource();
        size = SourceSize(src);
        buf = (uint8 *)SourceMap(src);
        if(size > UART_RECV_BUF_SIZE)
        {
                SourceDrop(src, size);
                return;
        }
        
        memcpy(uart_recv_buf, buf, size);
        SourceDrop(src, size);
}
static void uart_handler(Task task, MessageId id, Message message)
{
        switch(id)
        {
                case MESSAGE_MORE_DATA:
                        uart_recv();
                        break;

                default:
                        break;
        }
}

3.在pstool中设置host_interface为VM access to the uart,实际根据需要去选择,这里我选VM access to the uart。
4.在pstool中设置uart configuration when under VM control为0880,这里我选择不需要流控制,实际根据需要去设置。

不过在实际测试中,只要接收的数据大于2,都会分包接收,搞得很蛋疼,也许是因为没有使用流控制的原因,所以实际使用中最好加入流控制,方便接收。但想想为什么没有流控制的时候会分包呢?开始以为message消息中会有接收成功的标志,不过测试了一番发现没有!!!猜想可能是csr 的OS原因引起的,估计是中断接收到串口数据了,会先发一个包过去告诉Task有数据过来,去接收,但并没有全部把数据发过来,这样做可能是想及时响应中断的缘故。大家知道中断程序尽量少做事,以免引起阻塞,于是将剩下的数据等到OS空闲的时候再发送过来告诉Task去读取,不过没法去求证,希望大神解答。
- 本文出自蓝牙音箱网,原文地址:http://www.btspeaker.cn/thread-5051-1-1.html

http://www.ppmy.cn/news/312886.html

相关文章

CSR8670的TWS模式的应用笔记

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程&#x…

CSR867x — CSR8670平台开发调试经验

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者:文化人 XX 联系方式: XX 版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声就最好了 XX 要说的话:作者水平有限,难免有…

CSR8670 — 说说什么是ANC、CVC、DSP降噪

1、CVC和DSP降噪: 消费者在选购蓝牙耳机时,总会听到商家在宣传耳机所具备的CVC、DSP降噪功能,不管听过N多商家这样的描述,可不少消费者依然不是很明白这两者之间的区别,针对这样的一个技术问题,我们今天来科…

CSR8675烧录工具-全系列CSR8675/86xx一拖多量产工具csr烧录软件(支持FLASH版本和ROM版本)

为了方便大家学习还有做一些快速烧录,分享一个CSR批量烧录工具。 一拖多量产工具(支持FLASH版本和ROM版本) 文章无法上传压缩附件请联系↓ ⭐⭐⭐技术支持联系QQ号:👇 543657671 下面就进行介绍吧 2021.01.18更新说明(v2.1.0版本&#xff…

CSR8670的A2DP与AVRCP的应用笔记

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程&#x…

csr8670--不能不知道的基本知识,长期记录

1.设备的状态 设备上电之后,系统会用相应的状态标志来描述设备的状态 Limbo:逻辑上关,物理上开,可以理解为手机安装了电池但是没有开机,这个状态下是不能处理任务的,所以上电之后首先要做的就是开机Conne…

CSR8670 开始

1.写在之前的话 现在又接触到了一款新的蓝牙芯片csr8670,这个芯片是一个双模的蓝牙芯片,我的目标是学习这款芯片,然后实现TWS功能。至于这个功能能不能实现,目前我对这个芯片的了解很少,所以,学习吧 2.csr…

CSR8670项目实战:BlueAgBatC蓝牙发射器BLE遥控器

为了方便大家学习,现与我爱蓝牙网联合推出【QCC300x/CSR867x/QCC30xx/QCC51xx开发板】。 ⭐⭐⭐⭐⭐【本项目为客户项目,欢迎商务合作】⭐⭐⭐⭐⭐ 技术交流QQ群号:1033022961 开发板会员QQ群号:725398389(凭订单号入…