Forum Discussion
Altera_Forum
Honored Contributor
21 years agoDMA
i use a dma CRC peripheral.when i run as NIOS II MODELSIM ,THE SIMULATE result is correct,but I run as the NIOS II hardware ,the result is wrong .why this results is not indential. i use quartus...
Altera_Forum
Honored Contributor
21 years agothis is my c program
volatile alt_u16 crcCompute(void) { alt_u16 word; int value; int pat[4]={0x00000003,0x00000004,0x00000005,0x00000006}; //alt_u8 pat[8]={0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04}; int mode; //pat[0]=0x00000003; printf("start crc\n"); IOWR(CRC_PERIPH_BASE,0,0x0000FFFF); //value=IORD(CRC_PERIPH_BASE,0); //printf("value= %x\n",value); // value=IORD(CRC_PERIPH_BASE,1); //printf("value= %x\n",value); /*IOWR(SLAVE_REG_0_BASE,0,0x0000F0F0); alt_dma_txchan_ioctl(tx, ALT_DMA_TX_ONLY_ON, (void*)(CRC_PERIPH_BASE+0x4 )); alt_avalon_dma_send (tx, (int)pat, 16 , //dma_done, NULL, NULL);*/ IOWR_ALTERA_AVALON_DMA_STATUS(AVALON_DMA_BASE, 0); IOWR_ALTERA_AVALON_DMA_CONTROL(AVALON_DMA_BASE,0); IOWR_ALTERA_AVALON_DMA_RADDRESS(AVALON_DMA_BASE, (int)pat); IOWR_ALTERA_AVALON_DMA_WADDRESS(AVALON_DMA_BASE, (CRC_PERIPH_BASE+0x4)); IOWR_ALTERA_AVALON_DMA_LENGTH(AVALON_DMA_BASE, 4); mode = ALTERA_AVALON_DMA_CONTROL_WORD_MSK | ALTERA_AVALON_DMA_CONTROL_GO_MSK | ALTERA_AVALON_DMA_CONTROL_LEEN_MSK | ALTERA_AVALON_DMA_CONTROL_WCON_MSK ; IOWR_ALTERA_AVALON_DMA_CONTROL(AVALON_DMA_BASE,mode); value=IORD(CRC_PERIPH_BASE,0); printf("value= %x\n",value); value=IORD(CRC_PERIPH_BASE,1); printf("value= %x\n",value); while (IORD_ALTERA_AVALON_DMA_STATUS (AVALON_DMA_BASE) & ALTERA_AVALON_DMA_STATUS_BUSY_MSK); printf("waiting crc\n"); word = (IORD((CRC_PERIPH_BASE),1)); printf("crc value0=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x1),1)); printf("crc value1=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x2),1)); printf("crc value2=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x3),0)); printf("crc value3=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x0),0)); printf("crc value4=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x1),0)); printf("crc value5=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x2),0)); printf("crc value6=%x\n",word); word = (IORD((CRC_PERIPH_BASE+0x3),0)); printf("crc value7=%x\n",word); word = (IORD((CRC_PERIPH_BASE),0)); printf("crc value00=%x\n",word); return (word); } /* crcCompute() */