TMS320F2837xD输出交叉开关(OUTPUT X-BAR)寄存器配置全解析
1. 输出交叉开关OUTPUT X-BAR在TMS320F2837xD中的核心价值与设计哲学如果你在嵌入式实时控制领域摸爬滚打过几年尤其是用过TI的C2000系列DSP那你肯定对“外设不够用”、“引脚冲突”、“信号路由死板”这些问题深有体会。传统的微控制器外设连接往往是固定的比如某个PWM模块的故障触发信号只能连接到指定的GPIO或者特定的内部模块这种架构在简单的系统中尚可应付但一旦系统复杂度上来需要多个外设协同、交叉触发时就显得捉襟见肘了。TMS320F2837xD作为一款面向高性能实时控制的双核微控制器其设计者显然预见到了这个问题于是引入了输出交叉开关OUTPUT X-BAR这一极具灵活性的硬件互连单元。你可以把OUTPUT X-BAR想象成芯片内部的一个高度可编程的“数字信号交换机”或“路由矩阵”。它的核心价值在于解耦了信号源与信号目的地之间的硬连接关系。在F2837xD上有多达32个内部数字事件信号可以作为输入源例如ePWM的时基事件、比较器输出、ADC转换完成信号等而OUTPUT X-BAR提供了8个独立的输出通道。通过配置你可以将这32个输入源中的任何一个路由到这8个输出通道中的任何一个上。这意味着一个来自ePWM1的故障触发信号不再只能去往某个固定的GPIO或特定的eCAP模块而是可以通过配置选择性地输出到OUTPUT1至OUTPUT8中的任意一个进而触发另一个ePWM模块、启动一次ADC转换、或者直接输出到芯片引脚驱动外部电路。这种灵活性带来的好处是实实在在的。首先它极大地提高了系统设计的自由度你可以在软件中动态改变信号流实现不同的控制策略而无需改动硬件电路。其次它有助于优化PCB布局和引脚分配你可以将关键信号路由到最合适的、布线最方便的引脚上。再者它增强了系统的可靠性和诊断能力例如可以将多个关键的故障状态信号通过X-BAR集中路由到一个监控引脚方便用示波器进行统一观测。最后它减少了对外部“胶合逻辑”如CPLD或小型逻辑门电路的依赖所有信号路由都在片内完成既节省成本又提高可靠性。理解OUTPUT X-BAR关键在于理解其寄存器配置的层次化逻辑。它不是一个简单的“一对一”开关而是一个“多对一”的选择器阵列。对于8个输出通道OUTPUT1-OUTPUT8中的每一个都对应着32个独立的多路复用器Mux0-Mux31。每个多路复用器Mux可以从4个可能的输入源.0, .1, .2, .3中选择一个。然后通过另一个使能寄存器决定这32个Mux中哪一个的输出最终驱动该OUTPUT通道。这种两级选择机制先为每个Mux选输入源再选择由哪个Mux驱动输出提供了极大的组合灵活性。此外还有锁存Latch、取反Inversion和配置锁定Lock等控制寄存器用于实现信号的保持、极性控制和安全保护。2. OUTPUT_XBAR_REGS寄存器组全景解析与内存映射要驾驭OUTPUT X-BAR你必须先熟悉它的“控制面板”——即OUTPUT_XBAR_REGS寄存器组。根据技术参考手册TRM这个寄存器组位于特定的内存映射地址空间。所有对OUTPUT X-BAR的配置归根结底都是对这些寄存器进行读写操作。这些寄存器大致可以分为四大类多路复用器配置寄存器、多路复用器输出使能寄存器、输出控制寄存器以及配置锁定寄存器。第一大类是多路复用器配置寄存器MUX Configuration Registers。这是整个配置的核心用于为每个Mux选择具体的输入源。由于每个输出通道OUTPUTy对应32个Mux而每个Mux的选择需要2个比特位因为要从4个源中选1个所以TI很自然地将配置分成了两个32位寄存器来管理OUTPUTyMUX0TO15CFG配置Mux0到Mux15和OUTPUTyMUX16TO31CFG配置Mux16到Mux31。这里y的取值范围是1到8。例如OUTPUT1MUX0TO15CFG寄存器的bit[1:0]对应MUX0的选择bit[3:2]对应MUX1以此类推直到bit[31:30]对应MUX15。每个2比特字段的编码含义一致00选择输入.001选择输入.110选择输入.211选择输入.3。至于这.0到.3具体对应芯片内部的哪些信号源需要查阅芯片数据手册或TRM中“Output X-BAR Inputs”的表格那里会列出所有32个Mux的32个可能输入源的具体定义例如Mux0的输入0可能是EPWM1A输入1可能是EPWM2A等。第二大类是多路复用器输出使能寄存器MUX Enable Registers。仅仅配置了Mux的输入源还不够因为每个输出通道OUTPUTy前面有32个Mux在“待命”必须指定其中哪一个Mux的输出被允许去驱动最终的OUTPUTy。这就是OUTPUTyMUXENABLE寄存器的作用。这是一个32位寄存器每一位bit对应一个Muxbit0对应MUX0bit31对应MUX31。将某个Mux对应的比特位置1就使能了该Mux的输出连接到OUTPUTy置0则禁用。这里有一个非常重要的硬件特性每个OUTPUT通道在同一时刻只能有一个Mux被使能。如果你错误地将多个比特位置1实际行为可能是未定义的或者以最高优先级的Mux通常是编号最大的为准但这依赖于具体实现绝对不推荐这样做。安全的做法是在切换Mux时先清除旧的使能位再设置新的使能位。第三大类是输出控制寄存器用于对最终输出信号进行修饰和状态管理。主要包括OUTPUTLATCH这是一个只读状态寄存器反映了8个输出通道的锁存器当前状态1表示被触发置位0表示未触发或已被清除。当某个被使能的Mux输出一个有效脉冲通常是上升沿时对应的锁存位会被硬件自动置1。OUTPUTLATCHCLR写1清除寄存器。向该寄存器的某个比特位写1可以清除OUTPUTLATCH中对应的锁存状态。这是一个“写1置位”清除操作写0无效。OUTPUTLATCHFRC写1置位寄存器。向该寄存器的某个比特位写1可以强制将OUTPUTLATCH中对应的锁存状态置1这通常用于软件模拟触发或测试。OUTPUTLATCHENABLE锁存输出使能寄存器。这个寄存器的每个比特控制着对应的OUTPUTy信号是直接来自被选中的Mux输出该位为0还是来自OUTPUTLATCH锁存器的输出该位为1。当使能锁存输出时OUTPUTy信号将保持为高直到软件通过OUTPUTLATCHCLR将其清除。这在需要产生一个保持性故障指示信号时非常有用。OUTPUTINV输出取反寄存器。将该寄存器的某个比特位置1会使对应的OUTPUTy信号在最终输出前进行逻辑取反。例如当你的外部电路需要低电平有效的触发信号时这个功能就省去了外部反相器。第四大类是配置锁定寄存器OUTPUTLOCK。这是一个安全特性。当你完成所有OUTPUT X-BAR的复杂配置后为了防止程序跑飞或意外修改导致信号路由错乱你可以“锁住”配置。向OUTPUTLOCK寄存器先写入密钥0x5A5A到高16位KEY字段然后将最低位LOCK位置1即可锁定所有配置寄存器包括MUX配置、使能、锁存使能、取反配置。一旦锁定再次写入这些寄存器的操作将被硬件忽略直到下一次芯片复位。这在功能安全要求高的场合如电机驱动、数字电源是至关重要的。所有这些寄存器除了OUTPUTLOCK在复位后的默认值都是0。这意味着所有Mux输入选为0所有Mux输出被禁用锁存功能禁用输出不取反。你需要通过软件按照一定的顺序通常是先配置Mux再使能输出最后根据需要设置锁存或取反来初始化它们。3. 核心寄存器功能详解与位域操作指南光知道寄存器分类还不够我们得深入每个寄存器的位域理解其精确含义和操作方式。这里我结合自己调试时踩过的坑给你捋一捋关键点。3.1 MUX配置寄存器OUTPUTyMUXxTOyCFG的位域操作以OUTPUT1MUX0TO15CFG偏移地址0x00为例。这是一个32位寄存器被划分为16个2比特字段分别控制MUX0到MUX15的输入选择。Bit[1:0] - MUX0: 00 选择输入源0 01 选择输入源1 10 选择输入源2 11 选择输入源3。Bit[3:2] - MUX1: 同上。...Bit[31:30] - MUX15: 同上。操作要点原子性操作由于每个Mux的选择是独立的2比特位在修改时最清晰的做法是针对单个Mux进行位域操作避免影响其他Mux。例如要设置OUTPUT1的MUX5选择输入源210可以这样写// 假设 OUTPUT_XBAR_REGS 已定义为指向寄存器组的指针 OUTPUT_XBAR_REGS-OUTPUT1MUX0TO15CFG ~(0x3 10); // 清空MUX5对应的位[11:10] OUTPUT_XBAR_REGS-OUTPUT1MUX0TO15CFG | (0x2 10); // 设置位[11:10]为10b (2)或者如果你能确定该寄存器当前其他位都是0也可以直接赋值。但更安全的做法是使用位域操作或TI提供的驱动库函数如Driverlib中的Xbar_setOutputMuxConfig。EALLOW保护请注意在技术手册的寄存器表格中这些MUX配置寄存器旁边标注了“EALLOW”。这意味着对它们的写操作必须在执行EALLOW汇编指令或等价的C宏如EALLOW之后才能进行目的是防止误写。配置完成后通常用EDIS指令关闭写保护。这是C2000系列的一个常见安全机制。EALLOW; // 允许写入受保护的寄存器 OUTPUT_XBAR_REGS-OUTPUT1MUX0TO15CFG ... ; // 你的配置代码 EDIS; // 禁止写入受保护的寄存器3.2 MUX使能寄存器OUTPUTyMUXENABLE的位域操作OUTPUT1MUXENABLE偏移地址0x20是一个32位寄存器每一位控制一个Mux的输出是否连接到OUTPUT1。Bit 0: 0 MUX0输出不驱动OUTPUT1 1 MUX0输出驱动OUTPUT1。Bit 1: 控制MUX1 以此类推直到Bit 31控制MUX31。关键陷阱与最佳实践互斥使能硬件上虽然寄存器允许你同时设置多个位但逻辑上只有一个Mux的输出能真正生效。我强烈建议在代码中强制保证同一时刻只有一个位被置1。切换Mux时采用“先清后设”或“直接赋值”的方式。// 方法一先清除所有使能再使能目标Mux (例如MUX8) EALLOW; OUTPUT_XBAR_REGS-OUTPUT1MUXENABLE 0; // 清除所有使能 OUTPUT_XBAR_REGS-OUTPUT1MUXENABLE (1 8); // 仅使能MUX8 EDIS; // 方法二使用位操作只修改目标位假设之前已禁用 EALLOW; OUTPUT_XBAR_REGS-OUTPUT1MUXENABLE | (1 8); // 使能MUX8 // 如果需要禁用其他位需要额外的逻辑 EDIS;方法一更简单粗暴且安全特别是在初始化阶段。方法二在动态切换时可能更高效但务必小心确保不会意外使能多个Mux。查找输入源在设置OUTPUTyMUXENABLE之前你必须已经在对应的OUTPUTyMUXxTOyCFG寄存器中为你将要使能的那个Mux选好了输入源。这个顺序不能乱先配Mux输入再使能Mux输出。3.3 输出控制寄存器组详解这组寄存器管理输出信号的最终形态。OUTPUTLATCH只读。你可以随时读取它来检查8个输出通道的锁存状态。例如在中断服务程序中读取OUTPUTLATCH可以快速判断是哪个通道的事件触发了锁存。OUTPUTLATCHCLR写1清除。这是一个非常典型的“写1清0”寄存器。如果你想清除OUTPUT1的锁存状态就向OUTPUTLATCHCLR的bit0写1。注意写0是无效的。通常操作是OUTPUT_XBAR_REGS-OUTPUTLATCHCLR 0x01; // 清除OUTPUT1的锁存标志 // 读取确认是否清除 while(OUTPUT_XBAR_REGS-OUTPUTLATCH 0x01) { // 等待硬件清除完成通常很快 }OUTPUTLATCHFRC写1置位。这个寄存器允许软件主动触发一个输出锁存事件非常适用于测试或软件强制产生某个事件。操作方式同OUTPUTLATCHCLR。OUTPUTLATCHENABLE这是一个开关决定OUTPUTy信号是直通模式还是锁存模式。默认是0直通。当设置为1时对应通道的输出将不再是Mux输出的实时信号而是OUTPUTLATCH中锁存器的状态。一个常见的应用场景是故障保护将一个PWM的故障信号通过X-BAR路由到某个OUTPUT并使能该OUTPUT的锁存。这样一旦故障发生即使原始的PWM故障信号已经消失OUTPUT引脚也会保持高电平假设锁存被触发直到软件确认并清除锁存。这确保了故障状态不会被意外忽略。OUTPUTINV简单而实用。将某位置1对应的OUTPUTy信号在输出前会被取反。这在驱动低电平有效的使能引脚或光耦时非常方便无需外部反相器。3.4 配置锁定寄存器OUTPUTLOCK这是你的“安全锁”。当你完成所有OUTPUT X-BAR的配置并测试无误后应该锁定它以防止后续代码尤其是第三方库或意外数组越界篡改配置。EALLOW; // 步骤1: 写入密钥 0x5A5A 到 KEY 字段 (高16位) OUTPUT_XBAR_REGS-OUTPUTLOCK (0x5A5A 16); // 步骤2: 在同一个写操作中或紧接着将LOCK位置1。注意KEY值必须同时有效。 // 通常直接写入包含KEY和LOCK的完整值更安全。 OUTPUT_XBAR_REGS-OUTPUTLOCK (0x5A5A 16) | 0x01; EDIS;重要提示锁定操作是不可逆的直到芯片复位。锁定后尝试修改受保护的寄存器所有MUX配置、使能、锁存使能、取反寄存器将被硬件静默忽略但读取操作仍然正常。因此务必在开发的最后阶段确认配置无误后再进行锁定。在调试阶段可以先注释掉锁定代码。4. 实战配置流程从需求到代码的完整案例理论说再多不如一个实际案例来得透彻。假设我们有一个电机控制项目需要实现以下功能功能1将ePWM1模块1的时基零事件TBCTR0作为触发源路由到OUTPUT1并最终连接到一个GPIO引脚通过GPIO MUX配置用于在示波器上观察PWM周期起始点。功能2将比较器1COMP1的输出作为过流保护信号路由到OUTPUT2并启用锁存功能。这样一旦发生过流即使比较器输出很快恢复OUTPUT2也能保持高电平直到软件处理完故障后手动清除。功能3将ADC的序列1转换完成中断信号路由到OUTPUT3并且该信号需要低电平有效因为要触发一个低电平有效的外部器件。步骤1确定输入源索引首先我们需要查阅TMS320F2837xD的技术参考手册中“Output X-BAR Inputs”表格。假设我们查到ePWM1的时基零事件对应INPUT5假设它连接到MUX5的输入源0即.0。比较器1输出对应INPUT12假设它连接到MUX12的输入源1即.1。ADC序列1转换完成对应INPUT20假设它连接到MUX20的输入源2即.2。注意以上INPUT编号和Mux输入源的映射是假设的实际项目必须查阅具体芯片型号的TRM表格这是最容易出错的一步。步骤2配置Mux输入选择根据上述映射我们需要对于OUTPUT1的MUX5选择输入源.0(值00)。对于OUTPUT2的MUX12选择输入源.1(值01)。对于OUTPUT3的MUX20选择输入源.2(值10)。 MUX5和MUX12在OUTPUTyMUX0TO15CFG寄存器中MUX20在OUTPUTyMUX16TO31CFG寄存器中。步骤3编写配置代码以下是基于TI的C2000 DriverLib库的示例代码使用库函数可以简化位操作和EALLOW管理#include driverlib.h #include device.h void configureOutputXbar(void) { // 初始化X-BAR模块如果DriverLib需要 Xbar_initModule(); // --- 配置 OUTPUT1ePWM1时基零事件 --- // 选择MUX5的输入源为 .0 (假设INPUT5映射到MUX5的.0输入) // 参数输出通道(1), Mux编号(5), 输入选择(0) Xbar_setOutputMuxConfig(XBAR_OUTPUT1, 5, XBAR_MUX_CTL_INPUT0); // 使能OUTPUT1的MUX5输出 Xbar_enableOutputMux(XBAR_OUTPUT1, 5); // --- 配置 OUTPUT2比较器1输出带锁存 --- // 选择MUX12的输入源为 .1 (假设INPUT12映射到MUX12的.1输入) Xbar_setOutputMuxConfig(XBAR_OUTPUT2, 12, XBAR_MUX_CTL_INPUT1); Xbar_enableOutputMux(XBAR_OUTPUT2, 12); // 使能MUX12 // 使能OUTPUT2的锁存功能 // 先清除可能存在的旧锁存状态 Xbar_clearOutputLatch(XBAR_OUTPUT2); // 然后使能锁存输出模式 Xbar_enableLatchOutput(XBAR_OUTPUT2); // --- 配置 OUTPUT3ADC序列1完成低电平有效 --- // 选择MUX20的输入源为 .2 (假设INPUT20映射到MUX20的.2输入) Xbar_setOutputMuxConfig(XBAR_OUTPUT3, 20, XBAR_MUX_CTL_INPUT2); Xbar_enableOutputMux(XBAR_OUTPUT3, 20); // 使能MUX20 // 设置OUTPUT3输出反相低电平有效 Xbar_invertOutput(XBAR_OUTPUT3, true); // true 表示使能反相 // (可选) 最后锁定配置以防止意外修改 // Xbar_lockConfig(); // 谨慎使用调试阶段建议注释掉。 } // 在故障处理中断服务程序中清除OUTPUT2的锁存 void faultISR(void) { // ... 处理故障 ... Xbar_clearOutputLatch(XBAR_OUTPUT2); // 清除锁存OUTPUT2引脚恢复 // ... 其他清理工作 ... }如果你不使用DriverLib而是直接操作寄存器代码会涉及更多的位操作和EALLOW/EDIS但逻辑完全相同。步骤4GPIO复用配置仅仅配置好OUTPUT X-BAR还不够OUTPUT1-8信号还需要通过GPIO多路复用器GPIO MUX分配到具体的芯片引脚上。这需要在GPIO模块中将对应引脚的功能选择为“X-BAR Output x”。例如假设我们将OUTPUT1分配到GPIO32引脚GPIO_setPinConfig(GPIO_32_XBAR_OUTPUT1); // 使用DriverLib // 或者直接写寄存器 GPIO_setMasterCore(32, GPIO_CORE_CPU1); GPIO_setPadConfig(32, GPIO_PIN_TYPE_STD); // 推挽输出 GPIO_setDirectionMode(32, GPIO_DIR_MODE_OUT); GPIO_setQualificationMode(32, GPIO_QUAL_SYNC); // 根据需要设置同步 GPIO_setPinConfig(GPIO_32_XBAR_OUTPUT1);完整流程总结查表确定映射根据TRM明确你的信号源对应哪个X-BAR INPUT以及它连接到目标OUTPUT的哪个Mux的哪个输入选择.0, .1, .2, .3。配置Mux输入写OUTPUTyMUXxTOyCFG寄存器设置特定Mux的输入选择位。使能Mux输出写OUTPUTyMUXENABLE寄存器使能目标Mux并确保同一输出通道的其他Mux被禁用。配置输出特性可选根据需要配置OUTPUTLATCHENABLE锁存、OUTPUTINV反相。分配GPIO引脚通过GPIO MUX将所需的OUTPUTx信号连接到具体的物理引脚。测试与锁定测试路由功能是否正确。确认无误后最后考虑使用OUTPUTLOCK寄存器锁定配置。5. 调试技巧、常见陷阱与高级应用场景即使理解了原理和流程实际调试中还是会遇到各种问题。下面分享一些我积累的经验和常见坑点。5.1 调试技巧与诊断信号验证最直接的方法是用示波器或逻辑分析仪观察配置的GPIO引脚。确保你的GPIO MUX配置正确功能模式而非数字I/O模式。软件读回验证在配置完寄存器后可以读回OUTPUTyMUX0TO15CFG、OUTPUTyMUXENABLE等寄存器确认写入的值是否正确。注意有些寄存器是受EALLOW保护的但读取不受影响。利用锁存状态寄存器OUTPUTLATCH是一个很好的诊断工具。如果你使能了锁存功能但输出引脚没有如预期锁存可以读取这个寄存器。如果这里位被置1了但引脚没变化问题可能出在OUTPUTLATCHENABLE配置或GPIO MUX上。如果这里位没置1问题可能出在前面的Mux选择或使能或者源信号根本没产生。强制置位测试在怀疑源信号问题时可以暂时使用OUTPUTLATCHFRC寄存器通过软件强制将某个输出锁存位置1看输出引脚是否有反应。这可以快速隔离问题是发生在X-BAR之前还是之后。5.2 常见陷阱与避坑指南遗忘EALLOW保护这是新手最常犯的错误。对MUX配置、使能、锁存使能、取反寄存器的写操作必须在EALLOW和EDIS指令之间进行。DriverLib函数内部通常已经处理了但如果是直接操作寄存器务必记得。// 错误直接写受保护寄存器会导致写入无效。 // OUTPUT_XBAR_REGS-OUTPUT1MUX0TO15CFG 0x00010000; // 正确 EALLOW; OUTPUT_XBAR_REGS-OUTPUT1MUX0TO15CFG 0x00010000; EDIS;多个Mux使能冲突如前所述一个输出通道只能有一个Mux被使能。在动态切换信号源时标准的做法是“先断后通”// 从MUX5切换到MUX10 EALLOW; OUTPUT_XBAR_REGS-OUTPUT1MUXENABLE ~(1 5); // 先禁用旧的MUX5 OUTPUT_XBAR_REGS-OUTPUT1MUXENABLE | (1 10); // 再使能新的MUX10 EDIS;避免直接|操作除非你能完全确定当前使能位状态。忽略输入源映射表.0,.1,.2,.3这四个选择对于不同的Mux索引其代表的物理信号是完全不同的。绝对不能想当然。必须仔细查阅你所用芯片型号的TRM中“Output X-BAR Input Selection”表格。例如MUX5的.0输入和MUX10的.0输入很可能是不同的信号。锁存与清除的时序当使用锁存功能时理解OUTPUTLATCHCLR是“写1清除”至关重要。如果你在中断中清除锁存要确保只执行一次。错误的循环或重复写入可能不会有副作用但也不必要。另外清除操作是异步的可能需要一个很小的延迟通常一两个NOP才能在下一次读取OUTPUTLATCH时看到变化。配置锁定过早在开发和调试阶段千万不要过早锁定配置。一旦锁定你将无法通过调试器在线修改任何X-BAR相关配置只能复位芯片。建议将锁定操作放在所有初始化函数的最末尾并且用宏定义控制方便调试时关闭。#define LOCK_XBAR_CONFIG 0 // 调试阶段设为0发布时设为1 void Board_Init(void) { // ... 其他初始化 ... configureOutputXbar(); #if (LOCK_XBAR_CONFIG 1) Xbar_lockConfig(); #endif }5.3 高级应用场景多路复用与信号广播一个经典的用例是“事件广播”。例如你可以将一个主PWM的时基事件同时路由到OUTPUT1、OUTPUT2、OUTPUT3分别触发从PWM模块、启动ADC采样、以及输出到测试点。这只需要将一个输入源如ePWM1时基配置到多个不同输出通道的Mux上并分别使能即可。灵活的故障处理链在复杂的电源拓扑中可能需要多个故障信号过流、过压、过热进行逻辑“或操作后关断所有PWM。你可以将比较器1、比较器2、温度传感器的故障信号分别路由到OUTPUT1、2、3并将这三个输出引脚连接到一个外部与门或利用芯片内部的逻辑单元如果支持其输出再作为ePWM的故障输入。这样就在硬件层面实现了快速、可靠的故障聚合。软件触发与同步通过OUTPUTLATCHFRC寄存器软件可以模拟硬件事件。这在测试序列、软件强制同步或者在没有物理事件时触发特定流程时非常有用。动态重配置在运行不同控制模式时可以动态改变X-BAR的路由。例如在电机启动阶段使用一种传感器信号作为触发在高速运行阶段切换到另一种估算算法产生的信号。这要求对Mux配置和使能寄存器进行原子性的、无冲突的修改。OUTPUT X-BAR是TMS320F2837xD这类先进微控制器赋予开发者的强大工具。它把信号路由的灵活性从PCB板级提升到了芯片内部的软件可配置级别。掌握其寄存器配置意味着你能更高效地利用芯片资源设计出更紧凑、更可靠、功能更丰富的控制系统。刚开始接触时可能会觉得寄存器繁多但一旦理清了“Mux选择输入 - 使能Mux输出 - 控制输出特性”这个核心链条并借助DriverLib或自己封装好的函数应用起来就会得心应手。记住仔细阅读数据手册从简单的单个信号路由开始实验逐步构建复杂的互连逻辑是掌握它的不二法门。