- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi:
I want to transmit data from FIFO to sdram by DMA in SOPC builder. in NIOSII eclipse, if((tx=alt_avalon_dma_send(txchan,(void*)tx_data,0x1000,NULL,NULL))<0) { printf("failed to send data from fifo \n"); ) always printf: failed to send data from fifo I add "while(1)" to contain this code: while(1) { //the number of translated data at one time for(j=0;j<=100;j++) { if((tx=alt_avalon_dma_send(txchan,(void*)tx_data,0x1000,NULL,NULL))<0) { printf("failed to send data from fifo \n"); // } if( j==90) exit(1); } but it always failed ... is there somebody can give me any hints? thanks~Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi,gurus
I have try lots of times ,but always failed,so I hope someone can give me help~ the self-made SOPC component is connected to read master port of DMA, SDRAM is connected to write master port of DMA. the setl-made component is connected to avalon bus as a slave interface.when I use "IORD"to read the component,it is right,but when I connect is to DMA,DMA transmits failed~ if((rx= alt_avalon_dma_prepare(rxchan,rx_buffer,1024,done_t,NULL))<0) { printf("rxchan receive failed.reason: %d",rx); exit(1); } dma_prepare always failed, if the self-made component has some problems (the component consist of a FIFO which connected to avalon through slave port )?? The NiosII software code is attached the pogrammme is very urge,and there is nobody around me can give me advise,so I hope you gurus can give me some hints~ thanks very much~~- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
/* begin receive data*/
if((rx= alt_avalon_dma_prepare(rxchan,rx_buffer,1024,done_t,NULL))<0) { printf("rxchan receive failed.reason: %d",rx); exit(1); } after running,niosII console: rx=-28; I check the meaning of "28" in altera_avalon_dma.h: start = priv->tx_start; end = priv->tx_end; slot = &priv->tx_buf[end]; next = (end + 1) & ALT_AVALON_DMA_NSLOTS_MSK; if (next == start) { return -ENOSPC; } so I guess that there is no room in memory,but I am not sure which memory has no room and why it has no room,so I delete my signaltapII file so as to let more room off,but the error is still there. I will keep trying~- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi,
I have solved the above problem,that is ,the data writen into the FIFO can be transfered to the SDRAM by the DMA . here I have some feelings which be shared with yours. 1: DMA transmition ,FIFO (slave port attached into Avalon bus) to SDRAM,because of reading the same address(FIFO base address),so you only need to open received channel(rxchan),and set iocl(mode,RX_only),then ,prepare . 2:there seems the SOPC can do lots for you,so you need not care about the details too much:) best regards
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page