免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2451 | 回复: 4

ads1.2 dma s3c2410问题 [复制链接]

论坛徽章:
0
发表于 2009-12-21 17:00 |显示全部楼层
/****** DMA0 Initialize *****/

    rDISRC0 = (U32)(s_array);   //将数组首地址赋值给DMA源地址寄存器,但是s_array数组的内容改变后,DMA发送的数据还是数组第一次的值,而且这个“第一次的值”也与数组中的字符串有些不同。高手帮解下什么原因??

    下面是整个MAIN.c:

#include <string.h>
#include "..\INC\config.h"
//#define  SEND_DATA   (*(volatile unsigned char *) 0x30200000)
//#define  SEND_ADDR    ((unsigned char *) 0x30200000)

char s_array[100];        //定义DMA源数据区,要为全局变量

int stringchange(char sdata)
                {
                int i,j;
char *s=s_array;
               
                *s='\n';
                s++;
                *s++='\r';
                for(i=0;i<11;i++)
                        *s++=sdata;
                *s++='\n';
                *s++='\r';
                for(j=0;j<3;j++)
                        {
                        *s++=sdata;
                        for(i=0;i<9;i++)
                                *s++=' ';
                        *s++=sdata;
                        *s++='\n';
                        *s++='\r';
                        }
                for(i=0;i<11;i++)
                        *s++=sdata;
                *s++='\n';
                *s++='\r';
                *s++='\n';
                *s++='\r';
                *s++='\n';
                *s++='\r';
                for (i=0;s_array。i。;i++);
                return i;
                }
               
void DMA_init(void)
    {
            /*Uart设置成DMA形式*/
    rUCON0 = rUCON0 & 0xff3 | 0x8;
   
    /****** DMA0 Initialize *****/

    rDISRC0 = (U32)(s_array);
    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<<2|(0 << 27) | (1 << 24) | (1 << 23) | (1 << 22) | (0 << 20) | (0);
            //handshake,Sync=APB,IntEn,   unit,   single,     dst=UART0,  HwReqMode,  NoAutoReload,Halfword,
//    rDMASKTRIG0 = (1<<1);        //DMA0En
    }            
   
void DMA_start(int num)
    {
    Uart_Printf("And sending ...\n\r\n\r";
     rDCON0 |=num;                //The number of sending.
    rDMASKTRIG0 = (1<<1);        //DMA0En
     }
     
void Main(void)
{
        char data=0,i;
               
        Target_Init();
        DMA_init();
        //memset(s_array,0,100);
        for(i=0;i<100;i++)
        s_array=0;
        
        while(1)
        {
        Uart_Printf("\n\r\n\r\n\r\n\rPlease insert character ...\n\r";
        while(!data)
                {
                data = Uart_GetKey();
                }
        Uart_Printf("\n\r\n\rReseived . It is %c.\n\r",data);
        DMA_start(stringchange(s_array,data));
        data=0;
        }
}

///////////////////
以s_array开始的地址的字符串的内容有改变,而发送的数据没有变

论坛徽章:
0
发表于 2009-12-25 12:06 |显示全部楼层
自己顶下!!

论坛徽章:
0
发表于 2009-12-25 15:34 |显示全部楼层
void Main(void)
{
        char data=0,i;
               
        Target_Init();
        DMA_init();
        //memset(s_array,0,100);
        for(i=0;i<100;i++)
        s_array=0;
        
        while(1)
        {
        Uart_Printf("\n\r\n\r\n\r\n\rPlease insert character ...\n\r";
        while(!data)
                {
                data = Uart_GetKey();
                }
        Uart_Printf("\n\r\n\rReseived . It is %c.\n\r",data);
        DMA_start(stringchange(s_array,data));
        data=0;
        }
}
int stringchange(char sdata)


论坛徽章:
0
发表于 2009-12-27 16:46 |显示全部楼层
问题不能是在楼上的说的那儿,MAIN是下面这样


#include <string.h>
#include "..\INC\config.h"
//#define  SEND_DATA   (*(volatile unsigned char *) 0x30200000)
//#define  SEND_ADDR    ((unsigned char *) 0x30200000)

char s_array[100];        //定义DMA源数据区,要为全局变量

int stringchange(char sdata)
                {
                int i,j;
                char *s=s_array;
               
                *s='\n';
                s++;
                *s++='\r';
                for(i=0;i<11;i++)
                        *s++=sdata;
                *s++='\n';
                *s++='\r';
                for(j=0;j<3;j++)
                        {
                        *s++=sdata;
                        for(i=0;i<9;i++)
                                *s++=' ';
                        *s++=sdata;
                        *s++='\n';
                        *s++='\r';
                        }
                for(i=0;i<11;i++)
                        *s++=sdata;
                *s++='\n';
                *s++='\r';
                *s++='\n';
                *s++='\r';
                *s++='\n';
                *s++='\r';
                for (i=0;s_array(i);i++);  //中括号显示不出来,用(i)代替
                return i;
                }
               
void DMA_init(void)
    {
            /*Uart设置成DMA形式*/
    rUCON0 = rUCON0 & 0xff3 | 0x8;
   
    /****** DMA0 Initialize *****/

    rDISRC0 = (U32)(s_array);
    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<<2|(0 << 27) | (1 << 24) | (1 << 23) | (1 << 22) | (0 << 20) | (0);
            //handshake,Sync=APB,IntEn,   unit,   single,     dst=UART0,  HwReqMode,  NoAutoReload,Halfword,
//    rDMASKTRIG0 = (1<<1);        //DMA0En
    }            
   
void DMA_start(int num)
    {
    Uart_Printf("And sending ...\n\r\n\r";
     rDCON0 |=num;                //The number of sending.
    rDMASKTRIG0 = (1<<1);        //DMA0En
     }
     
void Main(void)
{
        char data=0,i;
               
        Target_Init();
        DMA_init();
        //memset(s_array,0,100);
        for(i=0;i<100;i++)
        s_array(i)=0;//中括号显示不出来,用(i)代替
        
        while(1)
        {
        Uart_Printf("\n\r\n\r\n\r\n\rPlease insert character ...\n\r";
        while(!data)
                {
                data = Uart_GetKey();
                }
        Uart_Printf("\n\r\n\rReseived . It is %c.\n\r",data);
        DMA_start(stringchange(data));
        data=0;
        }
}

论坛徽章:
0
发表于 2009-12-29 18:37 |显示全部楼层
自己顶起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP