新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM处理器的HDLC通信的DMA实现

基于ARM处理器的HDLC通信的DMA实现

作者: 时间:2012-11-16 来源:网络 收藏

1.3 缓冲描述符(BD)

缓冲描述符是S3C5410B使用的一种数据结构,通常构成循环链表。H引擎可以直接读取结构的信息,用户通过填写这些结构中的域去控制H的运行行为。如图2所示,每个BD包括4个域:

①数据缓存指针(data buffer pointer)。第31位标识主权(ownership)关系,表示当前的BD在(1)控制器和CPU(0)之间的所属关系,通常在发送和接收时要对其检查。对于数据长度,通常在发送时写入BD的帧长度域,DMA引擎会根据其发送相应长度的数据。接收数据长度会自动写入这个域。

②保留域。发送BD(Tx),低8位表示发送控制(如前同步信号、CRC模式、BIG/LITTLE端选择等);接收BD(Rx),保留未用。

③长度域。发送BD,用户写入发送帧的数据长度;接收BD,DMA控制器写入接收帧的数据长度。

④Next BD指针。指向下一个BD,收发BD各自构成一组BD链。

HDMA控制器在使用过一个BD后,会自动读入下一个BD,装入HDMA指针寄存器(HDMAXxPTR)。使用指针gpXxBDStart,指示当前的可用BD位置。在设备中定义为全局变量(X表示T或R)。

1.4 重要的数据类型

BD结构的定义如图2所示。

typedef struct BD{

U32 BufferData Ptr;

//数据缓存区指针,其中第31位标识BD的所有权

U32 Reserved;

//发送BD控制位,定义发送时操作的模式,接收BD保留

U32 StatusLength;

//运行状态,在ISR中检测,也定义对应的数据缓存区的长度

struct BD *NextBD;

//下一个BD指针

}sBuffer Descriptor;

HDLC帧(Frame)定义(如表1):

typedef struct HDLCFRAME{

U8 address[4]; //地址

U8 control; //控制信息通道为FFH

U8 information[1505]; //信息域,有效的数据

}sHdlcFrame;

HDLC设备结构定义:

typedef struct HDLC_Device {

U32 HDLC_Port; /

U32 HDLC_Baud; //HDLC波特率

U32 HDLC_Data_format;

//HDLC数据格式,NRZ,NRZI,FM0,FM1,Manchester

//……时钟选择(发送/接收时钟源)……

sBufferDescriptor gpTxBDStart;/*当前的发送BD指针Start of TX BDs*/

sBufferDescriptor *gpRxBDStart; /*当前的接收BD指针Start of RX BDs */

//……状态统计信息(Abort,CRC error,Null list)……

}Hdle_End_Device;

由于在中断服务程序入口无法传递参数,故定义设备为全局变量,程序设计中使用指针传递,提高效率。



评论


相关推荐

技术专区

关闭