git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@16151 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
26aab35d00
commit
acbeff09d8
|
@ -86,6 +86,7 @@ static uint32_t __nocache_sd2_wbuf[1];
|
||||||
*
|
*
|
||||||
* @param[in] sdcp pointer to the @p SDCDriver object
|
* @param[in] sdcp pointer to the @p SDCDriver object
|
||||||
* @param[in] f required frequency
|
* @param[in] f required frequency
|
||||||
|
* @return The CLKCR value.
|
||||||
*/
|
*/
|
||||||
static uint32_t sdc_lld_clkdiv(SDCDriver *sdcp, uint32_t f) {
|
static uint32_t sdc_lld_clkdiv(SDCDriver *sdcp, uint32_t f) {
|
||||||
|
|
||||||
|
@ -103,6 +104,13 @@ static uint32_t sdc_lld_clkdiv(SDCDriver *sdcp, uint32_t f) {
|
||||||
return sdcp->config->slowdown + ((sdcp->clkfreq + (f * 2) - 1) / (f * 2));
|
return sdcp->config->slowdown + ((sdcp->clkfreq + (f * 2) - 1) / (f * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calculates the value to be put in DTIMER for timeout.
|
||||||
|
*
|
||||||
|
* @param[in] sdcp pointer to the @p SDCDriver object
|
||||||
|
* @param[in] ms timeout in milliseconds
|
||||||
|
* @return The DTIMER value.
|
||||||
|
*/
|
||||||
__STATIC_FORCEINLINE uint32_t sdc_lld_get_timeout(SDCDriver *sdcp,
|
__STATIC_FORCEINLINE uint32_t sdc_lld_get_timeout(SDCDriver *sdcp,
|
||||||
uint32_t ms) {
|
uint32_t ms) {
|
||||||
uint32_t clkdiv = sdcp->sdmmc->CLKCR & 0xFFU;
|
uint32_t clkdiv = sdcp->sdmmc->CLKCR & 0xFFU;
|
||||||
|
@ -326,10 +334,9 @@ static void sdc_lld_error_cleanup(SDCDriver *sdcp,
|
||||||
/* Clearing status.*/
|
/* Clearing status.*/
|
||||||
sta = sdcp->sdmmc->STA;
|
sta = sdcp->sdmmc->STA;
|
||||||
sdcp->sdmmc->ICR = sta;
|
sdcp->sdmmc->ICR = sta;
|
||||||
sdc_lld_collect_errors(sdcp, sta);
|
|
||||||
|
|
||||||
sdcp->sdmmc->IDMACTRL = 0U;
|
sdcp->sdmmc->IDMACTRL = 0U;
|
||||||
sdcp->sdmmc->DCTRL = SDMMC_DCTRL_FIFORST;
|
sdcp->sdmmc->DCTRL = 0U;
|
||||||
|
sdc_lld_collect_errors(sdcp, sta);
|
||||||
|
|
||||||
if (n > 1U) {
|
if (n > 1U) {
|
||||||
sdc_lld_send_cmd_short_crc(sdcp, MMCSD_CMD_STOP_TRANSMISSION, 0, resp);
|
sdc_lld_send_cmd_short_crc(sdcp, MMCSD_CMD_STOP_TRANSMISSION, 0, resp);
|
||||||
|
@ -400,11 +407,11 @@ void sdc_lld_start(SDCDriver *sdcp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configuration, card clock is initially stopped.*/
|
/* Configuration, card clock is initially stopped.*/
|
||||||
sdcp->sdmmc->IDMACTRL = 0;
|
sdcp->sdmmc->IDMACTRL = 0U;
|
||||||
sdcp->sdmmc->DCTRL = 0;
|
sdcp->sdmmc->DCTRL = 0U;
|
||||||
sdcp->sdmmc->POWER = 0;
|
sdcp->sdmmc->POWER = 0U;
|
||||||
sdcp->sdmmc->CLKCR = 0;
|
sdcp->sdmmc->CLKCR = 0U;
|
||||||
sdcp->sdmmc->DTIMER = 0;
|
sdcp->sdmmc->DTIMER = 0U;
|
||||||
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,12 +426,12 @@ void sdc_lld_stop(SDCDriver *sdcp) {
|
||||||
|
|
||||||
if (sdcp->state != BLK_STOP) {
|
if (sdcp->state != BLK_STOP) {
|
||||||
|
|
||||||
/* SDIO deactivation.*/
|
/* SDMMC deactivation.*/
|
||||||
sdcp->sdmmc->IDMACTRL = 0;
|
sdcp->sdmmc->IDMACTRL = 0U;
|
||||||
sdcp->sdmmc->DCTRL = 0;
|
sdcp->sdmmc->DCTRL = 0U;
|
||||||
sdcp->sdmmc->POWER = 0;
|
sdcp->sdmmc->POWER = 0U;
|
||||||
sdcp->sdmmc->CLKCR = 0;
|
sdcp->sdmmc->CLKCR = 0U;
|
||||||
sdcp->sdmmc->DTIMER = 0;
|
sdcp->sdmmc->DTIMER = 0U;
|
||||||
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
sdcp->sdmmc->ICR = SDMMC_ICR_ALL_FLAGS;
|
||||||
|
|
||||||
/* Clock deactivation.*/
|
/* Clock deactivation.*/
|
||||||
|
@ -499,8 +506,8 @@ void sdc_lld_set_data_clk(SDCDriver *sdcp, sdcbusclk_t clk) {
|
||||||
*/
|
*/
|
||||||
void sdc_lld_stop_clk(SDCDriver *sdcp) {
|
void sdc_lld_stop_clk(SDCDriver *sdcp) {
|
||||||
|
|
||||||
sdcp->sdmmc->CLKCR = 0;
|
sdcp->sdmmc->CLKCR = 0U;
|
||||||
sdcp->sdmmc->POWER = 0;
|
sdcp->sdmmc->POWER = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -821,7 +828,7 @@ bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk,
|
||||||
#if STM32_SDC_SDMMC_UNALIGNED_SUPPORT
|
#if STM32_SDC_SDMMC_UNALIGNED_SUPPORT
|
||||||
if (((unsigned)buf & 3U) != 0U) {
|
if (((unsigned)buf & 3U) != 0U) {
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i < blocks; i++) {
|
for (i = 0U; i < blocks; i++) {
|
||||||
if (sdc_lld_read_aligned(sdcp, startblk, sdcp->buf, 1)) {
|
if (sdc_lld_read_aligned(sdcp, startblk, sdcp->buf, 1)) {
|
||||||
return HAL_FAILED;
|
return HAL_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -857,7 +864,7 @@ bool sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
|
||||||
#if STM32_SDC_SDMMC_UNALIGNED_SUPPORT
|
#if STM32_SDC_SDMMC_UNALIGNED_SUPPORT
|
||||||
if (((unsigned)buf & 3U) != 0U) {
|
if (((unsigned)buf & 3U) != 0U) {
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i < blocks; i++) {
|
for (i = 0U; i < blocks; i++) {
|
||||||
memcpy(sdcp->buf, buf, MMCSD_BLOCK_SIZE);
|
memcpy(sdcp->buf, buf, MMCSD_BLOCK_SIZE);
|
||||||
buf += MMCSD_BLOCK_SIZE;
|
buf += MMCSD_BLOCK_SIZE;
|
||||||
if (sdc_lld_write_aligned(sdcp, startblk, sdcp->buf, 1))
|
if (sdc_lld_write_aligned(sdcp, startblk, sdcp->buf, 1))
|
||||||
|
@ -901,7 +908,7 @@ void sdc_lld_serve_interrupt(SDCDriver *sdcp) {
|
||||||
|
|
||||||
/* Disables the source but the status flags are not reset because the
|
/* Disables the source but the status flags are not reset because the
|
||||||
read/write functions needs to check them.*/
|
read/write functions needs to check them.*/
|
||||||
sdcp->sdmmc->MASK = 0;
|
sdcp->sdmmc->MASK = 0U;
|
||||||
osalThreadResumeI(&sdcp->thread, MSG_OK);
|
osalThreadResumeI(&sdcp->thread, MSG_OK);
|
||||||
|
|
||||||
osalSysUnlockFromISR();
|
osalSysUnlockFromISR();
|
||||||
|
|
|
@ -69,14 +69,14 @@
|
||||||
* @brief Write timeout in milliseconds.
|
* @brief Write timeout in milliseconds.
|
||||||
*/
|
*/
|
||||||
#if !defined(STM32_SDC_SDMMC_WRITE_TIMEOUT) || defined(__DOXYGEN__)
|
#if !defined(STM32_SDC_SDMMC_WRITE_TIMEOUT) || defined(__DOXYGEN__)
|
||||||
#define STM32_SDC_SDMMC_WRITE_TIMEOUT 1000000
|
#define STM32_SDC_SDMMC_WRITE_TIMEOUT 10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Read timeout in milliseconds.
|
* @brief Read timeout in milliseconds.
|
||||||
*/
|
*/
|
||||||
#if !defined(STM32_SDC_SDMMC_READ_TIMEOUT) || defined(__DOXYGEN__)
|
#if !defined(STM32_SDC_SDMMC_READ_TIMEOUT) || defined(__DOXYGEN__)
|
||||||
#define STM32_SDC_SDMMC_READ_TIMEOUT 1000000
|
#define STM32_SDC_SDMMC_READ_TIMEOUT 10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue