Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
12690 Discussions

DMA ----send data from uart to SDRAM

Altera_Forum
Honored Contributor II
1,363 Views

I Have a program about DMA , isend data from RS232 to SDRAM, SDRAM can receive data ,bur when i check this data whther rightly, i find in't not the data that send from uart . the problem is i can't receive right data from uart. this problem have trouble me about 3 weeks .please give me a sugesttion and verify this programs. deeply thanks. 

( Another program work rightly to send data from SDRAM to RS232 ,so SDRAM and RS232 work rightly) 

 

PLEASE HELP ME,THANK YOU 

 

the program is: 

 

//&#23383;&#31526;&#20018;&#20889;&#21040;SDRAM,&#20877;&#20174;SDRAM&#35835;&#21040;RS232# include <stdio.h># include <stdlib.h># include "sys/alt_dma.h"# include "altera_avalon_uart_regs.h"# include "system.h"# include "alt_types.h"# include <string.h> 

static volatile int tx_done = 0; 

volatile static char str[] = {"this is sdram data&#65292;written by memcpy function\n"} ;//&#24453;&#20889;&#21040;SDRAM&#30340;&#25968;&#25454;# define TRANSFER_LENGTH 1024 

//&#22238;&#35843;&#20989;&#25968; 

static void done (void* handle) 

tx_done++; 

 

int main() 

alt_u8 i; 

 

FILE *fp_LCD=0; 

FILE *fp_RS232=0; 

fp_LCD = fopen("/dev/lcd","w");  

fp_RS232 = fopen("/dev/rs232","w");  

 

 

int rc; 

alt_dma_txchan txchan; 

 

void* source = (void*)(SDRAM_BASE);/* &#28304;&#22320;&#22336; */ 

void* dest = (void*)IOADDR_ALTERA_AVALON_UART_TXDATA(RS232_BASE);  

//memset(SDRAM_BASE,'aaaaaaaaaaaaaaaa',TRANSFER_LENGTH); 

memcpy(SDRAM_BASE,str,strlen(str)); //&#23558;STR&#22320;&#22336;&#20013;&#30340;&#23383;&#31526;&#20018;&#20889;&#21040;SDRAM 

/* &#25171;&#24320;&#21457;&#36865;&#36890;&#36947; */ 

if ((txchan = alt_dma_txchan_open("/dev/dma")) == 0) 

{ printf ("successful to open transmit channel\n"); 

exit (1); 

/* &#35774;&#32622;&#30446;&#26631;&#22320;&#22336;&#22266;&#23450; */ 

if ((rc = alt_dma_txchan_ioctl(txchan, ALT_DMA_TX_ONLY_ON, dest)) < 0) 

{ printf ("Failed to set ioctl, reason = %i\n", rc); 

exit (1); 

//&#35774;&#32622;&#27599;&#27425;&#21457;&#36865;&#19968;&#20010;&#23383;&#33410;&#65292;&#21363;8&#20301;&#65292;&#22240;&#20026;UART&#27599;&#27425;&#21482;&#21457;&#36865;8&#20301; 

if((rc = alt_dma_txchan_ioctl(txchan,ALT_DMA_SET_MODE_8 ,NULL))<0) 

{ printf("Failed to set mode 8\n"); 

exit(1); 

/* &#24320;&#22987;&#21457;&#36865; */ 

if ((rc = alt_dma_txchan_send(txchan, source, strlen(str), done, NULL)) < 0) 

{ printf ("Failed to post transmit request, reason = %i\n", rc); 

exit (1); 

/* &#31561;&#24453;&#21457;&#36865;&#32467;&#26463; */ 

while (!tx_done); 

printf ("Transfer to jtag!\n"); 

fprintf(fp_LCD,"Transfer to lcd! \n"); 

fprintf(fp_RS232,"Transfer to rs232 ! \n"); 

for(i=0;i<=strlen(str);i++) 

printf ("%s\n",(SDRAM_BASE+i));  

fprintf(fp_LCD,(SDRAM_BASE+i)); 

//fprintf(fp_RS232,SDRAM_BASE); 

return 0; 

}
0 Kudos
3 Replies
Altera_Forum
Honored Contributor II
473 Views

SORRY, the software visions : 

quartus 10.0+NIOS 10.0
0 Kudos
Altera_Forum
Honored Contributor II
473 Views

I need sdram to uart ,trying for 2 weeks but could not make it work. 

will you share for me.I will be thankful to u.
0 Kudos
Altera_Forum
Honored Contributor II
473 Views

it seems you need rx channel instead of tx channel.see embedded guide.

0 Kudos
Reply