I've met a problem associats with DMA, i want to receive data from UART through DMA, and store the data into a buffer in on_chipram.
As the handbook says, the alt_dma_rxchan_ioctl() function must been called correctly before can receive data. downside is my program, i don't know is it proper to call the function in that way, at least it doesn't work!
--- Quote Start ---
#include <stdio.h># include <stddef.h># include <stdlib.h># include "sys/alt_dma.h"# include "alt_types.h"# include <system.h>
/* flag used to indicate the transaction is complete */
volatile int dma_complete = 0;
/* function that is called when the transaction completes */
void dma_done (void* handle, void* data)
{
dma_complete = 1;
}
int main (void)
{
alt_u8 buffer[32];
alt_dma_rxchan rx;
FILE *fp;
fp=fopen("dev/uart","r");
/* Obtain a handle for the device */
if ((rx = alt_dma_rxchan_open ("/dev/dma")) == NULL)
{
printf ("Error: failed to open device\n");
exit (1);
}
else
{
/* Post the receive request */
if (alt_dma_rxchan_ioctl(rx,ALT_DMA_RX_ONLY_ON ,NULL)<0)
printf("error set\n");
if (alt_dma_rxchan_prepare (rx, buffer, 32, dma_done, NULL) < 0)
{
printf ("Error: failed to post receive request\n");
exit (1);
}
/* Wait for the transaction to complete */
while (!dma_complete);
printf ("Transaction complete\n");
alt_dma_rxchan_close (rx);
}
return 0;
}
--- Quote End ---