文件名称:接收状态的区域-史上最直白的ica教程
文件大小:5.26MB
文件格式:PDF
更新时间:2024-06-23 16:19:26
LPC23XX 中文资料
广州周立功单片机发展有限公司 第11章 以太网控制器 LPC23xx 用户手册 ©2008 Guangzhou ZLGMCU Development CO., LTD 141 接收描述符存放在存储器的一个数组中。数组的基址存放在 RxDescriptor 寄存器中,并 且该基址应该与 4 字节边界对齐。数组中描述符的个数存放在 RxDescriptorNumber 寄存器 中,该寄存器使用减 1 编码,例如,如果数组有 8 个元素,则该寄存器的值应该是 7。还有 一个与描述符平行的状态数组。对于描述符数组中的每个元素,状态数组中均有一个相关的 状态区域。状态数组的基址存放在 RxStatus 寄存器中,并且该基址必须与 8 字节地址边界 对齐。在操作过程中(当接收通道使能时),不可以对 RxDescriptor、RxStatus 和 RxDescriptorNumber 寄存器进行修改。 另有两个寄存器 RxConsumeIndex 和 RxProduceIndex,用于定义下一个将被硬件和软件 使用的描述符单元。这两个寄存器可充当计数器,从 0 开始计数并在计数值到达 RxDescriptorNumber 寄存器中的值时回到 0。RxProduceIndex 包含的是将被接收到的下一帧 数据填充的描述符的索引。RxConsumeIndex 由软件来编程,它是软件接收驱动程序下一次 即将处理的描述符的索引。当 RxProduceIndex==RxConsumeIndex 时,接收缓冲区为空。当 RxProduceIndex==RxConsumeIndex-1(考虑到它是一个封包设计)时,接收缓冲区满,新接 收到的数据将产生溢出,除非软件驱动程序将一个或多个描述符释放。 每个接收描述符在存储器中占据两个字(8 个字节)。同样,每个状态区域也在存储器 中占据两个字(8 个字节)。每个接收描述符均由一个指针和一个控制字组成,指针(接收 描述符区域中的包)指向用来存放接收数据的数据缓冲区,控制字包含的是控制信息。数据 包区域有一个零地址偏移。控制区域有一个 4 字节地址偏移。有关描述符地址的定义如表 11.52 所示。 表 11.52 接收描述符的区域 符号 地址偏移 字节 描述 Packet 0x0 4 用来存放接收数据的数据缓冲区的基址 Control 0x4 4 控制信息,见表 11.53 数据缓冲区指针(即接收描述符区域中的包)是一个 32 位字节对齐的地址,它包含的 是缓冲区的基址。控制字各个位的定义如表 11.53 所列。 表 11.53 接收描述符的控制字 位 符号 描述 10:0 Size 数据缓冲区的字节数。这是设备驱动程序为一帧或帧片段保留的缓冲区字节数。即被 “数据包区域”指向的缓冲区的字节数。Size 的值采用的是减 1 编码,例如,如果缓 冲区为 8 字节,则 Size 的值为 7 30:11 - 未使用 31 Interrupt 该位表示当该帧或帧片段中的数据以及相关的状态信息已提交给存储器时,是否确实 产生了一个 RxDone 中断 表 11.54 列出了状态数组中的接收状态的区域。 表 11.54 接收状态的区域 符号 地址偏移 字节 描述 StatusInfo 0x0 4 接收状态的返回标志,见表 11.56 StatusHashCRC 0x4 4 目标地址 hash CRC 和源地址 hash CRC 的串联 每个接收状态均由两个字组成。StatusHashCRC 包含的是两个串联的 9 位 hash CRC, 这两个 CRC 是通过计算接收帧中的目标地址和源地址得来的。在检测到目标地址和源地址 之后,只对 StatusHashCRC 进行一次计算,然后保存该值,供同一帧中的所有片段使用。