ads1.2 dma s3c2410问题
/****** 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; //定义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开始的地址的字符串的内容有改变,而发送的数据没有变 自己顶下!! 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)
:em17: 问题不能是在楼上的说的那儿,MAIN是下面这样
#include <string.h>
#include "..\INC\config.h"
//#define SEND_DATA (*(volatile unsigned char *) 0x30200000)
//#define SEND_ADDR ((unsigned char *) 0x30200000)
char s_array; //定义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;
}
} 自己顶起来
页:
[1]