Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
16 years ago

help on using NIOS II DMA in the design

Hi,

I am trying use the DMA example code as it is given in the nios 2 s/w handbook,

the code is as given below,

#include <stdio.h># include <stdlib.h># include "sys/alt_dma.h"# include "system.h"

static volatile int rx_done = 0;

/*

* Callback function that obtains notification that the data

* is received.

*/

static void done (void* handle, void* data)

{

rx_done++;

}

/*

*

*/

int main (int argc, char* argv[], char* envp[])

{

int rc;

alt_dma_txchan txchan;

alt_dma_rxchan rxchan;

void* tx_data = (void*) 0x901000; /* pointer to data to send */

void* rx_buffer = (void*) 0x902000; /* pointer to rx buffer */

/* Create the transmit channel */

if ((txchan = alt_dma_txchan_open("/dev/dma_0")) == NULL)

{

printf ("Failed to open transmit channel\n");

exit (1);

}

/* Create the receive channel */

if ((rxchan = alt_dma_rxchan_open("/dev/dma_0")) == NULL)

{

printf ("Failed to open receive channel\n");

exit (1);

}

/* Post the transmit request */

if ((rc = alt_dma_txchan_send (txchan, tx_data, 128, NULL, NULL)) < 0)

{

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

exit (1);

}

/* Post the receive request */

if ((rc = alt_dma_rxchan_prepare (rxchan,

rx_buffer,

128,

done,

NULL)) < 0)

{

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

exit (1);

}

/* Post the receive request */

if ((rc = alt_dma_rxchan_prepare (rxchan,

rx_buffer,

128,

done,

NULL)) < 0)

{

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

exit (1);

}

/* wait for transfer to complete */

while (!rx_done);

printf ("Transfer successful!\n");

return 0;

}

But code is exiting, with an error ( Failed to open transmit channel ).

I want to understand, where am I doing worng.

3 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    yes, dma_0 module is included in the sopc. how the dma should be configured in sopc to make use of the HAL API's.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Are you sure the component is a simple DMA and not a SGDMA? Could you show a printscreen of your SOPC system?