McBSP(多通道缓冲串口)


McBSP(多通道缓冲串口)是德州仪器(TI)C55x系列DSP芯片中一种高度灵活的串行通信接口,可以理解为 DSP的“多功能数据收发站”


一、初识McBSP

1. McBSP是什么?

想象你有一个快递站(DSP),需要和外界收发包裹(数据)。McBSP就是这个快递站的“智能分拣系统”:

  • 多通道:支持多个独立的“快递通道”(比如同时收发语音、传感器数据、控制信号)。
  • 缓冲:自带临时仓库(缓冲区),包裹可以暂存,避免快递车(DSP)被频繁打扰。
  • 串口:通过“串行传输”一根一根传递包裹(数据位),节省线路成本。

2. McBSP有什么用?

核心作用:让DSP高效地与外部设备“对话”。比如:

  • 连接其他DSP:多个DSP协同工作(如音频处理阵列)。
  • 连接编解码器(Codec):比如将麦克风的模拟声音转为数字信号给DSP处理,或把DSP处理后的音乐送给扬声器播放。
  • 工业控制:连接传感器(温度、压力)或执行器(电机、LED屏)。
  • 通信系统:传输调制解调后的无线信号、网络数据等。

3. 如何利用McBSP?

使用McBSP就像配置快递站的规则,分三步:

步骤1:配置通信规则

通过DSP的寄存器设置参数:

  • 时钟:数据收发节奏(类似快递车的发车频率)。
  • 数据格式:每个“包裹”的大小(比如16位音频数据)。
  • 通道选择:启用哪些通道(比如只用通道0和1传语音)。
步骤2:数据收发
  • 发送数据:把数据写入McBSP的发送缓冲区,它会自动按规则串行发出。
  • 接收数据:McBSP接收外部数据后,存入接收缓冲区,DSP直接读取。
步骤3:高效处理
  • 用DMA辅助:让DMA控制器自动搬运数据,解放DSP核心去算数学(比如滤波、编码)。
  • 中断通知:当数据收/发完成时,McBSP触发中断,提醒DSP处理。

二、McBSP组成框图

  • McBSP 的结构框图可以分为数据通道和控制通道两部分,如图5-17所示。数据发送引 脚DX 负责数据的发送,数据接收引脚 DR
    负责数据的接收,发送时钟引脚CLKX 、接收时 钟引脚CLKR、发送帧同步引脚FSX 和接收帧同步引脚FSR 提供串行时钟和控制信号。
  • CPU 和 DMA 控制器通过外设总线与McBSP 进行通信。当发送数据时,CPU 和 DMA 将数据写入数据发送寄存器(DXR1,DXR2), 接着复制到发送移位寄存器(XSR1,XSR2), 通过发送移位寄存器输出至DX 引脚。同样,当接收数据时,DR 引脚上接收到的数据先移位到 接收移位寄存器 (RSR1,RSR2), 接着复制到接收缓冲寄存器(RBR1,RBR2),RBR再将数 据复制到数据接收寄存器(DRR1,DRR2) 中,并通知串口事件通知 CPU 或 DMA 读取数据。这种多级缓冲方式使片内数据通信和串行数据通信能够同时进行。

结构框图

三、McBSP的采样率发生器

  • McBSP 包括一个采样率发生器 SRG, 用于产生内部数据时钟CLKG 和内部帧同步信号 FSG, 如图5-18所示。CLKG控制DR 上数据的移位和DX 上的数据发送;FSG 控制DR 和 DX 上的帧同步。
  • 采样率发生器的时钟源可以由CPU 时钟或外部引脚 (CLKS,CLKX 或 CLKR) 提供,时钟源的选择可以通过引脚控制寄存器 PCR 中的 SCLKME 字段和采样率发生寄存器 SRGR2 中的CLKSM字段来确定,参见表5-18。输入信号的极性由 SRGR2 中的CLKSP 字 段、PCR 中 的CLKXP 字段或CLKRP 字段确定,参见表5-19。

图片来自汪春梅主编的《TMS320C55x DPS原理及应用》
我们可以将 采样率发生器(SRG) 的工作机制比作一个 “智能节奏控制中心”,它通过分频和同步,精确控制数据收发的时钟和帧同步信号。


1. 输出时钟 CLKG:分频与占空比

(1) 分频原理
  • 输入时钟 → 像“心脏跳动”,提供基础节奏(例如 100 MHz 的 CPU 时钟或外部时钟)。
  • 分频值 CLKGDV → 决定将输入时钟“减速”多少倍,生成 CLKG,分频值由采样率发生寄存器 SRGR1中的CLKGDV 字段确定:
    • 公式
      在这里插入图片描述

    • 范围:CLKGDV = 1~255 → 分频后最低频率为输入时钟的 1/256。

    • 极限:当 CLKGDV=1 时,CLKG 频率为输入时钟的一半(最高频率)。

(2) 占空比规则
  • CLKGDV 为奇数
    → CLKG 的 高电平和低电平时间相等(占空比 50%)。

    • 例如:CLKGDV=3 → 每 4 个输入时钟周期为一个 CLKG 周期,高低电平各占 2 周期。
  • CLKGDV 为偶数(2p)
    高电平比低电平多 1 个输入时钟周期

    • 例如:CLKGDV=4(即 p=2)→ 高电平占 3 周期,低电平占 2 周期。
    • 意义:适应某些外部设备对非对称时钟的需求。

2. 帧同步信号 FSG:分频与脉宽

FSX 和 FSR 是 McBSP 的同步指挥官,确保数据收发在正确的时间点开始。
核心功能:定义帧边界,对齐发送端和接收端的时序。

场景模拟:DSP 连接音频编解码器(Codec)
FSX(发送):DSP 通过 FSX 告诉 Codec:“我要开始发送音频数据了!” → Codec 开始接收。
FSR(接收):Codec 通过 FSR 告诉 DSP:“我要开始发送麦克风数据了!” → DSP 开始接收

(1) 帧同步分频(FPER)
  • 分频值 FPER → 决定 多少 CLKG 周期触发一次帧同步(FSG)
    • 公式
      在这里插入图片描述

    • 范围:FPER = 0~4095 → 最大帧周期为 4096 个 CLKG 周期。

    • 示例

      • 若 CLKG=1 MHz,FPER=99 → 每 100 μs 触发一次 FSG(即帧率 10 kHz)。
(2) 脉冲宽度(FWID)
  • FWID → 控制 FSG 脉冲的 持续时间
    • 公式

    • 范围:FWID = 0~255 → 最大脉宽为 256 个 CLKG 周期。

    • 示例

      • 若 CLKG=1 MHz,FWID=1 → 脉宽为 2 μs(高电平持续 2 个 CLKG 周期)。

3. 同步控制(GSYNC)

(1) 自由运行模式(GSYNC=0)
  • SRG 独立工作
    → CLKG 和 FSG 完全由分频参数(CLKGDV、FPER、FWID)控制,无视外部时钟
  • 应用场景
    • DSP 作为主设备,主动控制时序(如驱动麦克风、传感器)。
(2) 同步模式(GSYNC=1)
  • SRG 与外部时钟同步
    → CLKG 和 FSG 的相位会与外部输入时钟对齐,避免累积误差。
  • 应用场景
    • DSP 作为从设备,需与外部主设备(如 FPGA、其他 DSP)严格同步。

4. 配置示例:音频传输

目标:
  • 实现 48 kHz 采样率,16 位数据帧,CLKG 频率 1.536 MHz(48k × 32)。
步骤:
  1. CLKG 配置

    • 输入时钟 = CPU 时钟 24 MHz。
    • CLKGDV = 15 → CLKG 频率 = 24 MHz / (15+1) = 1.5 MHz。
    • CLKGDV 为奇数(15),占空比 50%。
  2. FSG 配置

    • FPER = 31 → 每 32 个 CLKG 周期触发一次 FSG(1.5 MHz / 32 = 46.875 kHz ≈ 48 kHz)。
    • FWID = 0 → 脉宽为 1 个 CLKG 周期(0.67 μs)。
  3. 同步模式

    • 若使用外部主设备时钟,设置 GSYNC=1,确保相位对齐。


附:参数配置速查表

功能寄存器字段公式/规则示例
CLKG 分频值SRGR1.CLKGDVCLKG 频率 = 输入频率 / (CLKGDV+1)CLKGDV=15 → 分频 16 倍
CLKG 占空比CLKGDV 奇偶性奇数为 50%,偶数为 (p+1)/pCLKGDV=4 → 高 3 周期,低 2 周期
FSG 周期(FPER)SRGR2.FPER周期 = (FPER+1) × CLKG 周期FPER=31 → 32 CLKG 周期
FSG 脉宽(FWID)SRGR1.FWID脉宽 = (FWID+1) × CLKG 周期FWID=1 → 2 CLKG 周期
同步模式SRGR2.GSYNC0=自由运行,1=同步外部时钟GSYNC=1 用于多设备级联

通过合理配置这些参数,可以让 McBSP 像精准的“节奏大师”,确保数据收发与外部设备完美同步! 🎶

四、McBSP多通道选择

  • McBSP 属于多通道串口,每个 McBSP 最多可有128个通道。如图5-17所示,其多通道 选择部分由多通道控制寄存器MCR接收使能寄存器 RCER发送使能寄存器XCER 组成。 其中,MCR 可以禁止或使能全部128个通道,RCER 和 XCER 可以分别禁止或使能某个接收 或发送通道。每个寄存器控制16个通道,因此128个通道共有8个通道使能寄存器。
  • 我们可以将 McBSP 的多通道选择机制 想象成一个 “多车道高速公路管理系统”,通过寄存器控制哪些车道(通道)允许车辆(数据)通行。

1. 接收多通道选择(接收方向:外部 → DSP)

(1) 控制寄存器与模式
  • MCR1 中的 RMCM 位:总开关,决定是否启用通道选择模式。
    • RMCM=0:所有 128 条接收车道 全开放(默认模式)。
    • RMCM=1:启用 通道选择模式,由 RCER 寄存器 精细控制每条车道。
(2) RCER 寄存器的作用
  • 每个 RCER 控制 16 个通道,共 8 个 RCER 覆盖 128 个通道。
    • 某位=1 → 允许该通道数据进入接收缓冲区(RBR → DRR)。
    • 某位=0 → 禁止该通道数据(数据仍会进入 RBR,但不会复制到 DRR,且不触发 DMA 事件)。

2. 发送多通道选择(发送方向:DSP → 外部)

(1) 控制寄存器与模式
  • MCR2 中的 XMCM 字段:决定发送通道的全局管理模式。
XMCM 值模式通俗解释
00b所有 128 个发送通道全开放所有车道无条件开放,无限制
01b由 XCER 选择允许的通道只开放 XCER 指定的车道
10b由 XCER 选择禁止的通道关闭 XCER 指定的车道,其余开放
11b发送通道与接收通道联动发送车道是否开放,取决于对应的接收车道是否开放
(2) XCER 寄存器的作用
  • 每个 XCER 控制 16 个通道,共 8 个 XCER 覆盖 128 个通道。
    • 某位=1 → 在 XMCM=01b 时允许该通道发送;在 XMCM=10b 时禁止该通道。
(3) 模式对比与示例
  • XMCM=01b(白名单模式):

    • 示例:仅允许通道 4~7 发送数据 → 设置 XCER0 = 0x00F0(二进制 0000 0000 1111 0000)。
  • XMCM=10b(黑名单模式):

    • 示例:禁止通道 8~15 发送数据 → 设置 XCER1 = 0x00FF(二进制 0000 0000 1111 1111)。
  • XMCM=11b(联动模式):

    • 发送通道 N 的开启条件:对应的接收通道 N 被 RCER 允许,且 XCER 未屏蔽该通道。
    • 应用:全双工通信中,仅当接收端允许某通道时,发送端才启用该通道(避免资源浪费)。

4. 关键配置步骤

(1) 接收通道配置
  1. 设置 MCR1.RMCM=1(启用通道选择模式)。
  2. 根据需要,配置 RCER0~RCER7,允许特定通道(某位=1)。
(2) 发送通道配置
  1. 设置 MCR2.XMCM 选择模式(如 01b 白名单)。
  2. 根据模式,配置 XCER0~XCER7
    • XMCM=01b:允许的通道对应位设为 1。
    • XMCM=10b:禁止的通道对应位设为 1。

5. 注意事项

  • 数据覆盖风险:若未及时读取 DRR 数据,新数据会覆盖旧数据。
    → 通过中断或 DMA 及时处理数据。
  • 通道冲突:避免同时启用过多通道超出 DSP 处理能力。
    → 根据实际需求精简通道数量。
  • 同步问题:在联动模式(XMCM=11b)下,需确保接收和发送通道配置一致。

六、McBSP寄存器

  • McBSP 的寄存器主要包括3部分:收发通道寄存器时钟和帧同步寄 存器多通道选择寄存器

1. 收发通道寄存器

  • 收发通道中CPU 或 DMA 控制器可以访问的寄存器包括数据接收寄存器DRR 和数据发 送寄存器 DXR 。由 于McBSP 支持8位、12位、16位、20位、24位或32位的字长,当字 长等于或小于16位,只使用DRR1/DXR1, 当字长超过16位, DRR1/DXR1 存放低16位, DRR2/DXR2 存放其余数据位。

2. 时钟和帧同步寄存器

  • 时钟和帧部分寄存器主要用于控制时钟和帧同步信号的产生、收发数据帧格式和串口 状态的检测等。
(1)串口控制寄存器
  • 每个 McBSP 有两个串口控制寄存器SPCR1 和 SPCR2, 用于控制McBSP 的工作模式、检测收发操作的状态和对McBSP 的各部分复位,如表5-20和表5-21所示。
    在这里插入图片描述
    在这里插入图片描述
(2)收发控制寄存器
  • 每个 McBSP 有两个接收控制寄存器 R(X)CR1 和 R(X)CR2, 以及两个发送控制寄存器 XCR1 和XCR2, 用于选择或使能数据延时和帧同步忽略等参数,如表5-22和表5-23所示。
    在这里插入图片描述
(3)采样率发生寄存器
  • 每个 McBSP 有两个采样率发生寄存器 SPGR1 和 SPGR2, 用于选择与时钟和帧同步有 关的参数,如表5-24和表5-25所示。
    在这里插入图片描述
(4)引脚控制寄存器
  • 每个 McBSP 有一个引脚控制寄存器 PCR, 用 于McBSP 省电模式控制和接收(发送) 帧同步模式的选择,如表5-26所示。

3. 多通道选择寄存器

  • 多通道选择寄存器包括多通道控制寄存器收发通道使能寄存器
    在这里插入图片描述
(1)通道控制寄存器
  • 每个McBSP 有两个多通道控制寄存器MCR1 和 MCR2, 用于使能所有通道和选择通道 等,如表5-27和5-28所示。
    在这里插入图片描述
    在这里插入图片描述
(2)收发通道使能寄存器
  • 每个 McBSP 有8个接收通道使能寄存器RCERA 到 RCERH 和8个发送通道使能寄存 器 XCERA 到XCERH, 如图5- 19和图5-20所示。
    在这里插入图片描述

七、McBSP使用代码示例

C55x DSP 的 McBSP 串口初始化,核心步骤包括:

  1. 声明配置结构体:定义 McBSP 寄存器参数。
  2. 打开 McBSP 端口:获取句柄并初始化。
  3. 配置寄存器:设置时钟、帧同步、数据格式等。
  4. 启动 McBSP:使能收发功能。
  5. 设置中断:接收数据就绪时触发中断。

二、关键代码解释

1. 声明 McBSP 句柄和配置结构体
MCBSP_Handle myhMcbsp;                   // 声明 McBSP 句柄
MCBSP_Config Config_MCBSP = {            // 定义 McBSP 配置结构体
    0x4000, /* SPCR1 */                  // 接收控制寄存器1
    0x0040, /* SPCR2 */                  // 发送控制寄存器2
    0x0020, /* RCR1  */                  // 接收参数寄存器1
    0x0025, /* RCR2  */                  // 接收参数寄存器2
    0x0000, /* XCR1  */                  // 发送参数寄存器1
    0x0004, /* XCR2  */                  // 发送参数寄存器2
    0x01CB, /* SRGR1 */                  // 采样率发生器寄存器1
    0x300E, /* SRGR2 */                  // 采样率发生器寄存器2
    0x0001, /* MCR1  */                  // 多通道控制寄存器1
    0x0001, /* MCR2  */                  // 多通道控制寄存器2
    0x0B03, /* PCR   */                  // 引脚控制寄存器
    0x0001, /* RCERA */                  // 接收通道使能寄存器A
    0x0000, 0x0000, 0x0000, 0x0000,     // 其他接收通道使能寄存器B~H(全禁用)
    0x0000, 0x0000, 0x0000, 0x0000,
    0x0001, /* XCERA */                  // 发送通道使能寄存器A
    0x0000, 0x0000, 0x0000, 0x0000,     // 其他发送通道使能寄存器B~H(全禁用)
    0x0000, 0x0000, 0x0000, 0x0000
};

2. McBSP 初始化和启动
// 打开 McBSP 端口0,复位状态
myhMcbsp = MCBSP_open(MCBSP_PORTO, MCBSP_OPEN_RESET);

// 应用配置
MCBSP_config(myhMcbsp, &Config_MCBSP);

// 脱离复位状态(启动采样率发生器)
MCBSP_RSET_H(myhMcbsp, SPCR2, 0x0040);

// 启动 McBSP:接收、发送、采样率发生器、帧同步
MCBSP_start(myhMcbsp, 
    MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 
    0x300u);

// 设置接收中断
IRQ_plug(IRQ_EVT_RINTO, &RINT_Isr);  // 注册中断服务函数
IRQ_enable(IRQ_EVT_RINTO);           // 使能中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值