[KINETIS] K20x SPI use separate rx/tx dummy bytes.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7310 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
49d1458e83
commit
844094dc44
|
@ -70,12 +70,15 @@ SPIDriver SPID1;
|
||||||
/* Driver local variables and types. */
|
/* Driver local variables and types. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/* Use a dummy byte as the source/destination when a buffer is not provided */
|
||||||
|
/* Note: The MMC driver relies on 0xFF being sent for dummy bytes. */
|
||||||
|
static volatile uint16_t dmaRxDummy;
|
||||||
|
static uint16_t dmaTxDummy = 0xFFFF;
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver local functions. */
|
/* Driver local functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
volatile uint8_t dmaDummy;
|
|
||||||
|
|
||||||
static void spi_start_xfer(SPIDriver *spip, bool polling)
|
static void spi_start_xfer(SPIDriver *spip, bool polling)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -91,15 +94,12 @@ static void spi_start_xfer(SPIDriver *spip, bool polling)
|
||||||
spip->spi->RSER = SPIx_RSER_RFDF_DIRS | SPIx_RSER_RFDF_RE |
|
spip->spi->RSER = SPIx_RSER_RFDF_DIRS | SPIx_RSER_RFDF_RE |
|
||||||
SPIx_RSER_TFFF_RE | SPIx_RSER_TFFF_DIRS;
|
SPIx_RSER_TFFF_RE | SPIx_RSER_TFFF_DIRS;
|
||||||
|
|
||||||
/* Use dmaDummy as the source/destination when a buffer is not provided */
|
|
||||||
dmaDummy = 0;
|
|
||||||
|
|
||||||
/* Configure RX DMA */
|
/* Configure RX DMA */
|
||||||
if (spip->rxbuf) {
|
if (spip->rxbuf) {
|
||||||
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DADDR = (uint32_t)spip->rxbuf;
|
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DADDR = (uint32_t)spip->rxbuf;
|
||||||
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DOFF = spip->word_size;
|
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DOFF = spip->word_size;
|
||||||
} else {
|
} else {
|
||||||
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DADDR = (uint32_t)&dmaDummy;
|
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DADDR = (uint32_t)&dmaRxDummy;
|
||||||
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DOFF = 0;
|
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].DOFF = 0;
|
||||||
}
|
}
|
||||||
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].BITER_ELINKNO = spip->count;
|
DMA->TCD[KINETIS_SPI0_RX_DMA_CHANNEL].BITER_ELINKNO = spip->count;
|
||||||
|
@ -113,7 +113,7 @@ static void spi_start_xfer(SPIDriver *spip, bool polling)
|
||||||
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SADDR = (uint32_t)spip->txbuf;
|
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SADDR = (uint32_t)spip->txbuf;
|
||||||
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SOFF = spip->word_size;
|
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SOFF = spip->word_size;
|
||||||
} else {
|
} else {
|
||||||
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SADDR = (uint32_t)&dmaDummy;
|
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SADDR = (uint32_t)&dmaTxDummy;
|
||||||
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SOFF = 0;
|
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].SOFF = 0;
|
||||||
}
|
}
|
||||||
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].BITER_ELINKNO = spip->count;
|
DMA->TCD[KINETIS_SPI0_TX_DMA_CHANNEL].BITER_ELINKNO = spip->count;
|
||||||
|
|
Loading…
Reference in New Issue