前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dsp McBSP模块「建议收藏」

dsp McBSP模块「建议收藏」

作者头像
全栈程序员站长
发布2022-08-31 17:39:55
1.7K0
发布2022-08-31 17:39:55
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

McBSP,是多通道缓冲串行接口。在DSP嵌入式系统中,常常用来连接音频编码解码芯片,串行AD/DA器件等。具有如下特性:

全双工;

两个数据缓冲寄存器;

独立的发送和接收帧和时钟;

多达129通道的发送和接收等等。

McBSP结构图如下:

首先对引脚进行介绍:

CLKR:接收时钟

CLKX:发送时钟

CLKS:外部时钟源

DR“:串行数据接收

DX:串行数据发送

FSR:接收同步帧

FSX:发送同步帧

注意到接收部分是三重缓冲,发送部分是两重缓冲。

接下来介绍它的相关寄存器:

DRR:数据接收寄存器,存放接收到的数据。

DXR:数据发送寄存器,存放将要发送的数据。

SPCR:串行接口控制寄存器,配置串行接口,包括状态控制字位,可得知工作状态,分为SPCR1和SPCR2,分别是收和发。

RCR:接收控制寄存器,设置接收操作的参数。

XCR:发送控制寄存器,设置发送操作的参数。

SRGR:设置波特率相关。

MCR:多通道控制寄存器,设置多通道选择模式。也是分收、发两个。

RCER:接收通道使能寄存器,分A/B区,使能奇偶组的16个通道可选。

XCER:发送通道使能寄存器,同上。

PCR:引脚控制寄存器,配置串口作用,和SPCR配合。

这里有必要弄懂什么是多通道?当初是纠结了很久。

这个多通道不是AD采样器那个多通道,而是类似于时分复用的数据流,强调时隙的概念。128个发送通道和128个接收通道,一帧数据最多128个通道,也即128个数据单元,一个通道可以移近或移出一个串行字。那么这一帧里面还分八个子帧,每个子帧16个通道,这样总共就是128个通道。这八个子帧还分两区,偶数为A区,奇数为B区。通过使能寄存器确定每个区16个通道哪些要使用。

关于编程架构:

1、首先创建结构体,配置:

MCBSP_Config myMCBSP = {

MCBSP_SPCR1_RMK(

),

MCBSP_SPCR2_RMK(

),

}

2、创建句柄并配置:

hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

MCBSP_config(hMcbsp,&myMCBSP);

delay(); //注意寄存器配置完成后需要延时,以便内同步

注意它和EDMA一样,配置需要句柄。

3、各种使能:

MCBSP_enableSrgr(hMcbsp);

delay(); //内同步

MCBSP_enableRcv(hMcbsp);

MCBSP_enableXmt(hMcbsp);

..

有些资料是用另外一个函数搞定:

MCBSP_start(hMcbsp,MCBSP_RCV_START | MCBSP_XMIT_START,0);

4、收发的实现

MCBSP_read16(hMcbsp);

MCBSP_write16(hMcbsp,buff);

里面具体的代码就是对DRR或者DXR进行赋值和返回。

实际的收发有两种实现方法,一种是查询SPCR状态位,一种是中断,中断实时性高,建议使用。有对应的中断ID。

rcvEventID = MCBSP_getRcvEventId(hMcbsp);

再来个plug函数就能绑定中断程序。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143589.html原文链接:https://javaforall.cn

如果您是在找激活码,但输入激活码后激活失败,最新激活码地址:https://javaforall.cn/127239.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档