[经验] F28335的DMA

Jacktang   2016-1-29 21:36 楼主
void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source)
        源地址有两个,一个A为用于传输时(随每个字节递增),另一个B作为返回的备份(当一帧结束后,重新装载入A)
        目的地址有两个,一个A为用于传输时(随每个字节递增),另一个B作为返回的备份(当一帧结束后,重新装载入A)
        每次启动DMA相应通道,都会把B装载入A
        void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep)
        Bsize: 每一个脉冲传递的字的个数,实际脉冲数为bsize+1
        Srcbstep:每传递一个字后,源地址A增量
        Desbstep:每传递一个字后,目的地址A增量

        void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)
        Tsize:每一帧的脉冲个数,脉冲递减到0时(即一帧传递完成,也是DMA传递完成),产生DMA中断。实际帧数为tsize+1
        Srctstep:每个脉冲的最后一个字传递结束后,源地址A增量
        Deststep:每个脉冲的最后一个字传递结束后,目的地址A增量

        void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep)
        Srcwsize:当已经传递的脉冲数为srcwsize+1的整数倍时,源地址(B)增加srcwstep(常为0),并装载入源地址A
        Deswsize:当已经传递的脉冲数为deswsize+1的整数倍时,目的地址(B)增加deswstep(常为0),并装载入目的地址A

        void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte)
        Persel:选择触发DMA的外设中断源
        Perinte:外设中断使能,
        Oneshot:使能时,外设产生一次中断,就能够把一帧传递完。禁止,外设产生一次中断,只能传递一个脉冲
        Cont:使能时,每次DMA结束后,需要再次启动DMA时,就不需要调用void StartDMACH1(void)。禁止时,重启DMA,需要调用void StartDMACH1(void)
        Datasize:设置每个字是16位或者32位
        Chintmode:设置DMA中断是在DMA启动或者结束时产生
        Chinte:DMA相应通道的中断使能(外设级)。
        注:Perinte和Chinte同时使能时,才能进入DMA通道中断
        仅Perinte使能,可以传输数据,但是不进入通道的中断程序

        void StartDMACH1(void)
        首次启动DMA,若Cont为禁止,每次DMA结束后,需要再次启动DMA时需要调用
        只开启相应用于触发的外设级中断,不开启PIE对应位,则能够触发DMA而不触发CPU的中断程序
        经过DMACH1ModeConfig配置的中断,DMA会自动清除相应外设级的中断标志位,不用程序清除

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复