1、Transmit Descriptor
咱们知说念:比拟与CAN、Lin等总线,以太网的数据糊涂量比较大,eg:1500bytes。要是让CPU干数据搬运使命,尤其多量数据搬运使命,这有点"屈才"。是以,系统策画中,为了最猛进程的开释CPU,在以太网的数据搬运中,会使用挑升的DMA(Direct Memory Access)搬运。要是思让DMA知说念怎么搬运数据,就需要提前奉告其搬运规章,因此,形色符(Descriptor)欺骗而生。关于以太网数据发送,则使用Transmit Descriptor形色以太网数据的发送规章。Transmit Descriptor有两种神志:Read神志和Write-Back神志。Transmit Descriptor Read Format如下所示:
图片
如上图,在进行数据发送时,需要肃肃字节序(单片机一般是小端花样),而如上的形色符可能需要大端处理。
Transmit Normal Descriptor (Write-Back Format),暗示如下:
图片
当DMA完成数据搬运以后,会对形色符进行写回操作,主要操作TDES3的OWN和DESC STATUS位域,将发送气象反应给Application。(一)Application与DMA的"合手手"形色符是Application与DMA之间的纽带,Application通过形色符将待发送的信息填充到Transmit Descriptor中,DMA通过判断DES3.OWN获得发送肯求。即:Application需要发送数据时,将数据地址放入Buffer1(对应DES0),同期,将一些甘休信息写入可用的Transmit Descriptor中,临了,设立DES3.OWN = 1,肯求DMA发送数据,这一步不错看作:Application将操作后的发送形色符甘休权交给DMA;当DMA发送完数据以后,将对应发送形色符的DES3.OWN复位(=0),这一步不错看作:DMA将指标形色符的甘休权返还给Application。通过DES3.OWN,Application与DMA进行疏通,也等于"合手手"算作,进而保证数据有序交互,暗示如下:图片
DMA发送完成能够禁受完成,一般会有中断触发,要是有特殊操作,也不错在中断回调函数中处理。2、形色符链表
骨子使用中,常常使用环形DMA形色符结构(DMA Descriptor Ring),暗示如下:图片
如上结构,环球并不生分。这里,咱们需要肃肃一些细节。(一)形色符斥逐当使用多个形色符时,形色符之间不错设立斥逐(eg:DMA_Ch(#i)_Control寄存器的DSL位域,Descriptor Skip Length)。斥逐设立若干需要凭据手册条目,本文不错设立的数据斥逐:DWord(8 byte)的整数倍,要是DSL = 0,则意味着形色符间莫得斥逐。(二)发送形色符操作的寄存器意会以太网发送,还需要意会与形色符操作关联的寄存器。本文聚焦发送关联的几个DMA寄存器:DMA_CHi_TXDESC_LIST_ADDRESS:发送形色符的基地址,指向发送形色符链表的第一个形色符,运升沉时赋值;
DMA_CHi_CURRENT_APP_TXDESC:现时发送形色符,指向DMA现时可用的形色符;
DMA_CHi_TXDESC_RING_LENGTH:存放发送形色符长度,可使用长度 = n + 1(n是寄存器中存储的骨子值);
DMA_CHi_TXDESC_TAIL_POINTER:发送形色符尾指针,每次肯求发送以太网Frame后,需要Application更新Transmit Descriptor地址,即:指向下一个可用的优游形色符地址。
要是Current Descriptor Pointer == Descriptor Tail Pointer,则DMA会自动挂起(Suspend),住手数据搬运。当Application再次肯求数据发送时,需要向Descriptor Tail Pointer中写入发送信息,偏移Descriptor Tail Pointer,使其清闲:Current Descriptor Pointer < Descriptor Tail Pointer。要是Descriptor Tail Pointer偏移到尾部,则从头回到Descriptor Base Address。
3、以太网帧发送历程
以太网Frame的发送历程,暗示如下:
图片
具体发送历程解读:1、Application通过DMA_CHi_CURRENT_APP_TXDESC寄存器获恰现时可用的发送形色符地址,将发送信息填充到可用的发送形色符中,即:奉告DMA搬运规章。之后,Application将TDES3.OWN置位(=1),肯求发送数据;2、DMA能否搬运数据,需要判断DMA的使命花样,要是DMA处于Stop花样,需要从头启动DMA。通过判断DMA_CHj_Status (j=0-7)的TPS(Transmit Process Stopped)位域证明其是否处于Stop花样。具体形色:要是TPS == 1,表示DMA处于Stop花样,需要向TPS位域写1取销,同期,进行DMA使能操作。固然,还不错进一步的查抄其他信息,eg:TBU(Transmit Buffer Unavailable);3、当Application将形色符的甘休权交给DMA以后,还需要Transmit Poll Demand,即:向DMA_CHi_TXDESC_TAIL_POINTER寄存器写入信息,一般写入下一个可用发送形色符地址,让DMA脱离挂起气象,去查询待处理的发送形色符信息;4、当DMA发送完数据以后,DMA_CHi_CURRENT_APP_TXDESC寄存器的发送形色符地址自动偏移一个,要是Current Descriptor Pointer < Descriptor Tail Pointer,DMA不时发送数据;要是Current Descriptor Pointer == Descriptor Tail Pointer,DMA立时挂起(Suspend),住手数据搬运,同期,数据的发送气象回写(write-back)到TDES3中。数据的发送历程关节要领如上,意会了数据发送,也就不难意会数据的禁受过程。
(一)DMA气象变化历程
1、以太网专用DMA运升沉以后,要是没格外据发送,投入Suspend气象。此时,DMA_CHi_TXDESC_TAIL_POINTER指向空,暗示如下:
图片
2、Application肯求发送数据时,从DMA_CHi_CURRENT_APP_TXDESC寄存器获得可用的发送形色符地址,填充发送规章。向DMA_CHi_TXDESC_TAIL_POINTER寄存器写入下一个可用形色符地址,使其清闲Current Descriptor Pointer < Descriptor Tail Pointer,即:触发DMA发送,暗示如下:图片
3、Frame发送完成以后,DMA_CHi_CURRENT_APP_TXDESC寄存器中的可用形色符地址,自动向后偏移一个,使得Current Descriptor Pointer == Descriptor Tail Pointer,DMA立时挂起(Suspend),暗示如下:图片
本站仅提供存储管事,总共内容均由用户发布,如发现存害或侵权内容,请点击举报。