Quantcast
Channel: Processors forum - Recent Threads
Viewing all articles
Browse latest Browse all 17527

gpio triggered edma transfer to spi

$
0
0

I am trying to set up an edma transfer to the spi module when I get a trigger on a gpio pin (GPIO6[7]) but I do not seem to be getting an event happening.

my set up code is as follows

// Pin set up

pin_mux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(14)) & ~(SYSCFG_PINMUX14_PINMUX14_3_0));

    /* Setting the pins corresponding to GP6[7] in PINMUX14 register.*/
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(14)) = (PINMUX14_GPIO6_7_ENABLE | pin_mux);
	 
	/* Sets the pin 104 (GP6[12]) as input.*/
    GPIODirModeSet(SOC_GPIO_0_REGS, DRDY_ADS1299, GPIO_DIR_INPUT);	

	/* Set up the interrupt type for the input signal */
	GPIOIntTypeSet(SOC_GPIO_0_REGS, DRDY_ADS1299, GPIO_INT_TYPE_FALLEDGE);

// Spi set up 

/* Reset the SPI controller by toggling the reset bit in the global configuration register 0 */
    SPIReset(SOC_SPI_1_REGS);
    SPIOutOfReset(SOC_SPI_1_REGS);

	/* configure the global configuration register 1 to put the SPI in master mode */
    SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE);
	
	/* configure SPI pin control register 0 the the type of spi interface that is going to be used */
	SPIPinControl(SOC_SPI_1_REGS, 0, 0, &spi_type);
	
	/* Configure the SPI DAT1 register to use Data format register 0, SPI_CS2 and assert the CSHOLD */
    SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), SCS2);	

	/* Configure the SPI default chip select register to assert SPI_CS2 when SPI is not active */ 
    SPIDefaultCSSet(SOC_SPI_1_REGS, SCS2);
	
	/* Configure the SPI data format0 register pre-scale value */
    SPIClkConfigure(SOC_SPI_1_REGS, SPI_1_SYS_CLOCK_FREQ, SPI_CLOCK_FREQ, SPI_DATA_FORMAT0);

	/* Configure the SPI data format0 register polarity and phase of SPI clock */
    SPIConfigClkFormat(SOC_SPI_1_REGS, (SPI_CLK_POL_LOW | SPI_CLK_INPHASE), SPI_DATA_FORMAT0);

	/* Configure the SPI data format0 register to transmit MSB bit First during data transfer */
    SPIShiftMsbFirst(SOC_SPI_1_REGS, SPI_DATA_FORMAT0);

    /* Configure the SPI data format0 register to use 8 bit Character lengths */
    SPICharLengthSet(SOC_SPI_1_REGS, CHAR_LENGTH, SPI_DATA_FORMAT0);	
  
    /* Configure the interrupt level registers to map interrupts to interrupt line INT1 */
    SPIIntLevelSet(SOC_SPI_1_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL);
 
    /* Enable SPI communication by setting the enable bit in the global configuration register 1 */
    SPIEnable(SOC_SPI_1_REGS);			 

SPIIntEnable(SOC_SPI_1_REGS, SPI_DMA_REQUEST_ENA_INT);


// Dma set up 

/* initialise the EDMA  */
    EDMA3Init(SOC_EDMA30CC_0_REGS, 0);

    /* Request EDMA channel. */
    EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,
    					EDMA3_CHA_GPIO_BNKINT6, EDMA3_CHA_GPIO_BNKINT6, 0);

    emg_tx_dma_params.aCnt = emg_tx_dma_params_link.aCnt = 13;
    emg_tx_dma_params.bCnt = emg_tx_dma_params_link.bCnt = 1;
    emg_tx_dma_params.bCntReload = emg_tx_dma_params_link.bCntReload = 0;
    emg_tx_dma_params.cCnt = emg_tx_dma_params_link.cCnt = 1;
    emg_tx_dma_params.destAddr = emg_tx_dma_params_link.destAddr = (unsigned int)HWREG(SOC_SPI_1_REGS + SPI_SPIDAT1);
    emg_tx_dma_params.destBIdx = emg_tx_dma_params_link.destBIdx = 0;
    emg_tx_dma_params.destCIdx = emg_tx_dma_params_link.destCIdx = 0;
    emg_tx_dma_params.linkAddr = emg_tx_dma_params_link.linkAddr = 0x4220;	// link to PaRAM set 17
    emg_tx_dma_params.opt = emg_tx_dma_params_link.opt |= ((EDMA3_CHA_GPIO_BNKINT6 << EDMA3CC_OPT_TCC_SHIFT) & EDMA3CC_OPT_TCC);
    emg_tx_dma_params.srcAddr = emg_tx_dma_params_link.srcAddr = (unsigned int)&Default_buf;
    emg_tx_dma_params.srcBIdx = emg_tx_dma_params_link.srcBIdx = 0;
    emg_tx_dma_params.srcCIdx = emg_tx_dma_params_link.srcCIdx = 0;

    /* assign the default PaRam block to the assigned DMA channel */
    EDMA3SetPaRAM(SOC_EDMA30CC_0_REGS, EDMA3_CHA_GPIO_BNKINT6, &emg_tx_dma_params);

    EDMA3ClrMissEvt(SOC_EDMA30CC_0_REGS, EDMA3_CHA_GPIO_BNKINT6);

    EDMA3ClearErrorBits(SOC_EDMA30CC_0_REGS, EDMA3_CHA_GPIO_BNKINT6, 0);

    EDMA3EnableDmaEvt(SOC_EDMA30CC_0_REGS,
    						EDMA3_CHA_GPIO_BNKINT6);

The Spi tx and rx and gpio interrupts have been working previously but moving to edma I no longer get data out the spi when that pin falls low, if I pause the debugger and look at the event register, event 16 is always a 0.

have I done something wrong in my set up?

Graham


Viewing all articles
Browse latest Browse all 17527

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>