
1. McBSP寄存器全景概览与核心设计思路在嵌入式DSP开发中串行通信接口是连接外部世界的关键桥梁。TMS320F2837xS系列DSP内置的多通道缓冲串行端口McBSP模块其强大之处在于它不仅仅是一个简单的串口而是一个高度可配置、支持复杂时序和多通道通信的硬件引擎。很多开发者初次接触McBSP时面对几十个寄存器往往感到无从下手觉得配置复杂。但如果你理解了其背后的设计哲学——“模块化、分层控制”一切就会清晰起来。McBSP的寄存器组可以看作一个精密的控制面板它被清晰地划分为几个功能区域数据搬运区DRR/DXR、核心控制区SPCR、数据格式与帧结构区RCR/XCR、时钟与同步信号生成区SRGR、引脚行为控制区PCR以及最体现其“多通道”特性的通道管理与使能区MCR和RCER/XCER系列。这种划分使得我们可以像搭积木一样从底层时钟开始逐步构建起完整的通信链路最后再精细化地管理每一个逻辑通道。理解这些寄存器关键在于抓住两条主线数据流和控制流。数据流关注数据从哪里来DR、到哪里去DX以及数据在缓冲区RBR/XSR和CPU/DMA可访问的寄存器DRR/DXR之间如何移动。控制流则关注时钟CLKX/CLKR、帧同步信号FSX/FSR如何产生或响应以及如何通过中断或DMA事件来高效地驱动数据搬运。多通道控制则是建立在稳定的数据流和控制流之上通过“分区”和“使能位映射”的机制实现对众多逻辑通道的开关控制这对于TDM时分复用通信尤为重要。接下来的内容我将带你深入每一个关键寄存器组不仅解释每个比特位的含义更会结合我实际在电机控制、音频编解码等项目中配置McBSP的经验告诉你为什么要这么配置以及配置不当会踩哪些坑。我们会从最基础的数据收发寄存器开始逐步深入到最复杂的多通道控制逻辑。2. 数据收发核心DRR与DXR寄存器详解与操作要点数据收发寄存器是CPU或DMA与McBSP模块交换数据的直接窗口。它们的设计直观地反映了McBSP支持宽数据字长的能力。2.1 数据接收寄存器DRR2, DRR1DRR1和DRR2共同组成一个32位的数据接收寄存器。当接收移位寄存器RSR收满一个数据字长度由RWDLEN配置可为8、12、16、20、24或32位后数据会被复制到接收缓冲寄存器RBR然后再从RBR复制到这对DRR寄存器中并置位RRDY标志通知CPU或DMA数据已就绪。DRR1 (Offset 1h): 存储接收数据的低16位位15-0。无论字长如何有效数据总是从LSB开始存放。例如对于8位数据数据存放在DRR1的低8位位7-0对于12位数据则存放在DRR1的低12位位11-0。DRR2 (Offset 0h): 存储接收数据的高16位位31-16。仅当配置的字长大于16位即20、24、32位时该寄存器才被使用。关键操作顺序与“坑点”当字长大于16位时CPU或DMA必须先读取DRR2再读取DRR1。这个顺序是硬性规定。读取DRR1的操作会触发RBR到DRR的下一次数据拷贝。如果先读DRR1DRR2中尚未读取的旧数据会被新数据覆盖导致数据错乱。这是新手最容易犯错的地方之一。在DMA配置中也需要将传输单元Burst设置为32位或者设置正确的读取顺序。数据对齐与符号扩展RJUST位SPCR1寄存器中的RJUST位位14-13决定了小于32位的数据在DRR中的存放方式。例如接收一个16位有符号数0xF0A0若RJUST01b右对齐并符号扩展则读出的DRR1为0xF0A0DRR2为0xFFFF。若RJUST10b左对齐并补零则DRR1为0xA000DRR2为0x000F。理解这一点对正确处理有符号数据至关重要。2.2 数据发送寄存器DXR2, DXR1DXR1和DXR2是发送数据寄存器其结构与DRR镜像对应。DXR1 (Offset 3h): 存放待发送数据的低16位。CPU或DMA将数据写入此寄存器。DXR2 (Offset 2h): 存放待发送数据的高16位。同样仅字长大于16位时使用。发送流程是当发送移位寄存器XSR为空且DXR中有新数据时DXR中的数据会被自动拷贝到XSR中并开始移位输出。同时XRDY标志置位表示DXR已准备好接收下一个数据。另一个关键顺序写入数据时如果字长大于16位必须先写DXR2再写DXR1。写入DXR1的动作会触发DXR到XSR的数据拷贝。如果顺序颠倒DXR2中的旧数据会被发送出去而新写入DXR1的数据则要等到下一次拷贝。在DMA发送时同样需要配置正确的写入顺序。实操心得在调试初期我强烈建议使用轮询方式检查XRDY/RRDY而非中断来确保数据收发的基本流程是通的。你可以写一个简单的回环测试配置为内部时钟和帧同步将DX引脚与DR引脚短接然后发送一个已知数据再读取接收寄存器验证。这能快速排除寄存器配置和引脚映射的基础问题。3. 控制与状态中枢SPCR1与SPCR2寄存器深度解析SPCRSerial Port Control Register是McBSP的“大脑”负责模块的全局控制、状态监控和中断管理。理解SPCR是驾驭McBSP的第一步。3.1 接收控制寄存器SPCR1SPCR1主要管理接收器、数字回环、时钟停止模式等。数字回环模式DLB, 位15这是极其有用的调试功能。当DLB1时模块内部将发送器的输出直接连接到接收器的输入。这意味着你可以在不连接外部硬件的情况下测试整个McBSP的发送和接收链路是否工作正常。发送的数据会立刻被自己接收。注意启用DLB后外部DR、FSR、CLKR引脚的功能可能会被内部信号覆盖具体取决于其他配置位。接收数据对齐RJUST, 位14-13如前所述控制小于32位数据在DRR中的对齐和填充方式。对于音频等有符号数据通常选择“右对齐并符号扩展”01b。时钟停止模式CLKSTP, 位12-11这是McBSP支持SPI协议的关键。在标准McBSP模式下时钟是连续的。而在SPI模式下时钟需要在每个数据字传输完成后停止。CLKSTP10b时钟停止模式无延迟。时钟在帧同步有效后立即开始。CLKSTP11b时钟停止模式有半周期延迟。时钟在帧同步有效后延迟半个时钟周期才开始这符合某些SPI从设备的时序要求。当使用SPI模式时还需配合CLKXP/CLKRP时钟极性和FSXP/FSRP帧同步极性来匹配主从设备的相位关系。接收中断模式RINTM, 位5-4决定什么事件会产生接收中断RINT。00b当RRDY从0变为1时即每收到一个完整字产生中断。这是最常用的模式用于常规数据接收。01b在多通道模式下每收完一个16通道块后产生中断。适用于批量处理。10b每次检测到接收帧同步脉冲时产生中断。可用于帧同步监控。11b当发生接收帧同步错误RSYNCERR1时产生中断。用于错误处理。接收器复位RRST, 位0这是接收器的总开关。任何对接收器的配置必须在RRST0复位状态下进行。配置完成后将RRST置1接收器才开始工作。在运行中将其清零会立即中止当前接收并清空缓冲区。3.2 发送控制寄存器SPCR2SPCR2管理发送、采样率发生器以及仿真模式下的行为。仿真模式控制FREE, SOFT, 位9-8当你在仿真器中遇到断点时这两个位决定时钟的行为。FREE1自由运行。遇到断点时McBSP时钟继续运行。FREE0, SOFT0立即停止。遇到断点时时钟立即停止。FREE0, SOFT1软停止。完成当前数据字的传输后停止时钟。建议在调试与实时性相关的通信时如与电机编码器通信设置为FREE1, SOFT0避免断点破坏通信时序导致外设失步。采样率发生器与帧同步逻辑复位GRST, FRST, 位6-7GRST采样率发生器复位。控制CLKG内部生成时钟的产生。同样配置SRGR寄存器前需确保GRST0。配置完成后置1CLKG开始输出。FRST帧同步发生器复位。控制FSG内部生成帧同步的产生。它依赖于GRST。只有当GRST1且FRST1时FSG才会按照SRGR中的FPER和FWID参数产生脉冲。初始化顺序很重要先配置SRGR寄存器 - 置位GRST -如果需要内部FSG再置位FRST。发送中断模式XINTM, 位5-4与RINTM类似控制发送中断XINT的产生条件。00b模式XRDY变化最常用。发送器复位XRST, 位0与RRST类似是发送器的总开关。配置发送相关寄存器XCR, PCR中FSXM/CLKXM等前必须确保XRST0。配置流程避坑指南 一个稳健的McBSP初始化流程应遵循以下顺序可以避免很多古怪的问题将SPCR1和SPCR2中的RRST0,XRST0,GRST0,FRST0让整个模块处于确定的重置状态。配置引脚复用寄存器将相关GPIO引脚功能切换到McBSP。配置PCR寄存器确定时钟和帧同步的信号来源内部/外部、极性。配置SRGR寄存器如果需要内部产生CLKG/FSG。配置RCR/XCR寄存器设置数据格式字长、帧长、相位、压扩、数据延迟。配置多通道相关寄存器MCR, RCER, XCER。使能模块先置位GRST如果需要内部时钟再置位FRST如果需要内部帧同步最后置位RRST和XRST。4. 数据格式与帧结构RCR/XCR寄存器配置实战RCR接收控制寄存器和XCR发送控制寄存器定义了数据的“包装方式”——帧结构。它们是实现与各种串行设备如音频编解码器、SPI Flash通信协议匹配的关键。4.1 帧与相位RPHASE/XPHASE一个“帧”由一次帧同步信号有效期内的所有数据字组成。McBSP支持单相位和双相位帧这提供了极大的灵活性。单相位帧(R/XPHASE0)一帧内所有数据字格式相同由RWDLEN1/XWDLEN1定义字长RFRLEN1/XFRLEN1定义字数。双相位帧(R/XPHASE1)一帧分为两个阶段Phase。Phase 1的字长和字数由RWDLEN1/XWDLEN1和RFRLEN1/XFRLEN1定义Phase 2的则由RWDLEN2/XWDLEN2和RFRLEN2/XFRLEN2独立定义。应用场景例如在I2S音频协议中一帧数据通常包含左声道数据和右声道数据。你可以配置为双相位帧Phase 1传输左声道字长16/24/32位Phase 2传输右声道。帧同步信号LRCK的每个上升沿或下降沿标志着一帧的开始。4.2 字长与帧长RWDLEN, RFRLEN字长 (RWDLEN/XWDLEN)可选8, 12, 16, 20, 24, 32位。注意McBSP硬件总是按32位边界操作DRR/DXR。对于小于32位的字长需要通过RJUST位来处理对齐。帧长 (RFRLEN/XFRLEN)定义每相包含的数据字数量范围1-128字。寄存器中写入的值是“字数-1”。例如需要一相包含16个字则写入15 (0xF)。4.3 数据延迟RDATDLY/XDATDLY这个参数配置了帧同步信号有效后到第一个数据位开始传输/接收之间的时钟延迟。可选0、1、2位时钟周期。0-bit delay帧同步信号有效的同一个时钟沿数据位就开始传输。这是最常见的模式。1-bit delay延迟1个时钟周期。某些设备如某些型号的AD/DA芯片需要此模式。2-bit delay延迟2个时钟周期。在SPI协议中这通常用于匹配从设备在时钟第二个边沿采样数据的时序。配置示例连接一个16位ADCSPI模式上升沿采样假设ADC工作在SPI模式0CPOL0 CPHA0时钟空闲为低数据在时钟上升沿采样在下降沿变化。CLKXP0 (CLKX上升沿发送数据)但McBSP作为主机发送数据是在CLKX的下降沿如果CLKXP0。为了匹配从机在上升沿采样我们需要让数据在时钟上升沿之前就稳定。设置XDATDLY1。这样在帧同步即片选信号有效后数据会在第一个时钟上升沿之前的一个下降沿就出现在数据线上并在接下来的上升沿被ADC稳定采样。同时设置CLKSTP11b有时钟延迟的停止模式CLKXP0FSXP0帧同步低有效。4.4 帧同步忽略RFIG/XFIG当当前帧的数据还未传输/接收完毕时如果又来了一个新的帧同步脉冲此位决定如何处理。R/XFIG0检测到意外的帧同步脉冲会视为错误中止当前传输并设置R/XSYNCERR标志。R/XFIG1忽略意外的帧同步脉冲继续当前传输。在连续传输模式例如传输一长段音频数据只有一个起始帧同步下通常设置为1。在需要每帧都同步的场合设置为0以检测同步丢失。5. 时钟与同步信号引擎SRGR寄存器配置精讲采样率发生器Sample Rate Generator是McBSP内部一个非常灵活的时钟和帧同步信号产生器。它可以从多个时钟源分频产生内部时钟CLKG并进一步产生内部帧同步FSG。5.1 时钟源选择与分频CLKSM, SCLKME, CLKGDV时钟路径的选择由PCR寄存器的SCLKME和SRGR2的CLKSM共同决定SCLKMECLKSM采样率发生器时钟源00保留01LSPCLK(低速外设时钟)10外部MCLKR引脚11外部MCLKX引脚LSPCLK是DSP内部的外设时钟由SYSCLK分频而来稳定可靠是最常用的内部时钟源。选定时钟源后通过CLKGDVSRGR1的位7-0进行分频得到内部工作时钟CLKG。CLKG频率 输入时钟频率 / (CLKGDV 1)CLKGDV是8位寄存器因此分频系数为1~256。计算实例假设LSPCLK 50 MHz我们需要产生一个2.048 MHz的串行位时钟常用于音频44.1kHz或48kHz采样率系统。CLKGDV (50 MHz / 2.048 MHz) - 1 ≈ 23.4。取整为23。 则实际CLKG频率 50 MHz / (231) 2.083 MHz误差在可接受范围内。如果需要更精确的时钟则需要调整LSPCLK或使用外部时钟源。5.2 帧同步信号生成FSGM, FPER, FWID帧同步信号FSG可以由内部采样率发生器产生FSXM1且FSGM1也可以由外部提供FSXM0或由DXR到XSR的拷贝事件产生FSXM1且FSGM0。当使用内部产生时FSGM1FWIDSRGR1的位15-8定义帧同步脉冲的宽度单位是CLKG周期。脉冲宽度 (FWID 1)个CLKG周期。例如FWID0则脉冲宽度为1个CLKG周期即一个高/低电平。FPERSRGR2的位11-0定义帧同步脉的周期即两个帧同步脉冲起始沿之间的CLKG周期数。周期 (FPER 1)个CLKG周期。这是一个12位寄存器因此周期范围为1~4096个CLKG周期。配置实例生成I2S所需的帧同步LRCKI2S的LRCK频率等于采样率。假设音频采样率Fs48kHz位时钟BCLK2.048MHz由上述CLKG产生。 则LRCK周期 1 / 48kHz ≈ 20.83 us。 CLKG周期 1 / 2.048MHz ≈ 0.488 us。 所需的FPER (20.83 us / 0.488 us) - 1 ≈ 41.7。取整为41。 此时实际的LRCK频率 2.048MHz / (411) ≈ 48.76 kHz略有误差。 设置FWID通常为0或(FPER/2)以得到50%占空比具体看协议要求。I2S的LRCK是50%占空比。5.3 时钟同步模式GSYNC当采样率发生器使用外部时钟源SCLKME1, CLKSM0/1时GSYNC位变得重要。GSYNC0CLKG自由运行FSG按FPER周期产生。GSYNC1CLKG与外部输入时钟MCLKR同步且FSG脉冲仅在检测到外部FSR引脚上的脉冲时才产生忽略内部FPER设置。这用于让从设备DSP的McBSP的时钟和帧同步严格跟随主设备。6. 多通道控制精髓MCR与通道使能寄存器实战策略这是McBSP区别于普通SPI/UART的核心功能使其能轻松处理TDM时分复用链路例如连接多个ADC/DAC或数字音频接口。6.1 通道与分区概念McBSP将128个逻辑时间片通道划分为8个块Block每个块包含16个连续的通道Block 0: Ch0-15, Block 1: Ch16-31, ..., Block 7: Ch112-127。多通道控制的核心思想是“分区”管理。有两种分区模式2分区模式(R/XMCME0)只使用A、B两个分区。每个分区占据一个块A分区占偶数块B分区占奇数块。通过R/XPABLK和R/XPBBLK指定具体块号。此模式下最多可管理32个通道两个块。8分区模式(R/XMCME1)使用A到H全部8个分区。每个分区固定对应一个块A:0, B:1, ..., H:7。此模式下可以管理全部128个通道。6.2 接收多通道模式RMCM, RMCMERMCM (MCR1.0)接收多通道选择使能。0所有128个通道默认使能。无法屏蔽。1启用多通道选择模式。只有被RCERx寄存器使能的通道才会被接收其他通道的数据被忽略。RMCME (MCR1.9)选择2分区或8分区模式如上所述。配置示例在128通道TDM流中只接收第5和第37通道的数据。设置RMCM1RMCME18分区模式。通道5在Block 0 (Ch0-15)属于分区A。通道37在Block 2 (Ch32-47)属于分区C。因此需要使能RCERA寄存器的bit5以及RCERC寄存器的bit537-325。代码示例McbspaRegs.MCR1.bit.RMCM 1; // 启用接收多通道选择 McbspaRegs.MCR1.bit.RMCME 1; // 8分区模式 McbspaRegs.RCERA.all 0x0020; // 使能通道5 (bit51) McbspaRegs.RCERC.all 0x0020; // 使能通道37 (bit51) // 其他所有RCERx寄存器保持为0屏蔽其他通道6.3 发送多通道模式XMCM发送模式更为复杂因为它引入了“使能”和“屏蔽”两个概念。XMCMMCR2[1:0]有4种模式XMCM00b所有通道使能且未屏蔽。数据会发送到所有通道。这是最简单的模式。XMCM01b所有通道默认禁用且被屏蔽。只有在对应XCERx寄存器中被选中的通道才会被使能并解除屏蔽从而发送数据。XMCM10b所有通道默认使能但被屏蔽。只有在对应XCERx寄存器中被选中的通道才会被解除屏蔽从而发送数据。未选中的通道虽然使能但输出被强制为高阻或默认值取决于配置。XMCM11b对称收发模式。这是最强大的模式常用于全双工TDM通信。在此模式下发送通道的使能状态由接收通道使能寄存器RCERx决定。而XCERx寄存器仅用作“屏蔽”控制。一个发送通道要正常工作必须满足两个条件a) 对应的接收通道被RCERx使能b) 对应的发送通道被XCERx解除屏蔽。对称收发模式应用场景在一个多路音频处理系统中DSP需要从TDM总线接收某些通道的音频数据处理后再发送回相同的通道。配置XMCM11b只需在RCERx中使能需要收发的通道并在XCERx中解除对应通道的屏蔽即可实现收发通道的自动配对简化了管理。6.4 分区块分配R/XPABLK, R/XPBBLK与当前块指示R/XCBLK在2分区模式下你需要手动指定A分区和B分区分别对应哪个块。R/XPABLK指定偶数块0,2,4,6给A分区R/XPBBLK指定奇数块1,3,5,7给B分区。R/XCBLK是只读状态位实时指示当前正在接收或发送的是哪个块0-7。这在动态切换分区块的“ping-pong”缓冲区应用中非常有用可以基于此状态位来准备下一个块的数据。动态分区切换技巧假设你需要处理超过32个通道但硬件只支持2分区模式32通道。你可以利用R/XCBLK的状态在A分区活跃时动态修改B分区指向的块当切换到B分区活跃时再修改A分区指向的块。这样就能在软件上实现对所有128个通道的轮询访问。但要注意切换时机必须在当前分区非活跃时进行通常是在一帧结束后的帧同步间隙。7. 引脚与时钟控制PCR寄存器配置及常见接口模式PCR寄存器直接控制McBSP外部引脚的行为和时钟特性是连接物理世界的接口。7.1 时钟与帧同步模式CLKXM, CLKRM, FSXM, FSRM这四个位决定了时钟和帧同步信号是输入还是输出是内部产生还是外部提供。CLKXM/CLKRM0对应的时钟引脚MCLKX/MCLKR为输入接收外部时钟。CLKXM/CLKRM1对应的时钟引脚为输出输出内部产生的时钟来自采样率发生器CLKG或内部CLKX。FSXM/FSRM0对应的帧同步引脚FSX/FSR为输入。FSXM/FSRM1对应的帧同步引脚为输出输出内部产生的帧同步来自采样率发生器FSG或DXR到XSR的拷贝事件。常见主从模式配置McBSP作为主设备产生时钟和帧同步McbspaRegs.PCR.bit.CLKXM 1; // CLKX输出主时钟 McbspaRegs.PCR.bit.FSXM 1; // FSX输出主帧同步 McbspaRegs.PCR.bit.CLKRM 0; // CLKR输入或置1输出但通常从设备反馈时钟 McbspaRegs.PCR.bit.FSRM 0; // FSR输入 McbspaRegs.SRGR2.bit.FSGM 1; // FSX由采样率发生器产生McBSP作为从设备接收外部时钟和帧同步McbspaRegs.PCR.bit.CLKXM 0; // CLKX输入从时钟 McbspaRegs.PCR.bit.FSXM 0; // FSX输入从帧同步 McbspaRegs.PCR.bit.CLKRM 0; // CLKR输入 McbspaRegs.PCR.bit.FSRM 0; // FSR输入 // 不需要配置SRGR的FSGM因为帧同步来自外部7.2 信号极性CLKXP, CLKRP, FSXP, FSRP这些位控制时钟和帧同步的有效极性。CLKXP/CLKRP0数据在时钟的上升沿采样对于接收是CLKR的上升沿对于发送是数据在CLKX的下降沿变化以便在上升沿被对方采样。这是常见设置。CLKXP/CLKRP1数据在时钟的下降沿采样。FSXP/FSRP0帧同步脉冲高有效。FSXP/FSRP1帧同步脉冲低有效。与SPI模式匹配SPI有4种模式由CPOL时钟极性和CPHA时钟相位决定。CPOL0时钟空闲为低。CPOL1时钟空闲为高。CPHA0数据在第一个时钟边沿采样。CPHA1数据在第二个时钟边沿采样。McBSP配置对应关系假设McBSP为主机SPI Mode 0 (CPOL0, CPHA0):CLKXP0,CLKSTP11b(有延迟的时钟停止模式),XDATDLY1。SPI Mode 1 (CPOL0, CPHA1):CLKXP0,CLKSTP10b(无延迟的时钟停止模式),XDATDLY0。SPI Mode 2 (CPOL1, CPHA0):CLKXP1,CLKSTP11b,XDATDLY1。SPI Mode 3 (CPOL1, CPHA1):CLKXP1,CLKSTP10b,XDATDLY0。7.3 采样率发生器时钟源选择SCLKME与SRGR2的CLKSM位配合如前所述选择LSPCLK或外部引脚作为采样率发生器的时钟源。8. 通道使能寄存器RCERx/XCERx的位映射与高级应用这是实现通道开关的最后一步。每个RCERx和XCERx都是16位寄存器每一位控制一个通道的使能或屏蔽。8.1 位与通道的映射关系映射关系取决于分区模式R/XMCME和分区块分配R/XPABLK,R/XPBBLK。在8分区模式(R/XMCME1)映射是固定的。RCERA/XCERA: 位0~15 对应 通道0~15 (Block 0)RCERB/XCERB: 位0~15 对应 通道16~31 (Block 1)... 以此类推直到RCERH/XCERH对应通道112~127。在2分区模式(R/XMCME0)映射是动态的由R/XPABLK和R/XPBBLK决定。假设RPABLK0(Block 0),RPBBLK1(Block 1)。则RCERA的位0~15对应Block 0的通道0~15。RCERB的位0~15对应Block 1的通道16~31。如果你改变RPABLK2那么RCERA就对应Block 2的通道32~47。8.2 对称收发模式下的协同工作当XMCM11b时发送通道的使能由接收通道决定RCERx而XCERx仅作为屏蔽。工作流程系统根据RCERx的值决定接收哪些通道。对于发送只有那些在RCERx中被使能并且在对应XCERx中也被使能解除屏蔽的通道才会被实际发送。如果某个通道在RCERx中使能但在XCERx中被屏蔽则该通道的发送被禁止DX引脚可能为高阻或默认值。这种设计非常适合回声消除、会议电话等应用DSP只对它“听到”接收的通道进行处理并“回应”发送。8.3 实战配置一个复杂的TDM音频路由示例需求一个128通道的TDM输入流DSP需要接收通道 12, 45, 78 的音频数据。将处理后的数据发送到通道 12, 45, 以及一个新的通道 99。配置步骤基础通信参数配置RCR/XCR、SRGR等建立正确的TDM时序字长、帧长、时钟。假设字长32位单相位帧帧长128。接收配置McbspaRegs.MCR1.bit.RMCM 1; // 启用接收多通道选择 McbspaRegs.MCR1.bit.RMCME 1; // 8分区模式管理全部128通道 McbspaRegs.RCERA.all 0x1000; // 使能通道12 (Block 0, bit12) McbspaRegs.RCERC.all 0x2000; // 使能通道45 (45-3213, Block 2, bit13) McbspaRegs.RCERF.all 0x0040; // 使能通道78 (78-6414, Block 4? 等等78/164余14Block 4对应分区E) // 注意通道78在Block 4 (64-79)对应分区E。所以是RCERE。 // 更正 McbspaRegs.RCERE.all 0x4000; // 使能通道78 (78-6414, bit14)发送配置McbspaRegs.MCR2.bit.XMCM 0x3; // 对称收发模式 (11b) McbspaRegs.MCR2.bit.XMCME 1; // 8分区模式 // 发送使能由RCERx决定。我们需要发送通道12, 45, 99。 // 通道12和45已经在RCERx中使能。 // 通道99在Block 6 (96-111)对应分区G。需要在RCERG中使能。 McbspaRegs.RCERG.all 0x0008; // 使能通道99 (99-963, bit3) // 现在RCERx使能了12,45,78,99四个接收通道。 // 但发送只需要12,45,99。所以我们需要用XCERx来屏蔽掉通道78的发送。 // 通道78在分区E (RCERE)所以对应XCERE。 McbspaRegs.XCERA.all 0xFFFF; // 解除分区A所有通道屏蔽包含ch12 McbspaRegs.XCERC.all 0xFFFF; // 解除分区C所有通道屏蔽包含ch45 McbspaRegs.XCERE.all 0xBFFF; // 屏蔽通道78 (bit140)其他位为1 McbspaRegs.XCERG.all 0xFFFF; // 解除分区G所有通道屏蔽包含ch99 // 其他分区的XCERx寄存器保持为0全部屏蔽。通过以上配置DSP实现了精确的通道路由只接收3个通道的数据并向其中2个通道及1个新通道发送数据。这种精细的控制能力正是McBSP在复杂通信系统中无可替代的价值所在。