TI MibSPI寄存器深度解析:从并行模式到传输组与中断实战 1. MibSPI核心控制寄存器从基础到实战的深度解析在嵌入式开发尤其是汽车电子和工业控制领域德州仪器TI的微控制器因其高可靠性和丰富的外设而备受青睐。其中多缓冲串行外设接口模块MibSPI是处理高速、多通道、实时性要求高的SPI通信任务的利器。很多工程师在初次接触MibSPI时面对其复杂的寄存器手册尤其是像SPIPMCTRL、TGxCTRL以及一系列中断管理寄存器时往往会感到无从下手。手册虽然详尽但更像一本字典缺少将各个寄存器功能串联起来、指导实际项目配置的“故事线”。今天我就结合自己多年在汽车ECU开发中使用TI Hercules系列MCU的经验来聊聊这些核心控制寄存器到底怎么玩以及那些手册里不会明说但实际调试中一定会遇到的“坑”。简单来说MibSPI的强大之处在于它把简单的SPI通信“任务化”和“自动化”了。普通的SPI需要CPU不断搬运数据、管理片选而MibSPI通过传输组Transfer Group, TG和多缓冲区RAM允许你预先配置好一整套通信序列比如先发命令字给传感器A再连续读取传感器B的10个数据最后发一个心跳包给执行器C。然后你可以通过外部事件如定时器、GPIO边沿或软件命令来触发整个序列自动执行期间CPU几乎可以完全解放。而这一切的“导演台”就是我们要深入剖析的这些控制寄存器。理解它们你才能真正驾驭MibSPI实现高效、可靠的通信架构。2. 并行/模数模式控制寄存器SPIPMCTRL解锁SPI带宽的钥匙2.1 寄存器结构与核心功能定位SPIPMCTRL全称Parallel/Modulo Mode Control Register是MibSPI实现高速数据传输的关键。传统SPI是单数据线MOSI, MISO的全双工或半双工通信其理论带宽受限于时钟频率。SPIPMCTRL寄存器允许你将多根普通的GPIO引脚配置为额外的数据线从而实现并行传输瞬间将数据吞吐量提升2倍、4倍甚至8倍。这在需要高速传输大量数据如图像传感器初始化、存储器编程等场景下优势极其明显。这个寄存器是一个32位的寄存器但其结构非常规整可以理解为4个独立的8位配置“切片”Byte0到Byte3。每个切片对应一个数据格式寄存器SPIFMTx。在MibSPI的缓冲区控制字段中有一个DFSEL[1:0]位域用于选择当前缓冲区使用哪一种数据格式0~3。SPIPMCTRL的这四个字节就分别服务于这四种数据格式。这种设计非常灵活你可以在同一个传输组内混合使用不同数据线宽度的传输格式。例如传输组的前半部分用单线模式发送一个配置命令节省引脚后半部分立刻切换到4线并行模式接收大批量数据追求速度。寄存器每个字节8位的内部结构是统一的包含三个有效位域PMODEx (2位): 并行模式选择决定使用1、2、4还是8条数据线。MMODEx (3位): 模数模式选择用于支持特定数据线数量的模数模式但请注意下文的重要提示。MODCLKPOLx (1位): 模数模式下的时钟极性控制。重要提示手册里的“坑”在绝大多数TI的MibSPI实现中尤其是Hercules系列模数模式Modulo Mode是不被支持的。因此手册中明确警告“Do not configure MODCLKPOLx and MMODEx bits”。这意味着对于MMODEx和MODCLKPOLx这两个位域我们必须保持其复位值通常为0不要进行任何配置。我们的关注点应完全放在PMODEx上。如果你错误配置了MMODEx模块行为将是未定义的很可能导致通信彻底失败。2.2 PMODEx位域详解与配置实战PMODEx是我们在并行模式下的主要配置项。它的值直接决定了物理上使用多少条数据线进行传输。PMODEx 值模式描述对应数据线典型应用场景00正常操作 / 1-数据线模式SIMO, SOMI标准SPI通信连接大多数通用传感器、Flash存储器。012-数据线模式SIMO, SOMI 额外1条数据线需要中等带宽提升如与双通道ADC通信。104-数据线模式SIMO, SOMI 额外3条数据线高速数据流如初始化TFT显示屏的帧缓冲区、与四线SPI FlashQSPI通信。118-数据线模式SIMO, SOMI 额外7条数据线极限带宽需求常见于特定领域的高速并行数据采集卡。配置示例与步骤假设我们计划在数据格式1SPIFMT1上使用4线并行模式来驱动一个QSPI Flash。引脚复用配置首先这不是在SPIPMCTRL里完成的但却是第一步且至关重要。你需要查阅MCU的引脚复用表将除了默认的SPI引脚CLK, CS, SIMO, SOMI外另外3个用于并行数据的GPIO引脚复用为MibSPI的DATA[2:0]功能。这一步如果漏了配置寄存器是无效的。配置SPIFMT1寄存器设置数据长度、时钟极性和相位等。假设我们配置为8位数据长度模式0CPOL0, CPHA0。配置SPIPMCTRL寄存器我们需要设置Byte1对应SPIFMT1的PMODE1字段。Byte1位于寄存器的[15:8]位。要设置4线模式PMODE1位于Byte1的[25:24]位即整个寄存器的[25:24]位需要写入2二进制10b。同时确保MMODE1[20:18]位保持为0MODCLKPOL1[21]位保持为0。用C语言代码示意配置过程// 假设 MibSPI1 的基地址为 0xFFF7F800 volatile uint32_t *MibSPI1_SPIPMCTRL (volatile uint32_t *)(0xFFF7F800 0x6C); volatile uint32_t *MibSPI1_SPIFMT1 (volatile uint32_t *)(0xFFF7F800 0x...); // SPIFMT1偏移地址 // 1. 配置SPIFMT1 (示例8位数据CPOL0, CPHA0) *MibSPI1_SPIFMT1 ... ; // 根据手册设置CHARLEN, POL, PHA等位 // 2. 配置SPIPMCTRL的Byte1为4线并行模式并保持模数模式相关位为0 uint32_t temp *MibSPI1_SPIPMCTRL; temp ~(0x03 24); // 清零PMODE1位域 ([25:24]) temp | (0x02 24); // 设置PMODE1 2 (4线模式) // 确保MMODE1([20:18])为0MODCLKPOL1([21])为0 (复位后默认就是0通常无需操作) *MibSPI1_SPIPMCTRL temp;实操心得与避坑指南带宽计算并行模式的带宽提升是线性的。如果SPICLK是10 MHz在1线模式下理论数据速率是10 Mbps。在4线模式下理论数据速率就是 10 MHz * 4 40 Mbps。但实际速率会受到GPIO翻转速度、PCB布线等因素影响。缓冲区控制字段配置当你创建传输组TG的缓冲区时在缓冲区的控制字段中必须将DFSEL[1:0]设置为01以选择我们刚刚配置好的SPIFMT14线模式。如果选错了数据格式模块会使用错误的引脚映射导致通信异常。硬件连接并行模式需要占用大量GPIO。务必在PCB设计初期就规划好引脚并注意数据线的等长和阻抗控制尤其是在高速情况下以减少信号完整性问题。与标准SPI设备兼容并行模式通常用于与支持该模式的特定外围设备通信。与只支持标准单线/双线SPI的设备通信时务必使用PMODE00的格式否则无法通讯。3. 传输组控制寄存器TGxCTRL定义通信任务的“剧本”如果说SPIPMCTRL决定了“怎么传”数据宽度那么TGxCTRLx为0-15就定义了“何时传”以及“传什么”。每个传输组TG都有一个独立的TGxCTRL寄存器它是整个MibSPI自动化传输逻的核心控制器。3.1 TGxCTRL核心位域功能解析这个寄存器控制着TG的使能、触发方式、工作模式等核心行为。我们逐位域拆解其“导演”功能TGENA (Bit 31): TG使能位。这是TG的“总开关”。只有将此位置1TG才会响应触发事件。一个常见的操作顺序是先配置好TG的所有参数PSTART、触发源等最后再置位TGENA来激活它。ONESHOT (Bit 30): 单次触发模式。当设置为1时TG在响应一次触发事件并完成整个组传输后会自动将TGENA清零。这非常适合那些只需要执行一次初始化序列或单次触发的采样任务。设置为0时TG会持续响应触发事件实现循环传输。PRST (Bit 29): 指针复位模式。这是一个非常关键且容易混淆的位。它定义了当一个新的触发事件到来时如果当前TG的传输还未完成该如何处理。PRST0默认新触发事件被忽略。当前传输拥有最高优先级必须完成后才可能响应下一次触发。这保证了数据传输的完整性适用于不允许数据包被打断的场景。PRST1新触发事件会立即将当前缓冲区指针PCURRENT重置回起始地址PSTART并重新开始传输。这意味着新的触发可以“打断”并“重启”当前传输。这在需要以最新数据覆盖旧传输的场景中有用但要注意这会导致之前正在传输的数据被丢弃。特别注意手册明确指出对于边沿触发的TGPRST位是无效的。因为边沿是一个瞬间事件无法在传输中途“再次”检测到同一个边沿来执行复位。PRST主要针对电平触发和ALWAYS触发模式。TGTD (Bit 28): TG已触发状态标志位。这是一个只读位。当TG被成功触发无论是否开始传输后硬件会将其置1。当TG服务完成或取消后硬件会将其清零。软件可以通过查询此位来判断TG的状态。TRIGEVT (Bits 23:20): 触发事件类型。这是定义“何种信号变化能触发TG”的配置项。其选项非常丰富0: NEVER - 从不触发。可用于临时禁用某个TG而不清除其配置。1h: Rising Edge - 上升沿触发。2h: Falling Edge - 下降沿触发。3h: Both Edges - 双边沿触发。5h: High-Active - 高电平有效。只要触发源为高TG就会连续运行完成一次组传输后立即从头开始。电平变低则停止当前传输。6h: Low-Active - 低电平有效。逻辑与高电平有效相反。7h: ALWAYS - 总是触发。一旦TGENA置位TG会立即开始传输并且传输完成后会不断重复。结合ONESHOT1可以实现一次软件触发。TRIGSRC (Bits 19:16): 触发源选择。定义了TRIGEVT所监视的信号来自哪里。0: Disabled - 无触发源。1h-Eh: EXT0 - EXT13外部触发源。具体对应哪个物理引脚或内部模块如HET定时器输出需要查阅具体的MCU数据手册。Fh: TICK - 内部Tick计数器。这是一个由TICKCNT寄存器控制的周期性定时器可用于产生精确的定时触发。PSTART (Bits 14:8): TG起始地址。指定该TG所管理的缓冲区在多缓冲区RAM中的起始位置0-127。这个地址指向的是一个缓冲区控制字而非数据本身。控制字包含了数据地址、数据格式选择DFSEL等关键信息。PCURRENT (Bits 6:0): 当前缓冲区指针只读。硬件在传输过程中自动更新此指针指向当前正在处理或下一个待处理的缓冲区地址。在调试时读取此值可以知道TG执行到了哪个缓冲区。3.2 高级特性与优先级机制深度剖析TGxCTRL的配置并非孤立它必须与MibSPI的优先级机制和缓冲区控制字段协同工作。MibSPI的传输组有固定的硬件优先级TG0最高TG15最低。高优先级TG可以抢占低优先级TG的传输。但是有几种特殊情况会“保护”低优先级TG不被立即打断CSHOLD或LOCK缓冲区当TG正在传输一个设置了CSHOLD保持片选或LOCK锁定缓冲区控制位的缓冲区时高优先级TG必须等待直到这个缓冲区以及下一个非CSHOLD/非LOCK的缓冲区传输完成。CSHOLD常用于需要在一个片选有效期间连续传输多个数据字的设备LOCK则用于确保某个关键数据包不被分割传输。这个机制保证了与这类设备通信的时序完整性。NOBRK DMA缓冲区当TG正在处理一个设置了NOBRK不打断标志的DMA缓冲区时它会连续传输完该缓冲区指定的所有数据字ICOUNT在此期间不会被任何高优先级TG打断。这为需要保证数据流连续性的DMA传输提供了保障。最后一个缓冲区预取一旦TG的最后一个缓冲区的控制字被预取即将开始传输那么这个TG的整个传输序列就会获得“豁免权”直到全部完成期间不会被抢占。理解这些规则对于设计稳定的多TG系统至关重要。例如如果你有一个高优先级的实时控制命令TG0和一个低优先级的后台数据记录任务TG1你通常希望TG0能随时打断TG1。但如果TG1的某个缓冲区配置了CSHOLD比如正在读取一个多字节的传感器ID那么TG0就必须等待这个保持操作完成这可能会引入不可控的延迟。因此在划分TG和设计缓冲区时必须仔细考虑这些控制位的使用。4. 中断管理寄存器簇构建高效的事件响应系统MibSPI的中断系统是其“自动化”和“事件驱动”特性的重要体现。它允许CPU在TG传输完成或挂起时被及时通知从而进行数据处理或下一步调度而不是傻傻地轮询状态位。与TG相关的中断管理主要涉及五个寄存器TGITENST,TGITENCR,TGITLVST,TGITLVCR,TGINTFLG。4.1 中断使能与清除TGITENST/TGITENCR这是一对功能对称的寄存器用于独立地管理每个TG的两种中断传输完成RDY和传输挂起SUS的使能状态。TGITENST (Set Register): 写1到某一位使能对应TG的中断。写0无效。TGITENCR (Clear Register): 写1到某一位禁用对应TG的中断。写0无效。这种“置位-清零”寄存器设计是外设中常见的安全模式。它避免了软件在读写一个通用“使能寄存器”时因“读-修改-写”操作被中断打断而意外修改其他位的问题。例如你想使能TG2的完成中断只需TGITENST (1 (162))因为SETINTENRDY位在[31:16]TG2对应Bit 18。想禁用它则TGITENCR (1 (162))。4.2 中断级别设置TGITLVST/TGITLVCR在一些支持多级中断的MCU架构中例如TI Hercules系列有INT0和INT1两个可编程中断级别这两个寄存器用于将TG中断映射到不同的中断线上。TGITLVST: 写1到某一位将对应TG的中断级别设置为INT1通常优先级更高或可单独配置。TGITLVCR: 写1到某一位将对应TG的中断级别清除为INT0默认级别。通过合理分配中断级别你可以让关键TG的传输完成中断如发动机喷油控制能够抢占非关键TG的中断如仪表盘数据更新满足系统的实时性要求。4.3 中断标志寄存器TGINTFLG与向量寄存器TGINTVECTx这是中断处理的核心。TGINTFLG: 这是一个状态寄存器。当某个TG的传输完成或挂起时硬件会自动将对应的标志位INTFLGRDYx或INTFLGSUSx置1无论该中断是否被使能。这为软件查询提供了可能。清除这些标志位通常有两种方式软件写1清除W1C: 直接向该位写1。硬件自动清除推荐: 通过读取中断向量寄存器TGINTVECT0或TGINTVECT1。这是最高效的方式。当发生TG中断时CPU会跳转到MibSPI的中断服务程序ISR。在ISR中你应该首先读取TGINTVECT0/1。这个寄存器会告诉你是哪个TGINTVECT字段的哪种事件SUSPEND字段0表示完成1表示挂起触发了本次中断。读取这个向量的操作会自动清除TGINTFLG中对应的标志位。这种设计确保了中断源被准确识别并自动清理状态避免了在复杂中断场景下漏清或多清标志位的问题。中断配置与处理流程示例假设我们需要配置TG3在传输完成时产生一个中断并自动清除标志。初始化配置// 使能TG3的传输完成中断 MibSPI1_TGITENST (1 (16 3)); // 置位SETINTENRDY[3] // 可选设置中断级别为INT1 // MibSPI1_TGITLVST (1 (16 3)); // 配置TG3的触发源、起始地址等... // 最后使能TG3 MibSPI1_TG3CTRL | (1 31); // 置位TGENA中断服务程序ISRvoid mibspi1Isr(void) { uint32_t intVector MibSPI1_TGINTVECT0; // 读取向量寄存器此操作会清除标志位 uint16_t tgNum (intVector 0xF0) 4; // 提取TG编号 (假设向量格式) uint8_t isSuspend (intVector 0x01); // 提取事件类型 if (tgNum 3 isSuspend 0) { // 处理TG3传输完成 // 1. 从缓冲区RAM读取接收到的数据 // 2. 准备下一次要发送的数据如果需要 // 3. 如果配置了ONESHOT可能需要重新使能TG3 } // ... 处理其他TG的中断 }5. 多缓冲区模式使能与RAM访问MIBSPIE在深入TG和中断之前有一个至关重要的“总开关”寄存器——MIBSPIEMulti-buffer Mode Enable Register。MibSPI有两种工作模式兼容模式Compatibility Mode: 复位后的默认模式。此时MibSPI的行为与一个标准的、无多缓冲区的SPI模块完全一致。所有多缓冲区相关的功能TG、缓冲区RAM都不可用。多缓冲区模式Multi-buffer Mode: 启用高级功能的工作模式。MSPIENA (Bit 0)就是这个模式切换开关。必须将其置1才能访问和配置我们前面讨论的所有TG控制寄存器、中断寄存器以及多缓冲区RAM。一个标准的初始化顺序是先配置基本的SPI全局控制寄存器如SPIGCR0设置主模式、使能模块然后立即将MIBSPIE的MSPIENA位置1之后再开始配置TG、格式化缓冲区等高级功能。RXRAM_ACCESS (Bit 16)是一个用于测试的位。在正常操作模式下多缓冲区RAM的接收RX区域对CPU是只读的这是为了防止软件意外破坏正在接收或待接收的数据。只有在芯片测试或特殊调试阶段才需要将此位置1以获得对RX RAM的完全读写权限。重要警告手册强调测试完成后必须通过拉低SPIGCR0[0]nRESET对MibSPI进行一次局部复位以重新初始化缓冲区RAM然后才能恢复正常操作。在应用程序中绝对不要设置此位。6. 其他关键辅助寄存器解析6.1 滴答计数器TICKCNT产生精准的内部定时触发TICKCNT寄存器用于生成一个内部的、周期性的触发信号可以作为TG的触发源TRIGSRC Fh。这对于需要固定频率采样或发送数据的应用非常有用无需占用外部定时器或GPIO。TICKVALUE (Bits 15:0): 计数重载值。计数器从该值开始向下计数。CLKCTRL (Bits 29:28): 选择计数器的时钟源可以是四个SPIFMTx格式寄存器所定义的SPICLK之一。这意味着你可以用通信时钟本身来产生触发实现“每传输N个位后触发一次”的效果。RELOAD (Bit 30): 软件重载位。写1可立即将TICKVALUE重新加载到计数器中。TICKENA (Bit 31): 使能位。置1后计数器开始工作。每次计数器下溢到0时它会自动重载TICKVALUE并翻转一次内部的触发信号。这个翻转的边沿或电平取决于TG的TRIGEVT配置就可以触发TG。配置示例假设SPICLK为10MHz我们希望每1ms触发一次TG。计算计数值1ms / (1/10MHz) 1ms / 100ns 10000个时钟周期。设置TICKVALUE 10000 - 1 9999因为从N计数到0是N1个周期通常按此调整。设置CLKCTRL选择正确的SPICLK源。置位TICKENA启动计数器。将某个TG的TRIGSRC设置为FhTICK并配置TRIGEVT为边沿触发。6.2 最后TG结束指针LTGPEND与当前服务TGTG_IN_SERVICELPEND (Bits 14:8): 最后一个传输组的结束地址。在多缓冲区RAM中TG的结束地址通常由下一个TG的起始地址减一隐含定义。但对于最后一个TG编号最大的那个后面没有TG了因此必须用LPEND显式指定它的结束地址。这是一个非常容易遗漏的配置点如果你配置了多个TG但最后一个TG的数据传输不全首先检查LPEND是否指向了正确的缓冲区末尾。TG_IN_SERVICE (Bits 28:24): 这是一个只读字段实时指示序列器Sequencer当前正在服务哪个TG。在调试复杂的多TG交互、优先级抢占问题时这个字段是无价之宝。你可以通过读取它来了解系统的实时状态。7. 实战配置流程与常见问题排查7.1 一个完整的MibSPI多TG应用配置流程假设一个应用TG0用于每10ms通过4线并行模式高速读取一次图像传感器数据使用Tick计数器触发TG1用于响应一个外部按键下降沿触发通过标准SPI发送一个控制命令。步骤一基础与模式使能配置系统时钟和引脚复用将SPI引脚和额外的3个并行数据引脚复用为MibSPI功能。配置SPIGCR0使能MibSPI模块设置为主模式。立即将MIBSPIE寄存器的MSPIENA位置1进入多缓冲区模式。步骤二数据格式与并行模式配置配置SPIFMT0用于标准SPITG1使用数据长度16位模式0。配置SPIFMT1用于4线并行模式TG0使用数据长度8位模式0。配置SPIPMCTRL寄存器设置Byte1的PMODE124线模式。步骤三初始化多缓冲区RAM在内存中定义好缓冲区控制字和数据的结构。通过CPU或DMA将TG0和TG1的缓冲区控制字及初始发送数据写入到MibSPI的多缓冲区RAM的指定位置。记下TG0和TG1的起始地址例如PSTART00,PSTART120。步骤四配置Tick计数器为TG0根据系统时钟和所需10ms间隔计算TICKVALUE。配置TICKCNT寄存器选择时钟源写入TICKVALUE最后置位TICKENA。步骤五配置传输组控制寄存器配置TG0CTRL:PSTART0 0TRIGSRC0 Fh(TICK)TRIGEVT0 1h(Rising Edge假设Tick信号上升沿触发)ONESHOT0 0(循环触发)PRST0 0(不打断当前传输)先不置位TGENA0。配置TG1CTRL:PSTART1 20TRIGSRC1 1h(EXT0假设按键接在EXT0引脚)TRIGEVT1 2h(Falling Edge)ONESHOT1 1(按一次发一次)PRST1 0先不置位TGENA1。步骤六配置中断在TGITENST中使能TG0和TG1的传输完成中断SETINTENRDY。配置MCU的中断控制器将MibSPI中断线连接到CPU并设置优先级。编写MibSPI中断服务程序ISR通过读取TGINTVECT0来识别中断源并处理数据。步骤七设置LTGPEND并最终使能假设TG1是最后一个使用的TG其缓冲区结束地址是49。则设置LTGPEND寄存器的LPEND 49。最后依次置位TG0CTRL和TG1CTRL的TGENA位启动传输组。7.2 常见问题排查速查表现象可能原因排查步骤TG完全不触发1. 未进入多缓冲区模式。2.TGENA位未置位。3. 触发源配置错误如EXT引脚未映射。4. 触发事件类型与信号不匹配。1. 检查MIBSPIE.MSPIENA是否为1。2. 检查对应TGxCTRL的TGENA位。3. 确认TRIGSRC选择正确且外部信号实际有变化用示波器或逻辑分析仪抓取。4. 确认TRIGEVT边沿/电平与信号实际变化一致。TG只触发一次ONESHOT位被设置为1。检查TGxCTRL.ONESHOT若需循环触发则清0。数据传输错误错位、乱码1. 数据格式SPIFMTx配置错误长度、极性与相位。2. 并行模式PMODEx配置与硬件连接不符。3. 缓冲区控制字段中的DFSEL未选择正确的数据格式。1. 核对设备数据手册的SPI时序修正SPIFMTx。2. 确认PMODEx设置与实际使用的数据线数量一致。3. 检查多缓冲区RAM中每个控制字的DFSEL位。最后一个TG数据丢失或不完整LTGPEND.LPEND未正确设置。确认LPEND的值指向最后一个TG缓冲区的最后一个控制字的地址。中断无法进入1. 中断未使能TGITENST。2. MCU全局中断未开启。3. 中断向量寄存器读取方式错误导致标志未清除后续中断被屏蔽。1. 检查TGITENST对应位。2. 检查MCU的全局中断使能位和中断控制器配置。3. 在ISR中务必先读取TGINTVECT0/1而不是直接读TGINTFLG。高优先级TG无法抢占低优先级TG低优先级TG正在传输带有CSHOLD、LOCK或NOBRK标志的缓冲区。检查低优先级TG当前缓冲区的控制字段。根据应用需求考虑调整缓冲区设计或接受此延迟特性。使能TG后程序跑飞或硬件错误多缓冲区RAM内容未初始化或初始化错误。缓冲区控制字包含非法地址或配置。在使能TG前确保已向多缓冲区RAM的相应位置写入了正确的控制字和初始数据。使用调试器查看RAM区域内容。配置MibSPI是一个精细活它要求开发者对硬件有清晰的认识对通信流程有完整的规划。最好的调试伙伴就是逻辑分析仪可以同时抓取SPI时钟、数据线、片选以及触发信号直观地看到配置是否按预期产生了通信波形。从理解每个寄存器的位开始到构建一个稳定运行的多TG系统这个过程虽然充满挑战但一旦掌握你将能设计出极其高效、实时性强的嵌入式通信子系统。