I've made it next:
unsigned int *p = (unsigned int*)(SDRAM_BASE + 0xF4240);
void *pdma = (void*) SD_DMA_BASE;
void isr_dma(void* context, alt_u32 id)
{
if ((IORD_ALTERA_AVALON_DMA_STATUS(SD_DMA_BASE))&&0x01) {
IOWR_ALTERA_AVALON_DMA_STATUS(SD_DMA_BASE, 0);
IOWR_ALTERA_AVALON_DMA_RADDRESS(SD_DMA_BASE, (int)p);
IOWR_ALTERA_AVALON_DMA_WADDRESS(SD_DMA_BASE, SD_BASE);
IOWR_ALTERA_AVALON_DMA_LENGTH(SD_DMA_BASE, 40);
IOWR_ALTERA_AVALON_DMA_CONTROL(SD_DMA_BASE, 0x02DC);
}
}
int main(void)
{
unsigned int *p = (unsigned int*)(SDRAM_BASE + 0xF4240);
.............
//Write to memory something (in this case 10 words)
for (i=0, pattern=0xFFAAFFAA; i<10; i++)
{
IOWR_32DIRECT(p+i, 0, pattern);
}
alt_irq_register(SD_DMA_IRQ, pdma, isr_dma);
//Send to some device 10 words
IOWR_ALTERA_AVALON_DMA_STATUS(SD_DMA_BASE, 0);
IOWR_ALTERA_AVALON_DMA_RADDRESS(SD_DMA_BASE, (int)p);
IOWR_ALTERA_AVALON_DMA_WADDRESS(SD_DMA_BASE, SD_BASE);
IOWR_ALTERA_AVALON_DMA_LENGTH(SD_DMA_BASE, 40);
IOWR_ALTERA_AVALON_DMA_CONTROL(SD_DMA_BASE, 0x02DC);
...............
}