搜索
bottom↓
回复: 4

DMA和CPU竞争总线的问题

[复制链接]

出0入0汤圆

发表于 2010-11-12 11:01:36 | 显示全部楼层 |阅读模式
#include "includes.h"
#define  SEND_DATA   (*(volatile unsigned char *) 0x31200000)
#define  SEND_ADDR    ((volatile unsigned char *) 0x31200000)
  
/*下面程序是通过DMA方式实现内存块到串口0的输出*/
void  APP_vMain(void){
        volatile unsigned char *p = SEND_ADDR;
        int i;

                 
        SEND_DATA = 0x41;
        for (i = 0; i < 128; i++){
            *p++ = 0x41 + i;
        }

         
    /*Uart设置成DMA形式*/
    rUCON0 = rUCON0 & 0xff3 | 0x8;
     
    /****** DMA0 Initialize *****/

    rDISRC0 = (U32)(SEND_ADDR);
    rDISRCC0 = (0<<1)|(0<<0); //Src=AHB,Increment
     
    rDIDST0 = (U32)UTXH0;  // Tx FIFO address
    rDIDSTC0 = (1<<1)|(1<<0); //Dst=APB,Fixed;
     
    rDCON0 = (0<<31)|(0<<30)|(1<<29)|(0<<28)|(0 << 27) | (1 << 24) | (1 << 23) | (1 << 22) | (0 << 20) | (50);
        //handshake,Sync=APB,IntEn,   unit,   single,     dst=UART0,  HwReqMode,  NoAutoReload,Halfword,
     
    rDMASKTRIG0 = (1<<1);         //DMA0En
        while(1) {CONSOL_Printf("*");DelayLoop(10000);};
}
此程序的功能是通过DMA给串口发送数据  同时主程序中也在一个死循环里给串口发送数据.最后的DelayLoop(10000)延时长了无任何问题.若是延时时间比较短,DMA未传送完数据,势必会出现总线竞争 同时 串口也设置为了DMA传输方式.想请教各位大侠  延时时间比较短时,程序应该是如何执行的?多谢赐教

出0入0汤圆

发表于 2010-11-12 11:15:09 | 显示全部楼层
这跟DMA与CPU的竞争一点关系都没有。
    关键在于你的串口收发。
    延时时间短,并不是DMA没发完数据,而你的串口没发完数据。

出0入0汤圆

 楼主| 发表于 2010-11-12 14:16:15 | 显示全部楼层
回复【1楼】wuzhujian 吴助建
-----------------------------------------------------------------------

这位大哥 能不能给详细分析下执行流程?一开始DMA获得总线控制权 执行DMA传送 传完一次就释放总线 若下次请求来之前 就执行串口发送程序 发一*号  因发送缓冲区非空 则等待  上一字符发送完后又会产生DMA请求  此时程序要对串口缓冲区写*号  是响应请求还是怎么着  或是压根就不是我所说的这样执行?

出0入0汤圆

发表于 2010-11-12 14:27:24 | 显示全部楼层
回复【2楼】xueqi_147  
-----------------------------------------------------------------------

   没理解DMA,就不要用DMA。

出0入0汤圆

 楼主| 发表于 2010-11-12 14:30:49 | 显示全部楼层
回复【3楼】wuzhujian 吴助建
-----------------------------------------------------------------------

上午老师讲了个DMA实验 做实验时发现结果跟预期不一样 想了好久想不通 才发帖请教 总不能说不会就不学吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 00:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表