diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-10-25 13:36:28 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-10-25 13:36:28 +0000 |
commit | 5d19ae768a8a1871a60f60d24562d0bd53ba3d69 (patch) | |
tree | c2b9a0c9376841c77a6ec053b97c40ef811cc5dc /os/io/platforms/STM32 | |
parent | 81f043865e8bc737cadd82e919d334f24df6e50f (diff) | |
download | ChibiOS-5d19ae768a8a1871a60f60d24562d0bd53ba3d69.tar.gz ChibiOS-5d19ae768a8a1871a60f60d24562d0bd53ba3d69.tar.bz2 ChibiOS-5d19ae768a8a1871a60f60d24562d0bd53ba3d69.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1254 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/io/platforms/STM32')
-rw-r--r-- | os/io/platforms/STM32/spi_lld.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/os/io/platforms/STM32/spi_lld.c b/os/io/platforms/STM32/spi_lld.c index 6c203358f..7f3865c2a 100644 --- a/os/io/platforms/STM32/spi_lld.c +++ b/os/io/platforms/STM32/spi_lld.c @@ -103,7 +103,31 @@ void spi_lld_init(void) { */
void spi_lld_setup(SPIDriver *spip) {
+ /* SPI setup.*/
spip->spd_spi->CR1 = spip->spd_config->spc_cr1;
+
+ /* DMA setup.*/
+ if ((spip->spd_config->spc_cr1 & SPI_CR1_DFF) != 0) {
+ /* Prepares for 16 bits transfer.*/
+ spip->spd_dmarx->CCR = spip->spd_dmaprio |
+ DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0 |
+ DMA_CCR1_MINC |
+ DMA_CCR1_TEIE | DMA_CCR1_TCIE;
+ spip->spd_dmatx->CCR = spip->spd_dmaprio |
+ DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0 |
+ DMA_CCR1_MINC | DMA_CCR1_DIR |
+ DMA_CCR1_TEIE | DMA_CCR1_TCIE;
+ }
+ else {
+ /* Prepares for 8 bits transfer.*/
+ spip->spd_dmarx->CCR = spip->spd_dmaprio | DMA_CCR1_MINC |
+ DMA_CCR1_TEIE | DMA_CCR1_TCIE;
+ spip->spd_dmatx->CCR = spip->spd_dmaprio |
+ DMA_CCR1_MINC | DMA_CCR1_DIR |
+ DMA_CCR1_TEIE | DMA_CCR1_TCIE;
+ }
+ spip->spd_dmarx->CPAR = (uint32_t)&spip->spd_spi->DR;
+ spip->spd_dmatx->CPAR = (uint32_t)&spip->spd_spi->DR;
}
/**
@@ -146,15 +170,11 @@ void spi_lld_unselect(SPIDriver *spip) { */
void spi_lld_exchange(SPIDriver *spip, size_t n, void *rxbuf, void *txbuf) {
- /*
- * DMA setup. - */
+ /* DMA setup.*/
spip->spd_dmarx->CNDTR = (uint32_t)n;
- spip->spd_dmarx->CPAR = (uint32_t)&spip->spd_spi->DR;
+ spip->spd_dmatx->CNDTR = (uint32_t)n;
spip->spd_dmarx->CMAR = (uint32_t)rxbuf;
- spip->spd_dmarx->CCR = spip->spd_dmaprio |
- DMA_CCR1_MSIZE_0 | DMA_CCR1_MSIZE_0 |
- DMA_CCR1_MINC | DMA_CCR1_TEIE | DMA_CCR1_TCIE;
+ spip->spd_dmatx->CMAR = (uint32_t)txbuf;
}
/** @} */
|