|
I got it working... down here is the source code if someone is need of help..
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void Config_DMA_SPI (void) { AT91C_BASE_PMC->PMC_PCER |= 1 << AT91C_ID_HDMA; AT91C_BASE_HDMA->HDMA_GCFG=0; //SPI RX AT91C_BASE_HDMA_CH_0->HDMA_CTRLB = AT91C_HDMA_SRC_DSCR_FETCH_DISABLE | AT91C_HDMA_DST_DSCR_FETCH_DISABLE | AT91C_HDMA_SRC_ADDRESS_MODE_FIXED | AT91C_HDMA_DST_ADDRESS_MODE_INCR | AT91C_HDMA_FC_PER2MEM; AT91C_BASE_HDMA_CH_0->HDMA_CFG = AT91C_HDMA_SRC_PER_2 | AT91C_HDMA_LOCK_IF_DISABLE | AT91C_HDMA_LOCK_B_DISABLE | AT91C_HDMA_SRC_H2SEL_HW | AT91C_HDMA_DST_H2SEL_SW | AT91C_HDMA_FIFOCFG_LARGESTBURST;
AT91C_BASE_HDMA_CH_0->HDMA_DSCR=0; AT91C_BASE_HDMA_CH_0->HDMA_SADDR=(unsigned int)&AT91C_BASE_SPI0->SPI_RDR; AT91C_BASE_HDMA_CH_0->HDMA_DADDR=(unsigned int)buff_in; AT91C_BASE_HDMA_CH_0->HDMA_CTRLA = AT91C_HDMA_DCSIZE_1 | AT91C_HDMA_SCSIZE_1 | AT91C_HDMA_SRC_WIDTH_BYTE | AT91C_HDMA_SRC_WIDTH_BYTE | TRANSFER_SIZE;
// SPI TX AT91C_BASE_HDMA_CH_1->HDMA_CTRLB = AT91C_HDMA_SRC_DSCR_FETCH_DISABLE | AT91C_HDMA_DST_DSCR_FETCH_DISABLE | AT91C_HDMA_SRC_ADDRESS_MODE_FIXED | AT91C_HDMA_DST_ADDRESS_MODE_FIXED | AT91C_HDMA_FC_MEM2PER ; AT91C_BASE_HDMA_CH_1->HDMA_CFG = AT91C_HDMA_DST_PER_1 | AT91C_HDMA_SOD_DISABLE | AT91C_HDMA_LOCK_IF_DISABLE | AT91C_HDMA_LOCK_B_DISABLE | AT91C_HDMA_SRC_H2SEL_SW | AT91C_HDMA_DST_H2SEL_HW | AT91C_HDMA_FIFOCFG_LARGESTBURST; AT91C_BASE_HDMA_CH_1->HDMA_DSCR = 0; AT91C_BASE_HDMA_CH_1->HDMA_SADDR=(unsigned int)&dummy_spi_byte; AT91C_BASE_HDMA_CH_1->HDMA_DADDR=(unsigned int)&AT91C_BASE_SPI0->SPI_TDR; AT91C_BASE_HDMA_CH_1->HDMA_CTRLA = AT91C_HDMA_DCSIZE_1 + AT91C_HDMA_SCSIZE_1 + AT91C_HDMA_SRC_WIDTH_BYTE + AT91C_HDMA_DST_WIDTH_BYTE + TRANSFER_SIZE; //Interrupt AT91C_BASE_HDMA->HDMA_EBCIER=AT91C_HDMA_BTC0+AT91C_HDMA_BTC1; IRQ_ConfigureIT(AT91C_ID_HDMA, 0, HDMA_IrqHandler); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void Enable_DMA_SPI(void) { AT91C_BASE_HDMA_CH_0->HDMA_DADDR=(unsigned int)buff_in; // RX AT91C_BASE_HDMA_CH_0->HDMA_CTRLA |= TRANSFER_SIZE; AT91C_BASE_HDMA_CH_1->HDMA_CTRLA |= TRANSFER_SIZE; AT91C_BASE_HDMA->HDMA_EN = AT91C_HDMA_ENABLE; AT91C_BASE_HDMA->HDMA_CHER = AT91C_HDMA_ENA0_1; //RX AT91C_BASE_HDMA->HDMA_CHER = AT91C_HDMA_ENA1_1; //TX IRQ_EnableIT(AT91C_ID_HDMA); }
|