主题 : 求一裸机的DMA测试程序 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 23911
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
综合积分: 30 分
注册时间: 2010-06-28
最后登录: 2010-08-31
楼主  发表于: 2010-07-17 20:48

 求一裸机的DMA测试程序

本人求一裸机的DMA测试程序。
我用我找的测试程序,可以看出数据是传输完了,地址都有增加,可目的地址上就是没有数据。
难道是我的芯片有问题?
不方便上传的话可以发我邮箱,531424948@qq.com
级别: 新手上路
UID: 23769
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
综合积分: 14 分
注册时间: 2010-06-25
最后登录: 2010-08-14
1楼  发表于: 2010-07-23 16:44
我也需要一份~~谢谢~~~~
jin05052110@163.com
级别: 新手上路
UID: 23911
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
综合积分: 30 分
注册时间: 2010-06-28
最后登录: 2010-08-31
2楼  发表于: 2010-08-04 22:45
再顶下。
级别: 新手上路
UID: 23911
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
综合积分: 30 分
注册时间: 2010-06-28
最后登录: 2010-08-31
3楼  发表于: 2010-08-08 18:08
  
还是靠俺自己。。


static void __irq Dma0Done(void)
{
    ClearPending(BIT_DMA0);
    dmaDone=1;
}

void Test_DMA(char *p_src,char *p_dst,int num)
{
    int i,time;
    float a,b;
    
       pISR_DMA0=(int)Dma0Done;
    rINTMSK&=~(BIT_DMA0);  

      Uart0_Init();
      Delay(3);
    
    rDISRC0 = (int)p_src;
    rDISRCC0 = 0;
    rDIDST0 = (int)p_dst;
    rDIDSTC0 = 3;
    
    rDCON0 = (1<<31)|(0<<30)|(1<<29)|(0<<28)|(1<<27)|\
                (1<<24)|(1<<23)|(1<<22)|(0<<20)|(num);
    Delay(3);
    dmaDone = 0;            
    rDMASKTRIG0=(1<<1)|0;
    
    Timer_Start(3);//128us resolution          
    while(dmaDone==0);
    time=Timer_Stop();
    
    Delay(20);

    Uart_Init( 0,115200 );
    a=time/(float)ONESEC3;
    b=num/(time/(float)ONESEC3)/1000000;
    Uart_Printf("DMA transfer done.");// time=%f, %fMB/S\n",a,b);      //这儿用原来的打印会有data abort错误
}


void Uart0_Init()
{
    int i,pclk;
///    if(pclk == 0)
    pclk    = PCLK;
    rUFCON0 = 0x0|1;   //UART channel 0 FIFO control register, FIFO ENable
    rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable
    rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable
    rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable
    rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable
//UART0
    rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
     //    [10]       [9]     [8]        [7]        [6]      [5]         [4]           [3:2]        [1:0]
     // Clock Sel,  Tx Int,  Rx Int, Rx Time Out, Rx err, Loop-back, Send break,  Transmit Mode, Receive Mode
     //     0          1       0    ,     0          1        0           0     ,      10         01
     //   PCLK       Level    Pulse    Disable    Generate  Normal      Normal        Interrupt or Polling
    rUCON0  = 0x249;   // Control register,DMA ,INT 
    rUBRDIV0=( (int)(pclk/16./115200+0.5) -1 );   //Baud rate divisior register 0
//UART1
    rULCON1 = 0x3;
    rUCON1  = 0x245;
    rUBRDIV1=( (int)(pclk/16./115200+0.5) -1 );
//UART2
    rULCON2 = 0x3;
    rUCON2  = 0x245;
    rUBRDIV2=( (int)(pclk/16./115200+0.5) -1 );    

    for(i=0;i<100;i++);
}



用char [300]="";初始化的数组做为src时有时有点问题,我想大概是MMU导致的。
现在用的char buff0[300]="0000111122223333";
[ 此帖被_fengchen_在2010-08-08 18:23重新编辑 ]