1. 项目概述与引脚复用核心价值
在嵌入式系统,尤其是像TMS320C6424这类高性能数字信号处理器(DSP)的设计中,硬件工程师面临的一个永恒挑战是:如何在有限的芯片引脚上,实现尽可能多的功能。芯片的引脚数量直接关系到封装尺寸、PCB布局复杂度以及最终的系统成本。为了解决这个矛盾,引脚复用技术应运而生,并成为现代SoC和MCU设计的基石。简单来说,引脚复用就是让一个物理引脚在不同的时间或场景下,扮演不同的“角色”——它可以是UART的发送引脚,也可以是定时器的输入,或者仅仅是一个通用的数字输入输出口。
TMS320C6424作为TI C6000系列中的一员,集成了丰富的外设,如EMIFA(外部存储器接口)、UART、McBSP、McASP、定时器、PWM等。如果每个外设的每个信号都需要独占一个引脚,那么芯片的引脚数量将变得极其庞大,既不经济也不现实。因此,其设计采用了高度灵活的引脚复用架构,通过一系列名为PINMUX的寄存器来控制。理解并正确配置这些寄存器,是让DSP按照你的设计意图工作的第一步,也是硬件驱动开发中至关重要的一环。如果你曾遇到过配置了UART却发不出数据,或者使能了某个外设但引脚毫无反应的情况,那么问题很可能就出在引脚复用配置上。本文将深入解析C6424的引脚复用机制,手把手带你理解UART、Timer、EMIFA等关键模块的配置细节,并分享从实际项目中总结出来的配置流程、避坑指南和调试技巧。
2. 引脚复用架构与寄存器总览
在深入每个具体模块之前,我们必须先建立起对C6424引脚复用系统整体架构的认知。这就像看地图前,得先知道东南西北和图例。
2.1 核心控制寄存器:PINMUX0 与 PINMUX1
C6424的引脚复用功能主要由两个系统配置寄存器控制:PINMUX0和PINMUX1。它们位于系统模块的配置空间中,上电复位后具有默认值。你的配置代码,本质上就是向这些寄存器的特定字段写入正确的值。
PINMUX0:主要控制与EMIFA、主机接口、部分串口等“大块”资源复用的引脚。其关键字段包括:
AEM[2:0]:异步EMIFA模式选择。这是配置EMIFA工作模式(如16位异步、8位NAND Flash模式)的核心字段。它决定了EMIFA相关引脚(地址、数据、控制线)的基本功能映射。RMII:RMII模式使能。用于选择EMAC(以太网控制器)使用MII接口还是RMII(精简MII)接口。这是一个全局选择,影响EMAC相关引脚的位置。CS5SEL,CS4SEL,CS3SEL:片选信号选择。决定特定的GPIO引脚是作为EMIFA的额外片选信号(EM_CS5, EM_CS4, EM_CS3)使用,还是保留为通用GPIO。这为你扩展外部存储器设备提供了灵活性。
PINMUX1:主要控制UART、定时器、PWM、CLKOUT以及串口子模块等“专用”外设的引脚复用。其字段通常以“xxBK”命名,表示某个功能块(Block)的配置。
UR0FCBK[1:0]:UART0流控制块功能选择。TIM0BK[1:0]:定时器0块功能选择。TIM1BK[1:0]:定时器1块功能选择。SPBK0[1:0]和SPBK1[1:0]:串口块0和1的功能选择,用于配置McBSP0/1和McASP0。PCIEN:PCI接口使能。这是一个高级功能,启用后会将大量引脚分配给PCI总线,通常与EMIFA功能互斥。
注意:PINMUX寄存器的配置必须在系统初始化早期、外设使能之前完成。一旦外设开始工作,再动态切换其引脚功能可能会导致通信错误或总线冲突。最佳实践是在
main()函数开头,紧接在时钟配置之后,就完成所有PINMUX的设置。
2.2 电源管理寄存器:VDD3P3V_PWDN
这是很多开发者容易忽略的关键一步!C6424为了降低静态功耗,许多I/O引脚所在的电源域在复位后默认是关闭的。即使你在PINMUX中正确配置了引脚功能,如果对应的电源域未打开,该引脚依然处于无效状态,无法输出或检测信号。
VDD3P3V_PWDN寄存器中的各个位域,专门用于控制这些I/O块的电源。例如:
UR0FC:控制UART0流控制块(GP[88:87])的电源。默认值为1(关闭)。要使用UCTS0/URTS0或PWM0,必须将其清0。TIMER0/TIMER1:控制定时器0/1块引脚的电源。同样默认关闭。SP:控制串口块(McBSP0/1, McASP0)引脚的电源。PWM1:控制PWM1引脚(GP[4])的电源。CLKOUT:控制CLKOUT/PWM2引脚(GP[84])的电源。注意:此块默认是上电的。EMBK0~EMBK3:控制EMIFA各个子块的电源。EMIFA相关引脚默认是上电的,但了解这些位在需要精细功耗管理时很有用。
配置铁律:先通过VDD3P3V_PWDN上电,再通过PINMUX配置功能,最后通过PSC(电源与睡眠控制器)使能外设时钟。顺序错了,外设就无法正常工作。
2.3 理解“功能块”概念
C6424的引脚复用不是以单个引脚为单位随意配置的,而是以“功能块”为单位进行分组管理。一个功能块包含若干物理引脚,这些引脚可以被整体配置为某一种或几种功能的组合。例如“UART0 Flow Control Block”就包含了GP[88]和GP[87]两个引脚,它们可以一起被配置为UART0的流控制引脚(UCTS0/URTS0),或者PWM0加一个GPIO,或者两个GPIO。
这种块化管理简化了配置逻辑,但也意味着你需要从“块”的视角,而不是单个引脚的视角去思考。数据手册中的表格(如Table 3-27, 3-28)提供了两种视图:一种是按引脚列出所有可能的功能(Pin-by-Pin),另一种是按配置字段列出整个块的功能(Block Function)。在实际开发中,后者更常用,因为你通常关心的是“我要用UART0的流控制功能”,而不是“我要把GPIO87和88分别设成什么”。
3. 关键外设模块引脚复用详解
掌握了架构和寄存器,我们就可以深入各个具体的外设模块了。这里我们选取最常用且最具代表性的几个模块进行拆解。
3.1 UART0 流控制与PWM0复用配置
UART0的引脚分布在两个块中:UART0 Data Block(数据引脚)和UART0 Flow Control Block(流控制引脚)。数据引脚(UTXD0, URXD0)的复用通常较为简单或固定,而流控制块则提供了灵活的复用选项。
3.1.1 功能块解析
UART0 Flow Control Block 包含两个引脚:
- GP[87]: 可复用为
UCTS0(UART0清除发送,输入)或GPIO[87]。 - GP[88]: 可复用为
URTS0(UART0请求发送,输出)、PWM0输出或GPIO[88]。
控制这个块的核心是PINMUX1.UR0FCBK[1:0]这个2位字段。它的配置决定了整个块的工作模式:
| PINMUX1.UR0FCBK | 块功能 | 结果引脚功能 |
|---|---|---|
| 00 | GPIO (2)(默认) | GP[88], GP[87] 都作为通用输入输出 |
| 01 | UART0 流控制 | GP[88] -> URTS0, GP[87] -> UCTS0 |
| 10 | PWM0 + GPIO (1) | GP[88] -> PWM0, GP[87] -> GPIO[87] |
| 11 | 保留 | 保留,勿用 |
3.1.2 配置步骤与代码示例
假设我们需要使用完整的UART0,包括流控制功能。
上电:首先确保流控制块已上电。查阅数据手册或寄存器定义,
VDD3P3V_PWDN.UR0FC位控制其电源。// 假设 VDD3P3V_PWDN 寄存器地址为 0x01C4 0000 volatile unsigned int *vdd_pwdn = (unsigned int *)0x01C4 0000; *vdd_pwdn &= ~(1 << UR0FC_BIT_POS); // 清除UR0FC位,为0表示上电实操心得:在写寄存器前,最好先读取其值,然后用“与/或”操作修改目标位,避免影响其他无关位。对于电源控制寄存器尤其要小心。
配置功能:将引脚功能设置为UART0流控制。
// 假设 PINMUX1 寄存器地址为 0x01C4 000C volatile unsigned int *pinmux1 = (unsigned int *)0x01C4 000C; // 先清除 UR0FCBK 字段(假设它在 bit[9:8]) *pinmux1 &= ~(0x3 << 8); // 然后设置为 01b,即 UART0 Flow Control 模式 *pinmux1 |= (0x1 << 8); // 01b = 1为什么是01b?因为我们需要
URTS0和UCTS0功能,根据上表,UR0FCBK=01对应“UART0 Flow Control”模式。外设初始化:最后,再按照UART0用户指南去配置波特率、数据位、停止位、使能流控制等。切记,一定要在PINMUX配置完成后再初始化UART外设本身。
3.1.3 常见问题:引脚无输出
- 症状:代码配置了UART0,流控制也打开了,但用示波器测不到GP[88](URTS0)上有任何信号。
- 排查:
- 检查
VDD3P3V_PWDN.UR0FC是否已置0。这是最容易被忽略的一步! - 检查
PINMUX1.UR0FCBK的值是否正确(应为01b)。可以读取该寄存器确认。 - 检查UART0模块本身的时钟是否通过PSC使能。
- 检查UART0的流控制功能是否在UART本身的控制寄存器中启用(例如,自动流控制AFC)。
- 检查
- 教训:引脚复用配置是一个“管道”,电源是水龙头,PINMUX是管道走向,外设驱动是水源。任何一个环节不通,信号都出不来。
3.2 定时器与串口时钟的复用:Timer0 Block
Timer0 Block 是一个展示“跨块外设”和“功能互斥”概念的绝佳例子。它只有两个引脚(GP[98]和GP[97]),却关联到三个外设:Timer0、McBSP0和McBSP1。
3.2.1 复杂的功能交织
- GP[98]: 可作
TINP0L(Timer0输入)、CLKS1(McBSP1外部时钟输入)或GPIO[98]。 - GP[97]: 可作
TOUT0L(Timer0输出)、CLKS0(McBSP0外部时钟输入)或GPIO[97]。
控制字段是PINMUX1.TIM0BK[1:0]:
| PINMUX1.TIM0BK | 块功能 | 结果引脚功能 |
|---|---|---|
| 00 | GPIO (2)(默认) | GP[98], GP[97] 都作为GPIO |
| 01 | Timer0 | GP[98] -> TINP0L, GP[97] -> TOUT0L |
| 10 | McBSP1 外部时钟源 | GP[98] -> CLKS1, GP[97] -> CLKS0 |
| 11 | Timer0 输入 | GP[98] -> TINP0L, GP[97] -> CLKS0 |
这里有一个关键点:McBSP0和McBSP1的主要引脚(数据、帧同步等)在另一个叫“Serial Port Block”的块里。Timer0 Block里的CLKS0/1只是它们的可选外部时钟输入引脚。这意味着:
- 如果你想用McBSP0,必须先在Serial Port Block中将其主要引脚配置为McBSP0功能。
- 只有当你需要为McBSP0/1提供外部采样率发生器时钟时,才需要用到Timer0 Block里的CLKS0/1引脚,并将其配置为
TIM0BK=10。 - 配置
TIM0BK=01使用Timer0时,会“占用”CLKS0引脚,此时如果McBSP0恰巧需要外部时钟,就会产生冲突。
3.2.2 配置场景分析
场景一:仅使用Timer0
- 上电:
VDD3P3V_PWDN.TIMER0 = 0。 - 配置:
PINMUX1.TIM0BK = 01b。 - 初始化Timer0外设。
场景二:使用McBSP0并需要外部时钟CLKS0
- 确保Serial Port Block中McBSP0的主要引脚已配置(通过
PINMUX1.SPBK0)。 - 上电Timer0 Block:
VDD3P3V_PWDN.TIMER0 = 0。 - 配置Timer0 Block为外部时钟源模式:
PINMUX1.TIM0BK = 10b。此时GP[97]成为CLKS0,GP[98]成为CLKS1(即使你可能不用McBSP1)。 - 在McBSP0的寄存器中,配置采样率发生器使用外部时钟(CLKS)。
注意事项:
TIM0BK=11是一个特殊模式,仅将GP[98]用作Timer0输入,而GP[97]仍作为McBSP0的外部时钟(CLKS0)。这在需要同时使用Timer0输入捕获和McBSP0外部时钟的特定场景下有用,但需仔细规划。
3.3 强大的EMIFA块:灵活性与复杂性并存
EMIFA(外部存储器接口)是C6424连接SDRAM、NOR Flash、NAND Flash、FPGA等外部设备的重要桥梁。其引脚复用也最为复杂,因为它需要与PCI总线、RMII以太网接口以及大量GPIO共享引脚。
3.3.1 理解主要配置选项
数据手册中的Table 3-40. EMIFA Block Major Configuration Choices是配置EMIFA的总纲。它通过几个关键寄存器字段的组合,定义了若干种“主要配置选项”(A到K)。我们不需要记住所有选项,但要理解其逻辑。
决定EMIFA块行为的核心字段有:
PINMUX1.PCIEN: 1使能PCI,0禁用PCI。启用PCI会占用大量引脚,通常与EMIFA功能冲突。PINMUX0.AEM[2:0]: 异步EMIFA模式。010b对应16位异步模式(常用),101b对应8位NAND Flash模式。PINMUX0.RMII: 1使能RMII(以太网),0禁用。PINMUX0.CS5/4/3SEL: 决定对应引脚是EMIFA片选还是GPIO。
例如,选项C(PCIEN=0, AEM=010b, RMII=0) 是最常用的配置之一,它提供了:
- 16位EMIFA异步模式:完整的地址线EM_A[21:0],16位数据线EM_D[15:0],以及控制线(R/W, CS2, BA[1:0], WAIT, WE, OE)。
- 可选的片选:通过CS3/4/5SEL,你可以选择将GP[13], GP[33], GP[32]用作额外的EMIFA片选(EM_CS3/4/5)或保留为GPIO。
- 一批GPIO:至少13个GPIO引脚可用。
3.3.2 配置流程与实例
假设我们需要一个16位EMIFA接口连接NOR Flash(使用CS2),同时希望将GP[13]作为GPIO按键检测,GP[33]作为EM_CS4连接另一个设备,并且不使用PCI和RMII。
- 确定主要选项:根据需求(16位EMIFA,不用PCI/RMII),对应选项C。
- 设置字段值:
PCIEN = 0AEM = 010bRMII = 0CS3SEL = 0(GP[13] 作为 GPIO)CS4SEL = 1(GP[33] 作为 EM_CS4)CS5SEL = 0(GP[32] 作为 GPIO,或根据需求设为1)
- 编写配置代码:
// 假设寄存器地址 volatile unsigned int *pinmux0 = (unsigned int *)0x01C4 0008; volatile unsigned int *pinmux1 = (unsigned int *)0x01C4 000C; // 1. 配置PINMUX1.PCIEN = 0 (通常默认就是0,但显式设置更安全) *pinmux1 &= ~(1 << PCIEN_BIT_POS); // 2. 配置PINMUX0 unsigned int pinmux0_val = 0; pinmux0_val |= (0x2 << AEM_BIT_POS); // AEM = 010b pinmux0_val &= ~(1 << RMII_BIT_POS); // RMII = 0 pinmux0_val &= ~(1 << CS3SEL_BIT_POS); // CS3SEL = 0 pinmux0_val |= (1 << CS4SEL_BIT_POS); // CS4SEL = 1 pinmux0_val &= ~(1 << CS5SEL_BIT_POS); // CS5SEL = 0 *pinmux0 = pinmux0_val; - 电源管理:EMIFA块默认上电,一般无需操作
VDD3P3V_PWDN.EMBKx,除非你想在休眠时关闭其电源以省电。
3.3.3 引脚复用冲突与排查
EMIFA配置中最常见的错误是资源冲突。例如:
- 冲突一:PCI与EMIFA。
PCIEN=1会占用EMIFA的地址/数据线来传输PCI信号。如果你既配置了PCIEN=1,又试图访问EMIFA控制器,结果将是不可预知的。两者只能选其一。 - 冲突二:RMII与EMIFA片选/GPIO。当
RMII=1时,引脚GP[33]和GP[32]被强制用于RMII的RMRXD1和RMRXD0信号,此时CS5SEL和CS4SEL配置无效。如果你在原理图中将GP[33]画成了EM_CS4,但软件配置了RMII=1,那么该引脚将不会输出片选信号。 - 冲突三:AEM模式与引脚功能。在8位NAND模式(
AEM=101b)下,EMIFA数据线只有EM_D[7:0]有效,EM_D[15:8]对应的引脚(GP[43:36])可以作为GPIO使用。如果你错误地配置为16位模式(AEM=010b),却只连接了8位数据线到Flash,那么高8位数据线的状态(可能是GPIO输入)会干扰读写操作。
排查方法:当EMIFA访问不正常时,除了检查时序配置、焊接、布线外,务必用调试器或通过内存窗口读取PINMUX0和PINMUX1寄存器的实际值,与你的预期配置逐位比对。一张根据实际配置手绘的“引脚功能映射表”在调试阶段非常有用。
4. 系统初始化流程与引脚复用配置实践
理解了各个模块的配置后,我们需要将其纳入到C6424整个芯片上电初始化的标准流程中。数据手册的Section 3.8 Device Initialization Sequence After Reset给出了明确的步骤。
4.1 官方推荐初始化序列
- 完成引导序列:根据BOOTMODE引脚状态,执行ROM引导加载程序或从外部存储器加载代码。
- 配置PLL设置系统时钟:通过PLLC1和PLLC2控制器,将芯片时钟提升到工作频率。
- 配置PINMUX0和PINMUX1寄存器:这就是我们本文的核心内容。在此步骤中,根据你的板级硬件设计,确定所有外设引脚的功能,并写入相应的寄存器。
- 配置VDD3P3V_PWDN寄存器为上电所需I/O块:为你将在步骤3中启用的所有外设引脚所在的I/O块上电。
- 配置系统模块寄存器:如HPI控制、定时器控制、EDMA传输控制器配置等。注意:此步骤应在相应外设无活动事务时进行。
- 使能外设时钟:通过Power and Sleep Controller (PSC) 使能你将要使用的外设模块(如UART、EMIFA、Timer等)的时钟。外设必须在有时钟的情况下才能工作。
- 配置总线优先级:通过System Module的MSTPRI0/1寄存器或EDMA的QUEPRI寄存器,为EDMA、CPU等总线主设备配置访问优先级,以优化系统性能。
- 配置C64x+内核与外设:
- 配置缓存(L1P, L1D, L2)。重要提示:除了EMIFA ROM直接引导模式外,其他引导模式下的引导加载程序会禁用所有缓存。如果你的应用需要缓存,必须在此步骤手动启用。
- 根据各外设的用户指南,配置其工作参数(如UART波特率、EMIFA时序等)。
4.2 将引脚复用配置融入你的工程
在实际项目中,我强烈建议将引脚复用配置代码模块化、表格化。
方法一:集中式配置函数创建一个pinmux_config.c文件,在其中定义一个初始化函数。将所有寄存器的配置值用宏或常量定义在头文件中,提高可读性。
// pinmux_config.h #define PINMUX0_CONFIG_VAL ( (0x2 << AEM_SHIFT) | (0 << RMII_SHIFT) | ... ) #define PINMUX1_CONFIG_VAL ( (0x1 << UR0FCBK_SHIFT) | (0x1 << TIM0BK_SHIFT) | ... ) #define VDD_PWDN_CONFIG_VAL ( ~( (1<<UR0FC_BIT) | (1<<TIMER0_BIT) | ... ) ) // 清零需要上电的位 // pinmux_config.c void SystemPinmuxInit(void) { // 1. 上电I/O块 (先上电) *((volatile unsigned int *)VDD3P3V_PWDN_ADDR) = VDD_PWDN_CONFIG_VAL; // 可插入少量延时,确保电源稳定 // 2. 配置引脚功能 *((volatile unsigned int *)PINMUX0_ADDR) = PINMUX0_CONFIG_VAL; *((volatile unsigned int *)PINMUX1_ADDR) = PINMUX1_CONFIG_VAL; }然后在main()函数中,在时钟初始化后立即调用SystemPinmuxInit()。
方法二:基于板级支持包如果你使用TI的SYS/BIOS或类似RTOS,或者参考其StarterWare库,通常会有现成的板级支持包(BSP)或平台库。这些库提供了类似PinMuxConfig()的API,你需要根据你的板卡原理图修改对应的配置文件(通常是platform.c或pinmux.c),然后调用库函数。这是更规范的做法。
4.3 调试技巧与常见问题实录
问题1:配置了外设,但引脚上没有信号。
- 检查清单:
- 电源:
VDD3P3V_PWDN寄存器中对应位是否已清零(上电)?这是新手第一坑。 - 时钟:PSC是否已使能该外设的时钟?用调试器查看PSC对应模块的MDCTL寄存器。
- PINMUX:读取PINMUX0/1寄存器,确认配置值是否正确写入。硬件调试时,我习惯在初始化后立刻将这些寄存器的值打印出来或通过调试器查看。
- 外设使能:外设自身的控制寄存器是否已使能(例如,UART的串行端口使能位)?
- 引脚冲突:是否有其他驱动源(如上拉电阻、其他芯片)在驱动该引脚?用万用表测电压。
- 电源:
问题2:系统运行不稳定,偶尔访问外部存储器出错。
- 可能原因:PINMUX配置与硬件连接不匹配。例如,原理图上某个引脚连接了EMIFA的地址线,但你的PINMUX配置将其设为了GPIO或PCI功能。
- 排查:仔细核对原理图上的每个复用引脚,与代码中的PINMUX配置逐项对比。特别是EMIFA、PCI、RMII这些互斥的功能。
问题3:从休眠唤醒后,某些外设不工作了。
- 可能原因:休眠模式可能关闭了某些I/O电源域。在唤醒序列中,你可能需要重新初始化PINMUX和
VDD3P3V_PWDN寄存器,或者确保在进入休眠前,这些配置未被破坏。 - 建议:在低功耗管理代码中,将关键的PINMUX和电源配置作为上下文保存与恢复的一部分。
问题4:如何验证配置是否正确?
- 软件验证:编写简单的测试程序。对于GPIO,配置为输出后翻转电平,用示波器测量。对于UART,发送特定字符回环测试。对于EMIFA,向外部存储器固定地址写入再读取,比对数据。
- 硬件工具:使用TI的CCS(Code Composer Studio)调试器,其寄存器查看窗口可以直接查看和修改PINMUX0/1、VDD3P3V_PWDN等系统寄存器,非常适合动态调试和验证。
5. 硬件设计考量与上拉下拉电阻
引脚复用不仅仅是软件的事,它在硬件设计阶段就必须被充分考虑。数据手册Section 3.9.1 Pullup/Pulldown Resistors专门讨论了这个问题。
5.1 内部上下拉电阻
C6424在大多数引脚内部集成了上拉或下拉电阻,这可以减少外部元件数量。但需要注意:
- 方向:你需要知道内部电阻是上拉还是下拉。例如,UART0流控制块内部是上拉电阻,这与UART空闲时为高电平的特性匹配。
- 强度:内部电阻值通常较大(几十kΩ量级),在高速或高噪声环境中,可能不足以提供稳定的电平。此时需要外部电阻。
5.2 必须使用外部电阻的情况
- 引导与配置引脚:如
BOOTMODE[3:0],FASTBOOT等。即使内部上下拉方向符合你的要求,也强烈建议使用外部电阻。这为调试和改变启动模式提供了便利,也能确保在芯片上电瞬间、内部电路还未稳定时,引脚就有确定的电平。 - 内部电阻方向不符:如果你需要引脚默认被拉高,但内部是下拉,就必须加外部上拉电阻。
- EMIFA片选引脚:这是一个特例!数据手册明确指出,EMIFA的片选引脚(EM_CS2, EM_CS3, EM_CS4, EM_CS5)内部是下拉电阻。但在实际使用中,片选信号在空闲时应为高电平(无效)。因此,必须为每个使用的EMIFA片选引脚添加一个外部上拉电阻(通常4.7kΩ或10kΩ),以确保其默认处于无效状态,避免意外选中设备。
5.3 电阻选型计算
选择外部上拉/下拉电阻时,需要考虑:
- 灌电流/拉电流:确保电阻值足够小,当所有连接到该网络的器件泄漏电流流过时,电阻上的压降不会使引脚电平进入不确定区域。通常需要低于最低
VIL或高于最高VIH。 - 驱动能力:对于双向引脚,电阻值也不能太小,要确保最弱的输出驱动器(例如另一个CMOS器件)能够将电平拉至相反的轨(从高拉到低,或从低拉到高)。
- 功耗:电阻值越小,功耗越大。在电池供电设备中需权衡。
经验值:
- 对抗内部电阻(如改变默认状态):通常使用较小的电阻,如1 kΩ。
- 增强或补充内部电阻(如在引导引脚上):通常使用较大的电阻,如10 kΩ 到 20 kΩ,以降低功耗。
- EMIFA片选上拉:4.7 kΩ是一个常见且稳健的选择。
最后,一定要在原理图评审阶段,就由硬件和软件工程师共同确认每个复用引脚的功能、内部上下拉状态以及外部电阻的需求,这样才能从源头避免设计缺陷。引脚复用配置是连接软硬件的桥梁,理解其原理并遵循正确的配置流程,是确保TMS320C6424乃至任何复杂嵌入式系统稳定工作的基石。