1. 项目概述:深入理解DSP的启动“基因”
在嵌入式系统开发,尤其是基于德州仪器(TI)C6000系列DSP的项目中,最让人“头疼”但又至关重要的环节,往往不是算法实现,而是系统上电后那“第一脚”怎么迈出去。这个“第一脚”,就是启动配置。很多工程师都遇到过这样的场景:精心编写的代码,烧录进去后DSP毫无反应,或者运行得莫名其妙,最后排查下来,八成是启动模式、时钟或者引脚复用没配对。这就像给一台复杂的机器上电,如果初始的齿轮没咬合对,后面所有的精妙传动都无从谈起。
TMS320C6421作为一款高性能定点DSP,其启动与配置机制设计得非常精细和灵活,但也因此带来了相当的复杂性。它不像一些简单的MCU,可能只有一两种启动方式。C6421的启动“基因”由复位瞬间锁存的一系列硬件引脚状态决定,这些状态被固化在BOOTCFG寄存器中,成为引导加载程序(RBL, ROM Bootloader)的行动蓝图。理解这套机制,不仅仅是看懂几个寄存器位域,更是掌握如何让DSP从“沉睡”中按照你的意愿“苏醒”并正确奔跑的关键。
本文将围绕C6421的启动模式与系统配置寄存器展开,我会结合多年的实际调测经验,不仅解读手册中的寄存器定义,更会深入剖析其背后的设计逻辑、实操中的配置要点以及那些手册里不会明说,但能让你少走弯路的“坑”。无论你是正在评估C6421,还是正在调试一块复杂的信号处理板卡,这篇文章都将为你提供从原理到实操的完整参考。
2. 启动模式(Boot Mode)的深度解析与设计考量
启动模式是DSP上电后执行的第一个程序(即引导加载程序)从哪里、以何种方式获取后续应用程序代码的约定。C6421支持多种启动源,其选择完全由复位时BOOTMODE[3:0]这四个引脚的电平状态决定。
2.1 启动模式分类与硬件连接
C6421的启动模式大致可分为几类:非主机引导(如EMIFA NOR Flash、SPI、I2C等)、主机引导(HPI Boot)以及无引导(No Boot)。BOOTMODE[3:0]的具体编码决定了具体模式。
1. 非主机引导模式(如 EMIFA 8-bit ROM Boot)这是最常用的模式之一。例如,当BOOTMODE[3:0] = 0110b时,设备将从EMIFA(外部存储器接口)的CS2空间起始地址0x42000000开始读取引导表(Boot Table)。这意味着你的应用程序代码需要预先烧录到挂在EMIFA CS2片选上的NOR Flash或ROM中。
实操心得:硬件设计时,务必确保
BOOTMODE[3:0]引脚通过上下拉电阻设置为正确的电平。这是一个硬件动作,一旦电路板做好就无法通过软件更改。我遇到过因为电阻未焊接或阻值错误,导致实际锁存的模式与预期不符,DSP根本无法启动的情况。建议在PCB上为这些配置引脚预留测试点,方便调试时测量。
2. 主机引导模式(HPI Boot)当BOOTMODE[3:0] = 1010b时,DSP进入HPI引导模式。此时,DSP内核会从内部ROM(地址0x00100000)启动一个小的引导程序,然后停下来等待外部主机(如ARM、FPGA或另一个DSP)通过HPI接口来加载真正的应用程序代码到DSP的内存中,并最终告诉DSP从何处开始执行。
核心价值:这种模式在异构多处理器系统中极为有用。例如,由ARM作为主控制器负责系统管理和加载DSP固件。DSP的代码可以存放在ARM侧的文件系统甚至网络中,提供了极大的灵活性。
3. 无引导模式(No Boot)当BOOTMODE[3:0] = 1111b时,DSP不执行任何引导流程。CPU直接从DSPBOOTADDR寄存器指定的地址开始取指执行。这个地址默认是0x00100000(内部引导ROM)或0x42000000(EMIFA CS2),取决于其他配置。这种模式通常用于仿真器直接加载代码到RAM中调试,或者在一些极其定制化的引导流程中使用。
2.2 FASTBOOT与PLLMS:启动速度的权衡
FASTBOOT和PLLMS[2:0]是与启动速度密切相关的配置。
FASTBOOT引脚:当此引脚在复位时为高电平时,使能“快速启动”模式。在快速启动模式下,引导加载程序会在加载用户代码之前,先根据PLLMS[2:0]的配置将芯片的内核时钟(SYSCLK1)提升到一个较高的频率。反之,如果FASTBOOT=0,则DSP在整个引导过程中都运行在较低的输入时钟(CLKIN)频率下。
PLLMS[2:0]引脚:仅在FASTBOOT=1时有效。它选择了一个“快速启动PLL倍频器”,这是一个预设的、较保守的倍频系数(例如x22, x24等),目的是在提升启动速度的同时,保证PLL锁相环在各种工艺角和温度下都能快速、稳定地锁定。
为什么需要FASTBOOT?想象一下从慢速的SPI Flash(比如时钟只有10MHz)加载一个几百KB的程序。如果DSP内核也运行在几十MHz的频率下,加载过程会非常缓慢。启用FASTBOOT后,引导程序先快速将内核时钟升至几百MHz,然后再去执行SPI读取操作,利用高频内核加速数据搬移,可以显著缩短启动时间。
计算示例与时钟树理解: 手册中给出了一个经典例子:若BOOTMODE[3:0]=0110b(EMIFA 8-bit),FASTBOOT=1,MXI/CLKIN=30 MHz,PLLMS[2:0]=100b。
- 查表得
PLLMS=100b对应PLL倍频系数为22,后分频器为/2。 - 因此,系统时钟1(SYSCLK1,即CPU/EDMA时钟) = CLKIN x 22 / 2 = 30 MHz x 11 = 330 MHz。
- 系统时钟3(SYSCLK3,外设时钟,如HPI、SPI等)通常由SYSCLK1分频而来,例如分频比为6,则 SYSCLK3 = 330 MHz / 6 = 55 MHz。
- 如果此时是通过SPI引导,SPI模块的时钟可能进一步由SYSCLK3分频(例如/3),得到SPI串行时钟 = 55 MHz / 3 ≈ 18.3 MHz。
注意事项:
FASTBOOT提升的是引导加载程序执行阶段的时钟。用户应用程序在启动后,通常需要根据系统需求,重新配置PLL控制器(PLLC1)以达到最终的工作频率。FASTBOOT的PLL配置只是一个临时的、安全的中间状态。
2.3 LENDIAN:字节序的“胎记”
LENDIAN引脚在复位时锁存,决定了DSP内核的字节序(Endianness)模式:0为大端(Big-Endian),1为小端(Little-Endian)。这个配置被写入BOOTCFG.LENDIAN字段,且软件不可更改。
为什么如此重要?字节序决定了数据(尤其是多字节数据如int32、float)在内存中的存储格式。如果DSP被配置为大端,而你的编译器工具链默认生成小端代码,或者你从外部设备(如网络、特定格式的Flash)读取的数据字节序不匹配,将会导致数据解析完全错误。这个配置是芯片的“胎记”,必须在硬件设计阶段就根据整个系统的数据流约定确定下来,并在软件编译时指定对应的字节序选项。
3. 核心配置寄存器详解与软件交互
复位锁存的硬件配置信息,最终都汇聚到系统模块(System Module)的寄存器中,供软件查询和后续流程使用。其中,BOOTCFG、BOOTCMPLT和DSPBOOTADDR是启动流程中的三个核心寄存器。
3.1 BOOTCFG寄存器:硬件配置的“快照”
BOOTCFG寄存器位于地址0x01C4 0014,是一个只读寄存器。它的每一位都对应一个在复位上升沿被锁存的配置引脚状态。
寄存器位域精讲:
| 位域 | 名称 | 描述与实操意义 |
|---|---|---|
| 31:21 | RESERVED | 保留位。写操作无效。 |
| 20 | LENDIAN | 设备字节序。0=大端,1=小端。直接反映LENDIAN引脚状态。软件可读取此位来确定当前字节序,并据此调整数据访问逻辑。 |
| 19 | FASTBOOT | 快速启动使能。0=禁用,1=使能。反映FASTBOOT引脚状态。引导代码据此决定是否在引导前配置PLL。 |
| 18:15 | RESERVED | 保留位。 |
| 14:12 | PLLMS | 快速启动PLL倍频选择。反映PLLMS[2:0]引脚状态。仅在FASTBOOT=1时有意义,用于查询当前使用的快速启动倍频系数。 |
| 11 | RSV | 保留位。 |
| 10:8 | DAEM | PINMUX0.AEM的默认值。反映AEM[2:0]引脚状态。它决定了EMIFA引脚复用模式的初始状态,但软件后续可以通过写PINMUX0.AEM来改变。 |
| 7:4 | RESERVED | 保留位。 |
| 3:0 | BOOTMODE | 启动模式。反映BOOTMODE[3:0]引脚状态。这是引导代码判断从何处加载程序的根本依据。 |
重要提示:
BOOTCFG是只读的,它是一面镜子,照出的是硬件电路的“原始设定”。软件无法通过修改它来改变启动行为。任何启动模式的更改,必须通过重新设计硬件(改变上下拉电阻)或触发全局复位来实现。
3.2 BOOTCMPLT与DSPBOOTADDR:主机引导的“握手协议”
这两个寄存器是主机引导(HPI Boot)模式下的关键通信枢纽。
DSPBOOTADDR寄存器(0x01C4 0008): 这是一个可读写的寄存器。在非主机引导模式下,它的值由硬件根据BOOTMODE自动设置为0x00100000(内部ROM)或0x42000000(EMIFA CS2),软件通常无需关心。 在主机引导(HPI Boot)模式下,其作用至关重要:
- 复位后,硬件将其默认设置为
0x00100000,DSP CPU随即从该地址(内部引导ROM)开始执行引导代码。 - 引导代码检查到是HPI引导模式后,会初始化HPI接口,然后进入等待循环。
- 此时,外部主机通过HPI接口,将应用程序代码加载到DSP的任意内存(如DDR2、内部RAM)中。
- 加载完成后,外部主机必须做两件事,顺序不能错: a.第一步:将DSP CPU的程序入口地址写入
DSPBOOTADDR寄存器。例如,如果你的代码链接后起始地址是0x80000000(可能是DDR2的地址),主机就向DSPBOOTADDR写入0x80000000。 b.第二步:向BOOTCMPLT寄存器的BC(Boot Complete)位写入1。
BOOTCMPLT寄存器(0x01C4 000C): 这个寄存器有两个主要功能:错误记录和启动完成标志。
ERR[19:16](错误状态位):如果引导加载程序在执行过程中遇到错误(如:在指定的EMIFA地址读不到有效的引导表头),它会将错误代码记录在此。软件可以读取此字段来诊断启动失败原因。BC[0](启动完成位):这是主机引导的“发令枪”。当DSP引导代码检测到BC位被主机写为1后,它会立即让CPU跳转到DSPBOOTADDR寄存器所指向的地址去执行。至此,主机引导流程完成。
主机引导的软件流程伪代码示例(主机侧):
// 假设已通过HPI接口与DSP建立连接 // 1. 将DSP应用程序二进制文件加载到DSP内存(如 0x80000000 开始的区域) load_dsp_binary_via_hpi(0x80000000, dsp_binary, size); // 2. 将DSP程序入口地址写入 DSPBOOTADDR 寄存器 // 注意:HPI是32位访问,地址0x01C4 0008是DSP系统模块的地址,主机通过HPI访问的是DSP的地址空间。 write_hpi_32bit(0x01C4 0008, 0x80000000); // 设置跳转地址 // 3. 设置启动完成标志,通知DSP开始执行 // 先读取当前值,再只修改BC位,避免影响ERR位(虽然此时通常为0) uint32_t bootcmplt_val = read_hpi_32bit(0x01C4 000C); bootcmplt_val |= 0x00000001; // 设置BC=1 write_hpi_32bit(0x01C4 000C, bootcmplt_val); // 此后,DSP CPU将从0x80000000开始执行用户代码避坑指南:这个“先写地址,后写完成标志”的顺序绝对不能颠倒。如果先写
BC=1,DSP可能会立刻跳转到一个未初始化的DSPBOOTADDR地址(默认是ROM地址),导致行为不可预测。
4. 复位后的关键系统配置详解
复位之后,除了启动流程,DSP还有许多全局性的配置需要确定或初始化。这些配置一部分由硬件引脚决定,另一部分则需要软件在初始化阶段谨慎设置。
4.1 设备与外围配置的硬件锁存
除了之前提到的BOOTMODE、FASTBOOT等,复位时还有两组重要的配置引脚被锁存:
AEM[2:0] - EMIFA引脚输出模式选择: 这组引脚不影响EMIFA控制器内部的操作,而是决定EMIFA相关的引脚(地址线、数据线、控制线)如何复用到芯片物理引脚上。C6421的EMIFA可以配置为多种引脚输出模式(Pinout Mode),例如异步8位模式(常用于NOR Flash)、NAND Flash模式等。AEM[2:0]的值被锁存到BOOTCFG.DAEM,并作为PINMUX0.AEM寄存器的默认值。软件在启动后可以通过修改PINMUX0.AEM来切换模式,但必须在EMIFA模块处于复位(SwRstDisable)状态下进行。
LENDIAN - 字节序:如前所述,一次性确定。
这些引脚的状态全部被捕获在BOOTCFG寄存器中,软件可以通过读取该寄存器来确认硬件的实际配置,这对于编写可移植的启动代码或诊断程序非常有用。
4.2 复位后的软件配置要点
当硬件锁存的配置生效,引导加载程序或用户应用程序开始运行后,还需要对系统进行一系列软件配置。
4.2.1 切换中央资源(SCR)总线优先级C6421内部有多条总线(如C64x+ CPU、EDMA、HPI、EMAC等),当多个主设备同时访问从设备(如DDR2控制器)时,需要仲裁。MSTPRI0和MSTPRI1寄存器用于配置各主设备的默认优先级。
| 主设备 | 配置寄存器 | 默认优先级 | 说明 |
|---|---|---|---|
| C64x+ (CFG) | MSTPRI0.C64X+_CFGP | 1 | CPU的配置端口,优先级较高。 |
| EMAC | MSTPRI1.EMACP | 4 | 网络端口。 |
| VLYNQ | MSTPRI1.VLYNQP | 4 | 串行通信端口。 |
| HPI | MSTPRI1.HPIP | 4 | 主机端口。 |
| EDMA TC0/1/2 | EDMACC.QUEPRI | 0 | EDMA传输控制器,通常设为最高优先级以保证实时性。 |
| C64x+ (DMA) | MDMAARBE.PRI | 7 | CPU的DMA端口,默认优先级最低。 |
性能调优建议:在数据流密集的应用中(如视频处理、SDR),合理调整总线优先级能显著提升系统吞吐量。例如,如果EDMA负责将摄像头数据搬入DDR,而CPU负责处理,则应将EDMA TC的优先级设为最高(0),CPU DMA端口优先级可以调高,而HPI、EMAC等后台通信模块的优先级可以适当调低。调整应在系统初始化早期、各主设备开始大量传输前完成。
4.2.2 外设控制寄存器系统模块还提供了一些全局性的外设控制位。
- HPICTL寄存器:主要控制HPI的突发写超时值(
TIMOUT)。当主机进行HPI突发写入时,如果间隔时间超过这个超时值,HPI的写FIFO会被清空。一般使用默认值即可,除非在特定主机交互时序下遇到问题。 - TIMERCTL寄存器:
WDRST位:决定看门狗定时器(Timer2)超时事件是否触发最大复位(Max Reset)。对于需要高可靠性的系统,务必使能此功能(默认即为1)。TINP0SEL位:选择Timer0的外部输入时钟源。可以选择直接来自TINP0L引脚,或者来自该引脚6分频后的信号。这为需要特定时钟频率的定时应用提供了灵活性。
- EDMATCCFG寄存器:配置三个EDMA传输控制器(TC0, TC1, TC2)的默认突发大小(DBS)。这个设置影响了EDMA进行数据传输时的一次操作粒度。
- TC0:默认16字节,适用于短突发、高实时性需求的外设(如McBSP, McASP)。
- TC1:默认32字节,适用于高吞吐量的大块数据传输。
- TC2:默认64字节,适用于其他杂项传输。
注意:这里的DBS是“默认”值,在具体配置EDMA传输参数(PaRAM)时,可以针对每个通道单独设置传输单元大小,其优先级高于此处的默认值。此寄存器应在EDMA控制器初始化前配置,且配置后对应的TC未被使用时修改。
5. 引脚复用配置的实战策略
C6421为了在有限的引脚数量下支持丰富的外设,采用了高度灵活的引脚复用机制。这既是强大的功能,也是容易配置出错的地方。
5.1 引脚复用框架与复位默认状态
芯片的引脚被划分为多个复用块(Pin Mux Block),如EMIFA块、主机块(HPI/VLYNQ/EMAC)、串口块(McBSP0/McASP0)等。每个块的功能由PINMUX0和PINMUX1寄存器控制。
复位时的默认状态由AEM[2:0]和RMII等配置引脚决定。例如:
- 如果
AEM[2:0]=010b且RMII=0,则EMIFA块默认为“8-bit EMIFA (Async) Pinout Mode 2”,并预留出一些GPIO。 - 如果
AEM[2:0]=000b且RMII=1,则EMIFA块默认为“EMAC(RMII)”模式,即相关引脚用于以太网RMII接口,而不是EMIFA。
软件配置时机与原则:
- 先复位,后配置:在改变任何外设的引脚功能前,必须确保该外设模块处于复位状态(通过Power/Sleep Controller - PSC设置)。例如,想把某些引脚从GPIO切换到McBSP0,要先确保McBSP0模块在PSC中是
SwRstDisable状态。 - 配置完,再使能:配置好
PINMUX寄存器后,再通过PSC将对应外设模块使能(Enable状态)。 - 避免冲突:同一时刻,一个物理引脚只能有一种功能。
PINMUX0和PINMUX1的配置必须保证全局一致。例如,选择了EMAC(MII)模式(HOSTBK=011b),就不能同时选择EMAC(RMII)模式(PINMUX0.RMII=1),二者是互斥的。
5.2 PINMUX0与PINMUX1寄存器关键位解析
PINMUX0寄存器:主要控制EMIFA块的复用。
AEM[2:0]:这是最重要的字段,选择EMIFA的引脚输出模式。它必须与硬件AEM[2:0]引脚设定的默认模式兼容或一致。软件可以修改它来切换模式。RMII:决定EMIFA块中是否包含RMII以太网引脚。如果使能,则会占用8个原本可能是EMIFA地址/数据或GPIO的引脚用作RMII接口。CS3SEL,CS4SEL,CS5SEL:精细控制EMIFA的片选信号3/4/5是作为EMIFA功能还是GPIO(或RMII)功能。这为灵活分配片选信号提供了可能。
PINMUX1寄存器:控制其他所有复用块。
HOSTBK[2:0]:控制主机块的27个引脚用作GPIO、HPI、VLYNQ还是EMAC(MII)。这是配置HPI或网络接口的关键。SPBK0[1:0]和SPBK1[1:0]:分别控制串口子块0和1。SPBK0可选择GPIO、McBSP0或McASP0接收功能;SPBK1可选择GPIO或McASP0发送功能。要使用完整的McASP0(同时需要收发),需要同时配置SPBK0和SPBK1。TIM0BK,TIM1BK,PWM1BK,CKOBK,UR0FCBK,UR0DBK:分别控制定时器、PWM、时钟输出、UART等外设与GPIO的复用。
5.3 典型配置案例:配置UART0和McBSP0
假设我们需要使用UART0进行调试打印,并使用McBSP0连接一个音频编解码器。
步骤1:查阅引脚手册,找到UART0和McBSP0对应的引脚及其复用选项。
- UART0:数据引脚
URXD0/UTXD0属于“UART0 Data Block”,流控引脚UCTS0/URTS0属于“UART0 Flow Control Block”。它们默认可能是GPIO。 - McBSP0:主要引脚(
CLKX0,FSX0,DX0,CLKR0,FSR0,DR0)属于“Serial Port Sub-Block 0”。外部时钟CLKS0在“Timer0 Block”中。
步骤2:在软件初始化中配置(假设外设已通过PSC保持复位状态)
#include // 配置UART0数据引脚 // 将PINMUX1的UR0DBK位设置为1,选择UART0数据模式 CSL_FINST(CSL_SYS_PINMUX1, SYS_PINMUX1_UR0DBK, UART0); // 配置UART0流控引脚(如果需要) // 将PINMUX1的UR0FCBK位设置为01,选择UART0流控模式 CSL_FINST(CSL_SYS_PINMUX1, SYS_PINMUX1_UR0FCBK, UART0_FLOW_CTRL); // 配置McBSP0主要引脚 // 将PINMUX1的SPBK0位设置为01,选择McBSP0模式 CSL_FINST(CSL_SYS_PINMUX1, SYS_PINMUX1_SPBK0, MCBSP0); // 配置McBSP0外部时钟引脚(如果需要) // 将PINMUX1的TIM0BK位设置为11,选择CLKS0功能 CSL_FINST(CSL_SYS_PINMUX1, SYS_PINMUX1_TIM0BK, MCBSP0_CLKS); // 最后,通过PSC使能UART0和McBSP0模块再次强调:以上
PINMUX寄存器的修改,必须在对应外设模块(UART0, McBSP0)处于复位状态时进行。修改完成后,再释放外设复位,使其进入正常工作状态。
6. 常见问题排查与调试心得
在实际项目中,启动和配置问题层出不穷。下面是一些典型问题及排查思路。
6.1 DSP上电后无任何反应(连仿真器也连不上)
- 检查电源、时钟、复位:这是最基本的三要素。确保核心电压、I/O电压稳定且在容差范围内;检查晶振是否起振,CLKIN引脚有正确时钟输入;确认复位信号(RESET)已完成从低到高的释放过程。
- 确认启动模式引脚:使用万用表或示波器测量
BOOTMODE[3:0]、FASTBOOT、LENDIAN等配置引脚在复位释放时刻的电平。务必与原理图设计意图一致。最常见的问题就是上下拉电阻未焊、错焊或虚焊。 - 检查EMIFA引脚配置(如果使用EMIFA启动):如果是从EMIFA Flash启动,除了
BOOTMODE,还要检查AEM[2:0]的配置是否与Flash连接的引脚模式匹配。例如,你的Flash是16位异步接口,但AEM可能配置成了8位NAND模式,导致地址线对应关系完全错乱。
6.2 程序似乎启动了,但运行异常或很快跑飞
- 检查时钟配置:确认
FASTBOOT和PLLMS的设置是否与你的硬件输入时钟(CLKIN)匹配。如果FASTBOOT=1但PLLMS配置的倍频系数对于你的CLKIN来说太高或太低,可能导致PLL无法锁定或系统频率异常。可以在启动后读取PLL控制器(PLLC1)的状态寄存器来确认PLL是否锁定。 - 检查字节序:如果
LENDIAN配置与编译工具链的设定不一致,会导致所有多字节数据(包括指令码!)解释错误。检查编译选项(如CCS中的--endian=big或little)是否与硬件LENDIAN引脚一致。 - 排查HPI引导握手问题:如果是HPI引导,使用仿真器或让DSP在引导代码中设置一个标志,检查是否成功进入了HPI等待循环。然后检查主机端:
- 是否正确地写入了
DSPBOOTADDR(应用程序入口地址)? - 是否在写入地址之后才置位
BOOTCMPLT.BC? - HPI的访问时序(特别是
HSTROBE的无效脉冲宽度tw(HSTBH))是否满足手册要求?这个时序与SYSCLK3频率有关,在引导初期SYSCLK3频率可能较低,主机需要相应调整等待时间。
- 是否正确地写入了
6.3 外设无法正常工作(如UART不发数据,EMAC无链接)
- 首要怀疑引脚复用:这是最高频的原因。使用CCS的寄存器查看窗口,直接读取
PINMUX0和PINMUX1寄存器,确认你期望的外设功能是否已被正确选中。很多时候,我们以为配置了,但实际上寄存器值没变,可能是因为外设未处于复位状态就进行配置(配置无效),或者配置顺序有误。 - 确认PSC状态:外设是否已被正确使能?通过PSC模块的寄存器,确认该外设的模块状态是
Enable,而不是SwRstDisable或SyncRst。 - 检查时钟源:外设模块的时钟(如SYSCLK3)是否已开启?有些外设还需要额外的接口时钟。
6.4 系统性能不达标,有瓶颈
- 调整SCR总线优先级:使用性能分析工具(如TI的UIA)查看各主设备对共享资源(如DDR)的访问是否存在冲突和长时间等待。尝试调整
MSTPRI0/1寄存器以及EDMA和CPU自身的优先级寄存器,将数据流路径上的主设备(如负责数据搬运的EDMA TC)设为更高优先级。 - 优化EDMA TC配置:根据传输特性调整
EDMATCCFG中各个TC的默认突发大小(DBS)。对于大量连续数据传输,使用TC1并设置更大的DBS(如64字节)可能更高效;对于小包、实时性要求高的传输,使用TC0并保持较小的DBS。
调试心法:面对复杂的DSP启动与配置问题,一定要建立分层排查的思路。从硬件电源时钟复位,到引脚配置,到引导模式,再到软件初始化流程,最后到外设驱动。利用好仿真器、寄存器查看和内存查看工具,以及芯片手册中的“Initialization”章节,往往能快速定位问题所在。记住,BOOTCFG寄存器是你的第一盏“指路灯”,它忠实地反映了硬件为DSP设定的初始“人格”。