Altera_Forum
Honored Contributor
20 years agoAbout DMA and user logic ,help!
http://forum.niosforum.com/work2/style_emoticons/<#EMO_DIR#>/huh.gif Hello.
I have a DMA controller and LCD controller in my sopc system. LCD controller is adder to system as the user logic. The purpose is to transmit image data to LCD controller via DMA. As a result of the performance, the transmission should be implemented in ISR. I use the following code for the task, but the ISR can not work. void init_dma(char *image_addr) { np_dma *pdma= np_dma; alt_irq_register(AVALON_DMA_IRQ, NULL, isr_dma); pdma->np_dmacontrol=0; //dma interrupt disable pdma->np_dmastatus=0; //clear interrupt status pdma->np_dmalength=176*144;//the length of data to transmit pdma->np_dmareadaddress=(char)image_addr; pdma->np_dmawriteaddress=(int)XVGA_BASE; /*pdma->np_dmacontrol= np_dmacontrol_go_mask| np_dmacontrol_i_en_mask| np_dmacontrol_word_mask| np_dmacontrol_ween_mask| np_dmacontrol_wcon_mask| np_dmacontrol_leen_mask;*/ pdma->np_dmacontrol=1; } void isr_dma(void* context, alt_u32 id) { np_dma *pdma; np_dma *pdma=(np_dma *)dma; if(pdma->np_dmastatus & np_dmastatus_done_mask) { pdma->np_dmacontrol=0; //disable dma interrupt pdma->np_dmastatus=0; //clear dma interrupt status pdma->np_dmalength=176*144; pdma->np_dmareadaddress=(int)outBuf; pdma->np_dmawriteaddress=(int)XVGA_BASE; pdma->np_dmacontrol= np_dmacontrol_go_mask| np_dmacontrol_i_en_mask| np_dmacontrol_word_mask| np_dmacontrol_ween_mask| np_dmacontrol_wcon_mask| np_dmacontrol_leen_mask; } }