首页 理论教育 地址指针和传送控制

地址指针和传送控制

时间:2023-06-24 理论教育 版权反馈
【摘要】:内循环是接收到外设中断触发事件后传送一个帧的数据。该中断可以通过MODE.CHx[CHINTMODE]位配置为在每次传送开始或结束时刻产生。该方法中,一个数据打包的地址装载到当前工作的地址指针中(即赋值)。每个DMA通道包含了两个打包地址指针:SRG_BEG_ADDR和DST_BEG_ADDR。这两指针已被映射,源打包地址和目的打包地址可以独立配置。这就允许通道在单个传送过程中多次“打包”。该位决定当前地址指针返回到起始值之前需传送的数据帧的个数。

地址指针和传送控制

DMA状态机是两级嵌套循环。内循环是接收到外设中断触发事件后传送一个帧的数据。帧(burst)是每次传送数据的最小量级,帧的长度大小可通过BURST_SIZE寄存器来定义(每帧最多传送32个16位字)。TRANSFER_SIZE设置外循环的长度大小,即定义在整个传送过程中共传送多少个这样的帧数据。TRANFER_SIZE是一个16位寄存器,每次传送可以产生一个CPU中断(若中断使能)。该中断可以通过MODE.CHx[CHINTMODE]位配置为在每次传送开始或结束时刻产生。

在MODE.CHx[ONESHOT]位默认设置下,DMA在每接收到一个中断触发事件信号时传送一帧数据。传送完毕后,状态机按照优先级指向下一悬挂通道,即使刚完成传送任务的通道又接收到一个中断触发事件信号并处于悬挂状态,状态机也会指向下一悬挂通道。这一特性可以防止任一单个通道独占DMA总线。若单个触发事件要求传送数据的长度超过了每帧允许传送字的最大值,则需要传送多个帧数据,这时可以通过设置MODE.CHx[ONESHOT]位来完成整个数据帧的传递任务。需要注意的是,这种模式下可能会发生某一触发事件独占大部分DMA带宽的情况。

每个DMA通道包含了源地址(SRC_ADDR)和目的地址(DST_ADDR)的映射地址指针。在每次传送的开始时,映射(shadow)寄存器中的地址指针会复制到相应的当前工作(active)寄存器中。在帧循环(burst loop)中,每个字传送完毕后,源地址和目的地址的BURST_STEP寄存器中的值会加到当前工作的SRC/DST_ADDR上(即做加法),用以修改当前工作的地址指针,在传送循环(transfer loop)中,每一帧传送完毕后,有两种方法修改当前工作的地址指针,第一种方法(默认)是将SRC/DST_TRANSFER_STEP寄存器的值加到相应的地址指针上(即做加法);第二种方法被称作为“打包(wraping)”的过程。该方法中,一个数据打包的地址装载到当前工作的地址指针中(即赋值)。当一个打包过程发生后,相应的SRC/DST_TRANSFER_STEP寄存器内容将被忽略。

当SRC/DST_WRAP_SIZE所定义的一定数量的帧数据传送完毕后,地址打包过程发生。每个DMA通道包含了两个打包地址指针:SRG_BEG_ADDR和DST_BEG_ADDR。这两指针已被映射,源打包地址和目的打包地址可以独立配置。与SRC_ADDR、DST_ADDR寄存器一样,在每个传送的开始,当前工作的SRC/DST_BEG_ADDR寄存器将载入与之相应的映射寄存器的内容。当一定数量的帧数据传送完毕后,“打包”过程分两步发生,首先当前工作寄存器SRC/DST_BEG_ADDR按照SRC/DST_WRAP_STEP寄存器中的定义值增加;然后新的当前工作寄存器SRC/DST_BEG_ADDR内容被加载到SRC/DST_ADDR寄存器中。

此外,数据打包计数器(SRC/DST_WRAP_COUNT)寄存器重新载入SRC/DST_WRAP_SIZE的值,启动下一个“打包”周期。这就允许通道在单个传送过程中多次“打包”。结合上文所述的每个字传送完毕后源/目的地址可以修改,那么在单个传送过程中,可以访问多个缓冲器地址。

在地址指针中,DMA分别包含了当前工作(active)和映射(shadow)寄存器组。当DMA传送开始时,映射寄存器组的内容复制到当前工作的寄存器组。这就允许用户在DMA工作于当前工作的寄存器组时,对映射寄存器编程,为下次传送做准备;另外,还允许用户修改ping-pong缓冲器配置而不打断DMA通道操作。有如下地址指针:

1)源/目的地址指针(SRC/DST_ADDR)。其写入映射寄存器的值是进行第一次读取或写入操作的起始地址。在每次传送的开始,映射寄存器内容被复制到当前工作寄存器中,当前工作寄存器的值代表当前的地址指针。

2)源/目的起始地址指针(SRC/DST_BEG_ADDR)。该指针是数据打包地址指针。在传送开始时,写入到其映射寄存器的值将加载到当前工作的寄存器中;“打包”过程发生后,当前工作寄存器将按照SRC/DST_WRAP_STEP中定义的值增加,增加后的值再加载到SRC/DST_ADDR寄存器中。

对于每个通道,传送过程可以通过以下长度(SIZE)值控制:

1)源和目的帧长度(BURST_SIZE)。其定义每帧传送的数据字个数。在每次传送开始时,该值将被装载到BURST_COUNT寄存器中,每传送一字后,BURST_COUNT的值减1,当减为0时,一帧数据传送完毕,表明可以服务另一通道。当前通道的工作方式可以通过MODE寄存器的ONE_SHOT位控制。帧长度可设置的最大值由外设类型而定。对于ADC,帧长度可以是所有16个寄存器(若所有16寄存器都被用到);对于McBSP外设,因为没有FIFO堆栈,发送和接收的数据在每个数据字传送时都需要被装载或复制,所以帧长度是1(当传送的是16位数据)或是2(当传送的是32位数据);对于RAM操作,帧长度可以设置为BURST_SIZE允许的最大值32。

2)源和目的传送长度(TRANSFER_SIZE)。该位决定传送多少个数据帧后产生CPU中断(若中断使能)。MODE寄存器中的CHINTMODE位决定中断在传送的开始或结束时刻产生;MODE的CONTINUOUS位决定一次传送完毕后,通道保持使能或禁止。每次传送开始时,TRANSFER_SIZE寄存器的值装载到TRANSFER_COUNT中。TRANSFER_COUNT的值明示已经传送了多少帧的数据,当其减为0时,DMA传送结束。

3)源/目的数据打包长度(SRC/DST_WRAP_SIZE)。该位决定当前地址指针返回到起始值之前需传送的数据帧的个数。在每次传送开始时,数值被装载到相应的SRC/DST_WRAP_COUNT寄存器中,该寄存器可明示通道已经传送了多少帧的数据,当寄存器值减为0时,相应的源或目的地址指针执行“打包”过程。源和目的地址指针分别拥有独立的打包步长WRAP_SIZE和计数寄存器WRAP_COUNT。赋一个大于TRANSFER_SIZE寄存器的值时,可禁止“打包”功能。

写入到SIZE寄存器的值是所要传送的长度减去1。无论DATASIZE位的状态为何,SIZE寄存器中的数值都是对于16位字长的地址而言,因此,当需要传送3个32位长的字时,应向SIZE寄存器写入5。(www.xing528.com)

可以通过以下步长(STEP)值来改变每一个源/目的指针地址:

1)源/目的帧步长(SRC/DST_BURST_STEP)。在每帧数据传送过程中,源地址和目的地址变化步长由该寄存器决定。其值为2的补码形式的有符号数,所以地址指针可以根据要求增加和减小。若不需要增加,如访问McBSP数据接收和发送寄存器时,应赋值为0。

2)源/地址传送步长(SRC/DST_TRANSFER_STEP)。该寄存器决定在当前帧数据传送完毕后,开始下一帧数据传送时的地址偏量。寄存器值为2的补码形式的有符号数,因而地址指针可根据需要增加和减小。

3)源/目的数据打包步长(SRC/DST_WRAP_STEP)。当数据打包计数器减至0时,该寄存器值决定BEG_ADDR指针加上或减去多少偏量,进而设置新的起始地址。寄存器值为2的补码形式的有符号数,因而地址指针可根据需要增加和减小。

注意,无论DATASIZE位是什么值,上述STEP寄存器定义的值均是对于16位字长的数据地址而言,所以,若需增加一个32位字长的数据地址,则需向上述寄存器中写入2。

在帧循环(burst loop)和传送循环(transfer loop)中,有3种方式控制状态机的操作模式,其特性和模式如图5-21所示。下面分别介绍:

1)单次触发模式(ONESHOT)。在单次触发模式下,当触发事件发生后,DMA将持续传送数据帧直至TRANSFER_COUNT为0;若该模式被禁止,则在传送每个数据帧时都要一个事件触发直至TRANSFER_COUNT减为0。需要注意的是,单次触发模式可能占用大量外设带宽并且导致CPU长时间暂停。为避免这种情况发生,用户可以配置CPU定时器(或类似操作)作为中断触发事件,并禁止单次触发模式。

2)连续模式(CONTINUOUS)。如果连续模式被禁止,CONTROL寄存器中的RUNSTS位将在传送结束后被清零,表明DMA通道被禁止。那么在该通道启动下一传送之前,必须将CONTROL寄存器中的RUN位置位,重新使能该通道。如果使能了连续模式,则在每次传送结束后,RUNSTS位不会被清零。

3)通道中断模式(CHINTMODE)。该模式决定各个通道的DMA中断在每个传送的开始还是结束时刻产生。当用连续模式实现ping-pong缓冲器操作时,中断应在每次传送的开始产生,即在映射寄存器组内容复制到当前工作寄存器组之后;若DMA不工作在连续模式,则中断通常配置成在每次传送完成后产生。

978-7-111-49650-2-Chapter05-128.jpg

图5-21 DMA状态机操作模式

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈