Reverted one of the previous changes in SDMMCv2, added slowdown setting.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@16134 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
1905b25683
commit
2b5d72890d
|
@ -159,13 +159,13 @@
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
<scannerConfigBuildInfo instanceId="0.365230168.523175374.1281863608">
|
<scannerConfigBuildInfo instanceId="0.365230168">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
<scannerConfigBuildInfo instanceId="0.365230168.523175374.18049993">
|
<scannerConfigBuildInfo instanceId="0.365230168.523175374.18049993">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
<scannerConfigBuildInfo instanceId="0.365230168">
|
<scannerConfigBuildInfo instanceId="0.365230168.523175374.1281863608">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
<scannerConfigBuildInfo instanceId="0.365230168.523175374">
|
<scannerConfigBuildInfo instanceId="0.365230168.523175374">
|
||||||
|
|
|
@ -792,7 +792,7 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk,
|
||||||
if (_sdc_wait_for_transfer_state(sdcp))
|
if (_sdc_wait_for_transfer_state(sdcp))
|
||||||
return HAL_FAILED;
|
return HAL_FAILED;
|
||||||
|
|
||||||
/* Prepares the DMA channel for writing.*/
|
/* Prepares the DMA channel for reading.*/
|
||||||
dmaStreamSetMemory0(sdcp->dma, buf);
|
dmaStreamSetMemory0(sdcp->dma, buf);
|
||||||
dmaStreamSetTransactionSize(sdcp->dma,
|
dmaStreamSetTransactionSize(sdcp->dma,
|
||||||
(blocks * MMCSD_BLOCK_SIZE) / sizeof (uint32_t));
|
(blocks * MMCSD_BLOCK_SIZE) / sizeof (uint32_t));
|
||||||
|
|
|
@ -67,7 +67,8 @@ SDCDriver SDCD2;
|
||||||
* @brief SDIO default configuration.
|
* @brief SDIO default configuration.
|
||||||
*/
|
*/
|
||||||
static const SDCConfig sdc_default_cfg = {
|
static const SDCConfig sdc_default_cfg = {
|
||||||
SDC_MODE_4BIT
|
SDC_MODE_4BIT,
|
||||||
|
0U
|
||||||
};
|
};
|
||||||
|
|
||||||
#if STM32_SDC_USE_SDMMC1 || defined(__DOXYGEN__)
|
#if STM32_SDC_USE_SDMMC1 || defined(__DOXYGEN__)
|
||||||
|
@ -102,10 +103,10 @@ static uint32_t sdc_lld_clkdiv(SDCDriver *sdcp, uint32_t f) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (f >= sdcp->clkfreq) {
|
if (f >= sdcp->clkfreq) {
|
||||||
return 0;
|
return sdcp->config->slowdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (sdcp->clkfreq + (f * 2) - 1) / (f * 2);
|
return sdcp->config->slowdown + ((sdcp->clkfreq + (f * 2) - 1) / (f * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,17 +248,13 @@ static bool sdc_lld_prepare_write(SDCDriver *sdcp, uint32_t startblk,
|
||||||
static bool sdc_lld_wait_transaction_end(SDCDriver *sdcp, uint32_t n,
|
static bool sdc_lld_wait_transaction_end(SDCDriver *sdcp, uint32_t n,
|
||||||
uint32_t *resp) {
|
uint32_t *resp) {
|
||||||
|
|
||||||
// /* Note the mask is checked before going to sleep because the interrupt
|
/* Note the mask is checked before going to sleep because the interrupt
|
||||||
// may have occurred before reaching the critical zone.*/
|
may have occurred before reaching the critical zone.*/
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
|
|
||||||
/* Starting the DMA operation.*/
|
if (sdcp->sdmmc->MASK != 0U) {
|
||||||
sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN;
|
(void) osalThreadSuspendS(&sdcp->thread);
|
||||||
sdcp->sdmmc->DCTRL |= SDMMC_DCTRL_DTEN;
|
}
|
||||||
|
|
||||||
// if (sdcp->sdmmc->MASK != 0U) {
|
|
||||||
(void) osalThreadSuspendS(&sdcp->thread);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/* Stopping operations.*/
|
/* Stopping operations.*/
|
||||||
sdcp->sdmmc->IDMACTRL = 0U;
|
sdcp->sdmmc->IDMACTRL = 0U;
|
||||||
|
@ -270,7 +267,7 @@ static bool sdc_lld_wait_transaction_end(SDCDriver *sdcp, uint32_t n,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clearing status.*/
|
/* Clearing status.*/
|
||||||
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
||||||
|
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
|
|
||||||
|
@ -323,7 +320,7 @@ static void sdc_lld_collect_errors(SDCDriver *sdcp, uint32_t sta) {
|
||||||
static void sdc_lld_error_cleanup(SDCDriver *sdcp,
|
static void sdc_lld_error_cleanup(SDCDriver *sdcp,
|
||||||
uint32_t n,
|
uint32_t n,
|
||||||
uint32_t *resp) {
|
uint32_t *resp) {
|
||||||
uint32_t sta; // sdcp->sdmmc->STA; Double read, race condition.
|
uint32_t sta;
|
||||||
|
|
||||||
/* Clearing status.*/
|
/* Clearing status.*/
|
||||||
sta = sdcp->sdmmc->STA;
|
sta = sdcp->sdmmc->STA;
|
||||||
|
@ -730,7 +727,7 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk,
|
||||||
|
|
||||||
/* Prepares IDMA.*/
|
/* Prepares IDMA.*/
|
||||||
sdcp->sdmmc->IDMABASE0 = (uint32_t)buf;
|
sdcp->sdmmc->IDMABASE0 = (uint32_t)buf;
|
||||||
// sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN;
|
sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN;
|
||||||
|
|
||||||
if (sdc_lld_prepare_read(sdcp, startblk, blocks, sdcp->resp) == true)
|
if (sdc_lld_prepare_read(sdcp, startblk, blocks, sdcp->resp) == true)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -785,7 +782,7 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk,
|
||||||
|
|
||||||
/* Prepares IDMA.*/
|
/* Prepares IDMA.*/
|
||||||
sdcp->sdmmc->IDMABASE0 = (uint32_t)buf;
|
sdcp->sdmmc->IDMABASE0 = (uint32_t)buf;
|
||||||
// sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN;
|
sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN;
|
||||||
|
|
||||||
if (sdc_lld_prepare_write(sdcp, startblk, blocks, sdcp->resp) == true)
|
if (sdc_lld_prepare_write(sdcp, startblk, blocks, sdcp->resp) == true)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -185,6 +185,12 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
sdcbusmode_t bus_width;
|
sdcbusmode_t bus_width;
|
||||||
/* End of the mandatory fields.*/
|
/* End of the mandatory fields.*/
|
||||||
|
/**
|
||||||
|
* @brief Bus slowdown.
|
||||||
|
* @note This values is added to the prescaler register in order to
|
||||||
|
* arbitrarily reduce clock speed.
|
||||||
|
*/
|
||||||
|
uint32_t slowdown;
|
||||||
} SDCConfig;
|
} SDCConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue