git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5513 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
f571b50713
commit
03331a3fd7
|
@ -114,7 +114,7 @@ static const edma_channel_config_t spi_dspi0_tx_dma_config = {
|
||||||
* @brief DMA configuration for DSPI0 RX.
|
* @brief DMA configuration for DSPI0 RX.
|
||||||
*/
|
*/
|
||||||
static const edma_channel_config_t spi_dspi0_rx_dma_config = {
|
static const edma_channel_config_t spi_dspi0_rx_dma_config = {
|
||||||
SPC5_DSPI0_TX_DMA_DEV_ID, SPC5_SPI_DSPI0_DMA_PRIO, SPC5_SPI_DSPI0_DMA_PRIO,
|
SPC5_DSPI0_RX_DMA_DEV_ID, SPC5_SPI_DSPI0_DMA_PRIO, SPC5_SPI_DSPI0_DMA_PRIO,
|
||||||
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID1
|
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID1
|
||||||
};
|
};
|
||||||
#endif /* SPC5_SPI_USE_DSPI0 */
|
#endif /* SPC5_SPI_USE_DSPI0 */
|
||||||
|
@ -132,7 +132,7 @@ static const edma_channel_config_t spi_dspi1_tx_dma_config = {
|
||||||
* @brief DMA configuration for DSPI1 RX.
|
* @brief DMA configuration for DSPI1 RX.
|
||||||
*/
|
*/
|
||||||
static const edma_channel_config_t spi_dspi1_rx_dma_config = {
|
static const edma_channel_config_t spi_dspi1_rx_dma_config = {
|
||||||
SPC5_DSPI1_TX_DMA_DEV_ID, SPC5_SPI_DSPI1_DMA_PRIO, SPC5_SPI_DSPI1_DMA_PRIO,
|
SPC5_DSPI1_RX_DMA_DEV_ID, SPC5_SPI_DSPI1_DMA_PRIO, SPC5_SPI_DSPI1_DMA_PRIO,
|
||||||
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID2
|
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID2
|
||||||
};
|
};
|
||||||
#endif /* SPC5_SPI_USE_DSPI1 */
|
#endif /* SPC5_SPI_USE_DSPI1 */
|
||||||
|
@ -150,7 +150,7 @@ static const edma_channel_config_t spi_dspi2_tx_dma_config = {
|
||||||
* @brief DMA configuration for DSPI2 RX.
|
* @brief DMA configuration for DSPI2 RX.
|
||||||
*/
|
*/
|
||||||
static const edma_channel_config_t spi_dspi2_rx_dma_config = {
|
static const edma_channel_config_t spi_dspi2_rx_dma_config = {
|
||||||
SPC5_DSPI2_TX_DMA_DEV_ID, SPC5_SPI_DSPI2_DMA_PRIO, SPC5_SPI_DSPI2_DMA_PRIO,
|
SPC5_DSPI2_RX_DMA_DEV_ID, SPC5_SPI_DSPI2_DMA_PRIO, SPC5_SPI_DSPI2_DMA_PRIO,
|
||||||
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID3
|
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID3
|
||||||
};
|
};
|
||||||
#endif /* SPC5_SPI_USE_DSPI2 */
|
#endif /* SPC5_SPI_USE_DSPI2 */
|
||||||
|
@ -168,7 +168,7 @@ static const edma_channel_config_t spi_dspi3_tx_dma_config = {
|
||||||
* @brief DMA configuration for DSPI3 RX.
|
* @brief DMA configuration for DSPI3 RX.
|
||||||
*/
|
*/
|
||||||
static const edma_channel_config_t spi_dspi3_rx_dma_config = {
|
static const edma_channel_config_t spi_dspi3_rx_dma_config = {
|
||||||
SPC5_DSPI3_TX_DMA_DEV_ID, SPC5_SPI_DSPI3_DMA_PRIO, SPC5_SPI_DSPI3_DMA_PRIO,
|
SPC5_DSPI3_RX_DMA_DEV_ID, SPC5_SPI_DSPI3_DMA_PRIO, SPC5_SPI_DSPI3_DMA_PRIO,
|
||||||
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID4
|
spi_serve_rx_irq, spi_serve_dma_error_irq, &SPID4
|
||||||
};
|
};
|
||||||
#endif /* SPC5_SPI_USE_DSPI3 */
|
#endif /* SPC5_SPI_USE_DSPI3 */
|
||||||
|
@ -487,6 +487,10 @@ void spi_lld_start(SPIDriver *spip) {
|
||||||
spip->rx_channel = edmaChannelAllocate(&spi_dspi3_rx_dma_config);
|
spip->rx_channel = edmaChannelAllocate(&spi_dspi3_rx_dma_config);
|
||||||
}
|
}
|
||||||
#endif /* SPC5_SPI_USE_DSPI3 */
|
#endif /* SPC5_SPI_USE_DSPI3 */
|
||||||
|
|
||||||
|
chDbgAssert((spip->tx_channel != EDMA_ERROR) &&
|
||||||
|
(spip->rx_channel != EDMA_ERROR),
|
||||||
|
"spi_lld_start(), #1", "channel cannot be allocated");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configures the peripheral.*/
|
/* Configures the peripheral.*/
|
||||||
|
@ -607,6 +611,9 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) {
|
||||||
void spi_lld_exchange(SPIDriver *spip, size_t n,
|
void spi_lld_exchange(SPIDriver *spip, size_t n,
|
||||||
const void *txbuf, void *rxbuf) {
|
const void *txbuf, void *rxbuf) {
|
||||||
|
|
||||||
|
/* Starting transfer.*/
|
||||||
|
spip->dspi->MCR.B.HALT = 0;
|
||||||
|
|
||||||
/* DMAs require a different setup depending on the frame size.*/
|
/* DMAs require a different setup depending on the frame size.*/
|
||||||
if (spip->dspi->CTAR[0].B.FMSZ < 8) {
|
if (spip->dspi->CTAR[0].B.FMSZ < 8) {
|
||||||
/* Setting up the RX DMA channel.*/
|
/* Setting up the RX DMA channel.*/
|
||||||
|
@ -636,9 +643,6 @@ void spi_lld_exchange(SPIDriver *spip, size_t n,
|
||||||
spi_start_dma_tx16(spip, n, txbuf);
|
spi_start_dma_tx16(spip, n, txbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Starting transfer.*/
|
|
||||||
spip->dspi->MCR.B.HALT = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -294,18 +294,6 @@ typedef struct {
|
||||||
edmaTCDSetWord7(tcdp, iter, mode); \
|
edmaTCDSetWord7(tcdp, iter, mode); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
tcdp->word[0] = (uint32_t)(src); \
|
|
||||||
tcdp->word[1] = ((uint32_t)(ssize) << 24) | ((uint32_t)(dsize) << 16) | \
|
|
||||||
(uint32_t)(soff); \
|
|
||||||
tcdp->word[2] = (uint32_t)(nbytes); \
|
|
||||||
tcdp->word[3] = (uint32_t)(slast); \
|
|
||||||
tcdp->word[0] = (uint32_t)(dst); \
|
|
||||||
tcdp->word[5] = ((uint32_t)(iter) << 16) | (uint32_t)(doff); \
|
|
||||||
tcdp->word[6] = (uint32_t)(dlast); \
|
|
||||||
tcdp->word[7] = ((uint32_t)(iter) << 16) | (uint32_t)(mode);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* External declarations. */
|
/* External declarations. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -120,6 +120,8 @@ int main(void) {
|
||||||
txbuf[i] = (uint8_t)i;
|
txbuf[i] = (uint8_t)i;
|
||||||
|
|
||||||
spiStart(&SPID2, &hs_spicfg); /* Setup transfer parameters. */
|
spiStart(&SPID2, &hs_spicfg); /* Setup transfer parameters. */
|
||||||
|
spiExchange(&SPID2, 4,
|
||||||
|
txbuf, rxbuf); /* Atomic transfer operations. */
|
||||||
spiExchange(&SPID2, 512,
|
spiExchange(&SPID2, 512,
|
||||||
txbuf, rxbuf); /* Atomic transfer operations. */
|
txbuf, rxbuf); /* Atomic transfer operations. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue