ads1.2 dma s3c2410问题

发布于 2022-09-18 10:58:27 字数 6581 浏览 15 评论 0

/****** 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开始的地址的字符串的内容有改变,而发送的数据没有变

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜灵血窟げ 2022-09-25 10:58:27

自己顶下!!

清风挽心 2022-09-25 10:58:27

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)

原谅我要高飞 2022-09-25 10:58:27

问题不能是在楼上的说的那儿,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;
        }
}

始于初秋 2022-09-25 10:58:27

自己顶起来

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文