dsp McBSP模块「建议收藏」

2022-08-31 17:39:55 浏览数 (1)

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

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

0 人点赞