aboutsummaryrefslogtreecommitdiffstats
path: root/os/io
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-10 22:13:59 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-10 22:13:59 +0000
commit176444320c3c32bd35180ffcdbbda7be0cfd23bc (patch)
treeabdbcd42f2a02eff714fb0fbd3224e0cb6cc17dd /os/io
parente48e822aa8ec66fc9daac05e387ffb77d8f5c452 (diff)
downloadChibiOS-176444320c3c32bd35180ffcdbbda7be0cfd23bc.tar.gz
ChibiOS-176444320c3c32bd35180ffcdbbda7be0cfd23bc.tar.bz2
ChibiOS-176444320c3c32bd35180ffcdbbda7be0cfd23bc.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1281 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/io')
-rw-r--r--os/io/mmc_spi.c8
-rw-r--r--os/io/platforms/STM32/spi_lld.c15
-rw-r--r--os/io/platforms/STM32/spi_lld.h5
-rw-r--r--os/io/spi.c4
-rw-r--r--os/io/spi.h4
-rw-r--r--os/io/templates/spi_lld.c5
-rw-r--r--os/io/templates/spi_lld.h5
7 files changed, 28 insertions, 18 deletions
diff --git a/os/io/mmc_spi.c b/os/io/mmc_spi.c
index 6a2407a6a..42100bb61 100644
--- a/os/io/mmc_spi.c
+++ b/os/io/mmc_spi.c
@@ -372,6 +372,8 @@ bool_t mmcSequentialRead(MMCDriver *mmcp, uint8_t *buffer) {
* @retval TRUE the operation failed.
*/
bool_t mmcStopSequentialRead(MMCDriver *mmcp) {
+ static const uint8_t stopcmd[] = {0x40 | MMC_CMDSTOP, 0, 0, 0, 0, 1, 0xFF};
+ bool_t result;
chDbgCheck(mmcp != NULL, "mmcStopSequentialRead");
@@ -382,11 +384,15 @@ bool_t mmcStopSequentialRead(MMCDriver *mmcp) {
}
chSysUnlock();
+ spiSend(mmcp->mmc_spip, sizeof(stopcmd), stopcmd);
+ result = recvr1(mmcp) != 0x00;
+ spiUnselect(mmcp->mmc_spip);
+
chSysLock();
if (mmcp->mmc_state == MMC_READING)
mmcp->mmc_state = MMC_READY;
chSysUnlock();
- return FALSE;
+ return result;
}
/** @} */
diff --git a/os/io/platforms/STM32/spi_lld.c b/os/io/platforms/STM32/spi_lld.c
index b92dafe6e..087319c5d 100644
--- a/os/io/platforms/STM32/spi_lld.c
+++ b/os/io/platforms/STM32/spi_lld.c
@@ -61,7 +61,7 @@ static void spi_stop(SPIDriver *spip) {
}
static void spi_start_wait(SPIDriver *spip, size_t n,
- void *rxbuf, void *txbuf) {
+ const void *txbuf, void *rxbuf) {
uint32_t ccr;
/* Common DMA setup.*/
@@ -294,7 +294,7 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) {
spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_TEIE;
spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_TEIE;
- spi_start_wait(spip, n, &dummyrx, &dummytx);
+ spi_start_wait(spip, n, &dummytx, &dummyrx);
}
/**
@@ -309,11 +309,12 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spi_lld_exchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf) {
+void spi_lld_exchange(SPIDriver *spip, size_t n,
+ const void *txbuf, void *rxbuf) {
spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_MINC | DMA_CCR1_TEIE;
spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_MINC | DMA_CCR1_TEIE;
- spi_start_wait(spip, n, rxbuf, txbuf);
+ spi_start_wait(spip, n, txbuf, rxbuf);
}
/**
@@ -326,11 +327,11 @@ void spi_lld_exchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spi_lld_send(SPIDriver *spip, size_t n, void *txbuf) {
+void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) {
spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_TEIE;
spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_MINC | DMA_CCR1_TEIE;
- spi_start_wait(spip, n, &dummyrx, txbuf);
+ spi_start_wait(spip, n, txbuf, &dummyrx);
}
/**
@@ -347,7 +348,7 @@ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) {
spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_MINC | DMA_CCR1_TEIE;
spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_TEIE;
- spi_start_wait(spip, n, rxbuf, &dummytx);
+ spi_start_wait(spip, n, &dummytx, rxbuf);
}
/** @} */
diff --git a/os/io/platforms/STM32/spi_lld.h b/os/io/platforms/STM32/spi_lld.h
index 54dcbfff3..a6041f060 100644
--- a/os/io/platforms/STM32/spi_lld.h
+++ b/os/io/platforms/STM32/spi_lld.h
@@ -186,8 +186,9 @@ extern "C" {
void spi_lld_select(SPIDriver *spip);
void spi_lld_unselect(SPIDriver *spip);
void spi_lld_ignore(SPIDriver *spip, size_t n);
- void spi_lld_exchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf);
- void spi_lld_send(SPIDriver *spip, size_t n, void *txbuf);
+ void spi_lld_exchange(SPIDriver *spip, size_t n,
+ const void *txbuf, void *rxbuf);
+ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf);
void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf);
#ifdef __cplusplus
}
diff --git a/os/io/spi.c b/os/io/spi.c
index 226751ddb..4d45d217d 100644
--- a/os/io/spi.c
+++ b/os/io/spi.c
@@ -159,7 +159,7 @@ void spiIgnore(SPIDriver *spip, size_t n) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spiExchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf) {
+void spiExchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) {
chDbgCheck((spip != NULL) && (n > 0) && (rxbuf != NULL) && (txbuf != NULL),
"spiExchange");
@@ -180,7 +180,7 @@ void spiExchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spiSend(SPIDriver *spip, size_t n, void *txbuf) {
+void spiSend(SPIDriver *spip, size_t n, const void *txbuf) {
chDbgCheck((spip != NULL) && (n > 0) && (txbuf != NULL),
"spiSend");
diff --git a/os/io/spi.h b/os/io/spi.h
index 3bd21e71b..cebde453f 100644
--- a/os/io/spi.h
+++ b/os/io/spi.h
@@ -60,8 +60,8 @@ extern "C" {
void spiSelect(SPIDriver *spip);
void spiUnselect(SPIDriver *spip);
void spiIgnore(SPIDriver *spip, size_t n);
- void spiExchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf);
- void spiSend(SPIDriver *spip, size_t n, void *txbuf);
+ void spiExchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf);
+ void spiSend(SPIDriver *spip, size_t n, const void *txbuf);
void spiReceive(SPIDriver *spip, size_t n, void *rxbuf);
#if SPI_USE_MUTUAL_EXCLUSION
void spiAcquireBus(SPIDriver *spip);
diff --git a/os/io/templates/spi_lld.c b/os/io/templates/spi_lld.c
index 61f23ddbe..501352037 100644
--- a/os/io/templates/spi_lld.c
+++ b/os/io/templates/spi_lld.c
@@ -112,7 +112,8 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spi_lld_exchange(SPIDriver *spip, size_t n, void *rxbuf, void *txbuf) {
+void spi_lld_exchange(SPIDriver *spip, size_t n,
+ const void *txbuf, void *rxbuf) {
}
@@ -126,7 +127,7 @@ void spi_lld_exchange(SPIDriver *spip, size_t n, void *rxbuf, void *txbuf) {
* @note The buffers are organized as uint8_t arrays for data sizes below or
* equal to 8 bits else it is organized as uint16_t arrays.
*/
-void spi_lld_send(SPIDriver *spip, size_t n, void *txbuf) {
+void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) {
}
diff --git a/os/io/templates/spi_lld.h b/os/io/templates/spi_lld.h
index a84dce1fd..5246225d7 100644
--- a/os/io/templates/spi_lld.h
+++ b/os/io/templates/spi_lld.h
@@ -91,8 +91,9 @@ extern "C" {
void spi_lld_select(SPIDriver *spip);
void spi_lld_unselect(SPIDriver *spip);
void spi_lld_ignore(SPIDriver *spip, size_t n);
- void spi_lld_exchange(SPIDriver *spip, size_t n, void *txbuf, void *rxbuf);
- void spi_lld_send(SPIDriver *spip, size_t n, void *txbuf);
+ void spi_lld_exchange(SPIDriver *spip, size_t n,
+ const void *txbuf, void *rxbuf);
+ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf);
void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf);
#ifdef __cplusplus
}