I3C总线中断与队列阈值控制:从寄存器到实战的深度解析

发布时间:2026/6/28 16:57:29

I3C总线中断与队列阈值控制:从寄存器到实战的深度解析 1. I3C总线中断与队列阈值控制从寄存器到实战的深度解析在嵌入式系统尤其是那些对实时性要求苛刻的传感器中枢或执行器控制场景里中断管理的好坏直接决定了系统的“灵魂”——响应速度和运行效率。我见过太多项目硬件性能不差却因为中断配置不当要么响应迟钝错过关键数据要么被频繁中断拖垮CPU导致整体性能大打折扣。I3C总线作为I2C的“全面升级版”其引入的队列和阈值中断机制正是为了解决这类痛点而生的精妙设计。简单来说你可以把I3C控制器想象成一个高效的中转仓库。数据命令、响应、状态就像包裹不断被送入不同的队列如命令队列、响应队列和缓冲区。中断就是仓库管理员CPU的“呼叫铃”。如果每来一个包裹就响一次铃管理员会疲于奔命如果等仓库塞满了再响铃又可能导致包裹积压延误。I3C的队列阈值控制寄存器就是让你可以精确设置这个“呼叫铃”的触发条件比如“当高优先级命令队列还剩1个空位时叫我”或者“当普通接收状态队列积累了3条记录时再通知我”。今天我们就以瑞萨RA8D2微控制器的I3C模块为例抛开手册上冰冷的位域描述深入聊聊这些寄存器——NRQTHCTL、HQTHCTL、HTBTHCTL——在实际项目中到底该怎么用背后的设计逻辑是什么以及我踩过哪些坑才总结出的配置心得。无论你是正在调试RA8D2的嵌入式工程师还是希望深入理解I3C中断机制的开发者这篇文章都将为你提供从原理到实操的完整路线图。2. 核心寄存器功能与设计逻辑拆解在动手配置之前我们必须先理解I3C中断系统的整体架构和各个寄存器的职责。RA8D2的I3C模块将中断源分门别类并通过多级寄存器进行精细控制这套设计思路非常值得品味。2.1 中断系统的三层控制模型I3C的中断管理并非一个开关那么简单它遵循一个清晰的三层模型状态标志层、状态使能层和中断使能层。很多初学者直接去配置中断使能寄存器BIE却发现中断不触发问题往往就出在没有理解这个模型。状态标志寄存器这是最底层硬件检测到事件如队列达到阈值、总线出现START条件时会先将对应的状态标志位置1。例如BST寄存器记录总线事件NTST寄存器记录普通传输队列和缓冲区的状态。此时即使标志位为1也不会产生中断信号。状态使能寄存器这一层决定哪些状态标志位有资格“晋级”。例如BSTE寄存器控制是否将BST中的事件记录为待处理状态NTSTE寄存器控制是否监控NTST中的队列状态。只有被使能的状态事件才会被视为有效的待处理状态。中断使能寄存器这是最后一道关卡决定哪些“有效的待处理状态”最终能触发一个硬件中断信号输出到CPU的NVIC。BIE寄存器就负责这一层。关键理解一个中断的完整触发链条是硬件事件发生 → 状态标志位置1 → (若状态使能位为1) 状态变为有效 → (若中断使能位为1) 触发硬件中断。配置中断时必须三层都打通。一个常见的错误是只设置了BIE却忘了设置对应的BSTE或NTSTE导致状态标志位变了但中断死活不来。2.2 阈值控制寄存器的核心使命我们今天重点关注的NRQTHCTL、HQTHCTL、HTBTHCTL等阈值控制寄存器其作用就是定义“硬件事件”的具体条件。它们不直接参与上述三层控制而是定义了状态标志何时该被置位。以NRQTHCTLNormal Receive Status Queue Threshold Control Register为例它只有一个有效字段RSQTH[7:0]。这个寄存器回答了这样一个问题“普通接收状态队列Normal Receive Status Queue里有多少条记录时才需要让NTST.RSQFF标志位置1”如果RSQTH 0x00队列里只要有1条状态记录DWORDNTST.RSQFF就置1。如果RSQTH NN1~255队列里积累到N1条状态记录时NTST.RSQFF才置1。设计逻辑解析为什么是N1这是一种常见的“零基准”或“偏移量”设计。将阈值设为0代表最敏感的中断触发1条就中断这简化了软件配置。对于其他值采用N1使得阈值设置更符合直觉如果你想在队列有4条记录时中断直接设置RSQTH 3即可。这种设计在硬件逻辑实现上也很简洁。2.3 各阈值寄存器全景图与关联RA8D2的I3C模块提供了多组阈值寄存器分别管理不同优先级和不同功能的队列/缓冲区。理解它们之间的关系是进行正确配置的基础。寄存器名称偏移地址核心控制字段管理对象支持模式关键作用NRQTHCTL0x1C0RSQTH[7:0]普通接收状态队列次级主模式、从模式控制接收状态报告的中断频率避免每个状态都中断CPU。HQTHCTL0x1C4CMDQTH[7:0]RSPQTH[7:0]高优先级命令队列、高优先级响应队列主模式、次级主模式分离高优先级流量确保关键命令和响应能被及时处理。HTBTHCTL0x1C8TXDBTH[2:0]RXDBTH[2:0]TXSTTH[2:0]RXSTTH[2:0]高优先级发送/接收数据缓冲区、发送/接收启动阈值主模式、次级主模式优化DMA传输效率控制数据传输的启动时机实现“存储转发”或“阈值”模式。NQTHCTL(手册提及未在输入中详述)CMDQTH,RSPQTH,IBIQTH普通命令/响应/IBI队列所有I3C模式管理普通优先级流量的中断触发点。它们是如何协作的想象一个数据采集系统传感器从设备通过I3C上报数据。主控制器RA8D2的普通接收缓冲区由NTBTHCTL0控制类似HTBTHCTL但针对普通优先级在数据达到阈值后触发中断DMA将数据搬走。同时接收状态成功、CRC错误等被填入接收状态队列。NRQTHCTL的RSQTH决定了是每收到一个状态就中断CPU处理一次还是积累多个状态后批量处理这能极大影响CPU开销。而对于系统关键的控制命令如紧急停止则应放入高优先级命令队列并由HQTHCTL的CMDQTH配置为队列一空就立即中断确保最低延迟。3. 关键寄存器深度剖析与配置策略了解了全局视图后我们深入到每个关键寄存器的细节看看每个比特位到底在控制什么以及在实际项目中如何设置它们。3.1 NRQTHCTL精细化接收状态管理这个寄存器是优化从设备或次级主设备处理效率的关键。它的对象是Normal Receive Status Queue这是一个存储每次接收操作状态信息如ACK/NACK、错误码的硬件队列。位域详解RSQTH[7:0] 这是唯一的有效控制字段。如前所述它定义了触发NTST.RSQFF标志置位的队列条目数阈值。位[31:8] 保留位。读取为0写入时必须为0。这是一个良好的硬件设计习惯为未来功能扩展留出空间同时避免因误写保留位引发未定义行为。配置策略与实战计算 假设你的系统是一个I3C从设备负责收集传感器数据并上报。主设备会频繁读取数据每次读取都会产生一个状态条目存入这个队列。低负载、高实时性场景如果你需要立即知道每一次读取操作是否成功例如在调试阶段或对每次传输都有严格反馈要求的场景应将RSQTH设为0x00。这样队列中每产生一个状态条目NTST.RSQFF就会置位。结合NTSTE.RSQFE状态队列满中断使能和NIE中的相应中断使能位就能为每个状态产生中断让CPU及时处理。// 配置为每个状态条目都触发中断 I3C0-NRQTHCTL 0x00000000; // RSQTH 0 I3C0-NTSTE | (1 x); // 使能RSQFF状态标志 (x为RSQFE位在NTSTE中的位置需查手册) I3C0-NIE | (1 y); // 使能接收状态队列满中断 (y为对应中断使能位在NIE中的位置)高负载、批处理场景在数据流稳定的生产环境中频繁中断处理状态信息是巨大的开销。此时应该利用队列的缓冲能力进行批处理。例如该队列深度为8个DWORD具体深度需查芯片手册示例中可能为2此处假设为8。你可以设置RSQTH 7。这意味着只有当队列中积累了8个状态条目即N1718时RSQFF才会置位从而产生一次中断。在这次中断服务程序ISR中你可以一次性读取并处理这8个状态将中断频率降低为原来的1/8。// 配置为队列快满时假设深度8阈值7才触发中断进行批处理 #define RS_QUEUE_DEPTH 8 I3C0-NRQTHCTL (RS_QUEUE_DEPTH - 1); // RSQTH 7 // ... 同样需要使能NTSTE和NIE中的相应位避坑指南手册中提到“If this field is greater than (Normal Receive Status Queue size – 1), then only the number of bits required to address the full buffer depth will be considered.” 这句话的意思是如果你设置的阈值超过了队列深度减一硬件只会使用能表示队列深度的最低有效位。例如队列深度为4需要2比特位表示0-3你写入RSQTH10二进制1010硬件实际只取低2位10二进制即2。所以最安全的做法是设置的值不要超过(队列深度 - 1)。3.2 HQTHCTL高优先级通道的即时响应保障高优先级队列用于传输不能容忍延迟的命令和响应例如设备中断请求、关键寄存器写入等。HQTHCTL寄存器同时管理着高优先级命令队列和响应队列的阈值。位域详解CMDQTH[7:0] 高优先级命令队列阈值。它控制队列空位数量来触发I3C_HCMD中断。0x00 一个非常特殊的设置。它表示当高优先级命令队列完全为空时产生中断。这通常用于DMA传输场景当DMA将一批高优先级命令写入队列后队列非空不中断。DMA传输完成队列变空此时产生中断通知CPU“高优先级命令已全部提交给硬件可以准备下一批了”。其他值N 当高优先级命令队列中的空余条目数等于N时产生中断。这用于流控当队列有足够空位N个时中断CPU或DMA以便及时补充命令保持流水线不断。RSPQTH[7:0] 高优先级响应队列阈值。其逻辑与NRQTHCTL的RSQTH类似但对象是高优先级响应队列。它控制队列条目数来触发I3C_HRESP中断。0x00 当队列中有1个响应条目时产生中断。其他值N 当队列中有N1个响应条目时产生中断。配置策略与场景分析 假设系统需要处理一个高实时性的触摸传感器其触摸中断通过I3C的带内中断IBI上报主控制器需要立即读取触摸坐标。命令队列配置 我们希望一旦有空位就能尽快填充读坐标的命令。如果高优先级命令队列深度为4我们可以设置CMDQTH 1。这意味着当队列中有1个空位时即已使用3个就触发I3C_HCMD中断在ISR中我们可以立即向队列写入下一个读命令确保队列始终接近满负荷硬件可以持续工作减少空闲等待时间。// 高优先级命令队列深度为4设置有空位1个即中断 I3C0-HQTHCTL ~(0xFF); // 清零CMDQTH低8位 I3C0-HQTHCTL | (1 0); // CMDQTH 1响应队列配置 对于触摸坐标的响应我们希望尽快处理但也不希望每个响应都中断。可以设置RSPQTH 0这样每个高优先级响应到达都会立即触发I3C_HRESP中断确保最低的响应延迟。// 高优先级响应队列每个响应都立即中断 I3C0-HQTHCTL ~(0xFF00); // 清零RSPQTH[15:8] // RSPQTH默认为0即每个响应都中断3.3 HTBTHCTL数据流控与传输模式的核心这是最复杂的阈值寄存器之一它管理着高优先级数据缓冲区TXDB/RXDB的中断阈值和传输启动阈值TXSTTH/RXSTTH。后者直接决定了DMA传输的启动时机对性能影响巨大。位域详解TXDBTH[2:0] 高优先级发送数据缓冲区中断阈值。定义当发送缓冲区有多少个空DWORD时触发I3C_HTX中断。例如设置为0000表示当有2个空DWORD时中断注意某些实现中000可能对应一个固定值需严格查手册。RXDBTH[2:0] 高优先级接收数据缓冲区中断阈值。定义当接收缓冲区有多少个有效数据DWORD时触发I3C_HRX中断。TXSTTH[2:0]高优先级发送启动阈值。这不是中断阈值而是控制硬件何时开始将缓冲区数据发送到总线上。这是实现“存储转发”与“阈值”两种传输模式的关键。RXSTTH[2:0]高优先级接收启动阈值。控制硬件在接收数据时要求接收缓冲区至少有多少个空DWORD后才发起总线读操作。“存储转发” vs “阈值”模式深度解析 这是HTBTHCTL最精妙的部分主要通过TXSTTH和RXSTTH来控制。存储转发模式 将TXSTTH设置为等于发送缓冲区大小例如缓冲区深度为8则设TXSTTH7注意需确认硬件设计通常设置为最大值或特定值表示此模式。在此模式下对于一次写传输如果待发送数据长度大于缓冲区大小硬件会等待直到整个发送缓冲区被填满才开始在总线上发送数据。如果待发送数据长度小于等于缓冲区大小硬件会等待直到有足够空间容纳所有待发送数据才开始发送。优点 数据在缓冲区中准备好再发送总线利用率高不会因为DMA来不及供数而导致总线空闲。尤其适合大数据块传输。缺点 引入了“填充缓冲区”的等待延迟对于小数据包或低延迟要求场景不友好。阈值模式 将TXSTTH设置为一个小于缓冲区大小的值例如TXSTTH2。在此模式下只要发送缓冲区中的空余DWORD数达到或超过这个阈值硬件就立即启动总线写操作。优点 启动延迟极低可以实现“流水线”操作总线在发送当前数据的同时DMA在向后端缓冲区填充后续数据。非常适合实时性要求高、数据流连续的场景。缺点 如果DMA供数速度跟不上总线发送速度会导致缓冲区被取空总线出现空闲等待降低整体吞吐量。实战配置示例 假设一个音频数据传输场景需要高实时性、连续流。发送端配置主设备发送音频数据我们希望尽快启动发送以减少延迟采用阈值模式。发送缓冲区深度为8 DWORDs。设置TXSTTH 1。这意味着只要DMA向缓冲区写入1个DWORD的数据使空余数达到阈值1硬件就立即开始总线传输。同时设置TXDBTH 2。当发送缓冲区有2个空DWORD时触发I3C_HTX中断通知DMA或CPU可以继续填充数据从而形成生产-消费的流水线。// 配置高优先级发送阈值模式低延迟启动 I3C0-HTBTHCTL ~(0x00000007); // 清零TXDBTH[2:0] I3C0-HTBTHCTL | (2 0); // TXDBTH 2空余2个DWORD时中断 I3C0-HTBTHCTL ~(0x00070000); // 清零TXSTTH[18:16] I3C0-HTBTHCTL | (1 16); // TXSTTH 1空余1个DWORD即启动发送接收端配置从设备接收配置命令命令数据包较小但要求可靠。采用存储转发模式确保数据完整性。接收缓冲区深度为4 DWORDs。设置RXSTTH 3或硬件定义的全满值表示存储转发模式。这意味着硬件会等待接收缓冲区有足够空间容纳整个预期数据包后才发起总线读请求。设置RXDBTH 0。当接收缓冲区有1个有效DWORD数据时就触发I3C_HRX中断及时读取数据。// 配置高优先级接收存储转发模式保证数据块完整 I3C0-HTBTHCTL ~(0x00000700); // 清零RXDBTH[10:8] // RXDBTH 0 (或1根据手册)有数据即中断 I3C0-HTBTHCTL ~(0x07000000); // 清零RXSTTH[26:24] I3C0-HTBTHCTL | (3 24); // RXSTTH 3 (假设深度4表示存储转发)等待缓冲区有足够空间4. 实战配置流程与中断服务程序框架理解了每个寄存器的含义后我们需要将其串联起来形成一套完整的配置流程并编写相应的中断服务程序ISR框架。这里以配置一个使用高优先级队列和DMA进行传感器数据读取的RA8D2 I3C主设备为例。4.1 初始化配置步骤基础模块初始化 首先完成I3C模块的时钟使能、引脚复用、基本模式主模式和速度配置。阈值寄存器配置 这是优化性能的核心。// 1. 配置高优先级队列阈值 (HQTHCTL) // 假设高优先级命令队列深度为2我们希望队列一空就中断通知DMA填充下一批命令 I3C0-HQTHCTL 0x0000; // CMDQTH0 (队列空中断) RSPQTH0 (每个响应都中断) // 2. 配置高优先级数据缓冲区阈值与启动模式 (HTBTHCTL) // 采用阈值模式低延迟启动发送和接收 uint32_t htbthctl_val 0; htbthctl_val | (1 0); // TXDBTH 1: 发送缓冲区有1个空位时触发HTX中断 htbthctl_val | (0 8); // RXDBTH 0: 接收缓冲区有1个数据时触发HRX中断 htbthctl_val | (1 16); // TXSTTH 1: 发送缓冲区有1个空位即启动传输阈值模式 htbthctl_val | (0 24); // RXSTTH 0: 接收缓冲区有2个空位即启动传输阈值模式根据手册0可能对应2 I3C0-HTBTHCTL htbthctl_val; // 3. 配置普通接收状态队列阈值 (NRQTHCTL) // 批处理状态降低中断频率。假设队列深度为4设置积累3个状态再中断 I3C0-NRQTHCTL (3 0xFF); // RSQTH 3状态与中断使能配置 打通中断触发链条。// 使能高优先级命令队列空状态标志 I3C0-HTSTE | (1 CMDQE_BIT_POS); // 假设CMDQE_BIT_POS是HTSTE中命令队列空使能位 // 使能高优先级发送缓冲区空中断 I3C0-HIE | (1 HTXIE_BIT_POS); // 使能I3C_HTX中断 // 使能高优先级响应队列满状态标志 I3C0-HTSTE | (1 RSPQF_BIT_POS); // 使能高优先级响应中断 I3C0-HIE | (1 HRESPIE_BIT_POS); // 使能普通接收状态队列满状态标志 I3C0-NTSTE | (1 RSQFE_BIT_POS); // 使能普通接收状态队列中断 I3C0-NIE | (1 RSQFFIE_BIT_POS); // 最后在NVIC中使能I3C全局中断 NVIC_EnableIRQ(I3C0_IRQn);4.2 中断服务程序ISR处理框架在ISR中首要任务是读取中断状态寄存器判断中断源然后执行相应操作并清除中断标志。清除标志的顺序和方式至关重要否则会导致中断丢失或重复触发。void I3C0_IRQHandler(void) { uint32_t int_status; // 1. 判断并处理高优先级中断 int_status I3C0-HISR; // 读取高优先级中断状态寄存器 if (int_status HISR_HTX_MASK) { // 高优先级发送缓冲区空中断 // 检查HTST.TDBEF标志确认是缓冲区空事件 // 启动DMA或由CPU向高优先级发送数据缓冲区写入下一批数据 // ... 数据填充操作 ... // 清除中断标志通常需要向状态标志位写0具体操作见手册可能是直接写HTST I3C0-HTST ~HTST_TDBEF_MASK; // 也可能需要操作特定的中断清除寄存器 } if (int_status HISR_HRESP_MASK) { // 高优先级响应中断 // 从高优先级响应队列读取响应数据 uint32_t response I3C0-HRESPQ_POP_REG; // 假设的读操作 // 处理响应... // 清除中断标志 I3C0-HTST ~HTST_RSPQF_MASK; } // 2. 判断并处理普通中断 int_status I3C0-NISR; // 读取普通中断状态寄存器 if (int_status NISR_RSQFF_MASK) { // 普通接收状态队列满中断 // 批量读取状态队列 while (!(I3C0-NTST NTST_RSQFF_MASK)) { // 或者检查队列空标志 uint32_t status I3C0-NRSQ_POP_REG; // 读取一个状态 process_receive_status(status); // 处理单个状态 } // 清除中断标志 I3C0-NTST ~NTST_RSQFF_MASK; } // ... 处理其他普通中断源 }关键操作顺序 在ISR中先处理中断事件如读取数据再清除中断标志。如果先清除标志但在清除后、处理前硬件又产生了新的事件可能会导致这个新事件的状态标志被置位但中断可能因为刚被清除而无法立即触发取决于中断类型造成事件丢失。对于需要写1清除的标志务必遵循“读-改-写”或手册指定的确切操作。5. 常见问题排查与性能调优经验即使按照手册配置在实际调试中也可能遇到各种问题。以下是我在多个项目中总结的典型问题及其排查思路。5.1 中断不触发或触发异常这是最常见的问题可以按照以下流程图进行系统性排查中断不触发 ├─ 检查硬件连接与基础配置时钟、引脚、主从模式、总线速度是否正常 ├─ 检查三层使能是否全部打开 │ 1. 状态标志位是否因事件而置1查BST/NTST/HTST │ 2. 对应的状态使能位BSTE/NTSTE/HTSTE是否置1 │ 3. 对应的中断使能位BIE/NIE/HIE是否置1 │ 4. NVIC中的I3C全局中断是否使能 ├─ 检查阈值配置是否合理 │ * 阈值是否超过队列/缓冲区深度(手册规定大于Depth-1则取低位) │ * 对于CMDQTH你是希望“空时中断”还是“有空位时中断”理解0x00的特殊含义。 ├─ 检查中断标志清除方式是否正确 │ * 是写0清除、写1清除还是读后自动清除务必严格按手册操作。 │ * 清除操作是否在ISR中正确执行是否在清除前完成了必要的数据处理 └─ 检查是否有更高优先级中断阻塞或中断嵌套问题案例分享我曾遇到I3C_HTX中断发送缓冲区空始终不触发。排查后发现HTBTHCTL.TXDBTH被设置为2但高优先级发送缓冲区深度只有2。根据手册当设置值大于深度-1即大于1时只有低位有效。我设置了2二进制10低位是0实际阈值变成了0代表缓冲区有2个空位时中断。而我的DMA一次只写1个数据缓冲区从未达到“2个空位”的状态因此中断永不触发。将TXDBTH改为1后问题解决。5.2 数据丢失或DMA传输不连续这通常与缓冲区阈值和启动阈值的配合不当有关。症状 DMA似乎只传输了一次就停止了。排查检查TXSTTH/RXSTTH模式 如果你在阈值模式下使用DMA并且TXDBTH中断阈值设置得过大而DMA传输的块大小较小可能导致DMA在填满缓冲区达到中断阈值前硬件就因为达到TXSTTH而启动了总线发送。发送完成后缓冲区变空但未达到中断阈值DMA得不到新的传输请求数据流中断。解决方法确保在阈值模式下TXDBTH设置得足够小例如1或2以便在缓冲区有空余时能及时触发中断请求DMA填充。检查DMA配置 DMA的传输完成中断是否使能并正确处理DMA的源/目标地址递增模式、数据宽度是否与I3C缓冲区匹配检查“存储转发”模式下的数据长度 在存储转发模式下如果你要发送的数据长度小于缓冲区大小硬件会等待缓冲区有足够空间容纳所有数据后才启动。如果DMA配置的传输数据量小于你预设的“待发送数据长度”硬件可能会一直等待。确保软件设置的数据长度与DMA实际传输量一致。5.3 系统吞吐量未达预期吞吐量瓶颈可能来自多方面。中断开销过大 如果每个数据单元都产生中断CPU开销会很大。优化增大NRQTHCTL.RSQTH、HTBTHCTL.RXDBTH等阈值让硬件积累更多数据/状态后再中断进行批处理。同时尽可能使用DMA来搬运数据将CPU从中断搬运数据的负担中解放出来仅让CPU处理必要的队列管理和事件响应。总线利用率低 在“阈值模式”下如果TXSTTH设置过大会导致总线等待数据的时间变长。优化在DMA性能允许的情况下减小TXSTTH让总线更早启动发送。同时配合使用DMA的双缓冲区或循环缓冲区模式实现数据供应的无缝衔接。队列深度不足 如果硬件队列深度太浅例如只有2即使优化阈值也容易导致流水线停顿。这是硬件限制需要在选型时考虑。软件上可以通过更精细的流控和更小的传输块来缓解。5.4 功耗考虑在低功耗应用中中断频率直接影响功耗。动态功耗 频繁的中断意味着CPU需要频繁从低功耗模式唤醒增加动态功耗。通过提高阈值进行批处理可以显著减少唤醒次数。静态功耗 一些微控制器在I3C模块使能但空闲时仍然会消耗一定功率。如果应用中有长时间的空闲期可以考虑在软件层面动态关闭I3C模块或将其置于更低功耗的状态并在需要时通过外部事件或定时器唤醒重新初始化。RA8D2的I3C模块可能支持休眠或停止模式具体需参考电源管理章节。调优是一个迭代过程 没有一套参数适合所有场景。最好的方法是在系统集成测试阶段利用调试器或性能分析工具监控中断频率、CPU负载和实际数据传输速率。从一个保守的配置开始如较小的阈值逐步增加阈值观察系统负载和延迟的变化直到找到满足实时性要求下中断开销最小的平衡点。记住所有阈值配置的最终目标是让数据在硬件队列、总线和系统内存之间流畅地流动既不让CPU过于忙碌也不让总线空闲等待。

相关新闻