Various fixes to OCTOSPI e DMAv1 and MX25.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12401 110e8d01-0319-4d1e-a829-52ad28d1bb01
This commit is contained in:
parent
da54384531
commit
9f6a17e4f1
|
@ -352,8 +352,7 @@ void snor_device_init(SNORDriver *devp) {
|
||||||
n25q_reset_memory(devp);
|
n25q_reset_memory(devp);
|
||||||
|
|
||||||
/* Reading device ID and unique ID.*/
|
/* Reading device ID and unique ID.*/
|
||||||
wspiReceive(devp->config->busp, &mx25_cmd_read_id,
|
wspiReceive(devp->config->busp, &mx25_cmd_read_id, 3U, devp->device_id);
|
||||||
sizeof devp->device_id, devp->device_id);
|
|
||||||
#endif /* SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI */
|
#endif /* SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI */
|
||||||
|
|
||||||
/* Checking if the device is white listed.*/
|
/* Checking if the device is white listed.*/
|
||||||
|
@ -382,7 +381,7 @@ void snor_device_init(SNORDriver *devp) {
|
||||||
/* Reading ID again for confirmation, in DTR mode bytes are read twice,
|
/* Reading ID again for confirmation, in DTR mode bytes are read twice,
|
||||||
it needs adjusting.*/
|
it needs adjusting.*/
|
||||||
#if MX25_BUS_MODE == MX25_BUS_MODE_OPI_DTR
|
#if MX25_BUS_MODE == MX25_BUS_MODE_OPI_DTR
|
||||||
bus_cmd_dummy_receive(devp->config->busp, MX25_CMD_OPI_RDID, 6, id);
|
bus_cmd_dummy_receive(devp->config->busp, MX25_CMD_OPI_RDID, 6U, id);
|
||||||
id[1] = id[2];
|
id[1] = id[2];
|
||||||
id[2] = id[4];
|
id[2] = id[4];
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -545,6 +545,13 @@ bool dmaStreamAllocate(const stm32_dma_stream_t *dmastp,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if STM32_DMA_SUPPORTS_DMAMUX == TRUE
|
||||||
|
/* Enabling DMAMUX if present.*/
|
||||||
|
if (dma.streams_mask == 0U) {
|
||||||
|
rccEnableDMAMUX(true);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Putting the stream in a safe state.*/
|
/* Putting the stream in a safe state.*/
|
||||||
dmaStreamDisable(dmastp);
|
dmaStreamDisable(dmastp);
|
||||||
dmastp->channel->CCR = STM32_DMA_CCR_RESET_VALUE;
|
dmastp->channel->CCR = STM32_DMA_CCR_RESET_VALUE;
|
||||||
|
@ -607,6 +614,13 @@ void dmaStreamRelease(const stm32_dma_stream_t *dmastp) {
|
||||||
rccDisableDMA2();
|
rccDisableDMA2();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if STM32_DMA_SUPPORTS_DMAMUX == TRUE
|
||||||
|
/* Shutting down DMAMUX if present.*/
|
||||||
|
if (dma.streams_mask == 0U) {
|
||||||
|
rccDisableDMAMUX();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE) || defined(__DOXYGEN__)
|
#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
|
@ -205,6 +205,7 @@ void wspi_lld_start(WSPIDriver *wspip) {
|
||||||
(void *)wspip);
|
(void *)wspip);
|
||||||
osalDbgAssert(!b, "stream already allocated");
|
osalDbgAssert(!b, "stream already allocated");
|
||||||
rccEnableOCTOSPI1(true);
|
rccEnableOCTOSPI1(true);
|
||||||
|
dmaSetRequestSource(wspip->dma, STM32_DMAMUX1_OCTOSPI1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -216,6 +217,7 @@ void wspi_lld_start(WSPIDriver *wspip) {
|
||||||
(void *)wspip);
|
(void *)wspip);
|
||||||
osalDbgAssert(!b, "stream already allocated");
|
osalDbgAssert(!b, "stream already allocated");
|
||||||
rccEnableOCTOSPI2(true);
|
rccEnableOCTOSPI2(true);
|
||||||
|
dmaSetRequestSource(wspip->dma, STM32_DMAMUX1_OCTOSPI2);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -285,10 +287,10 @@ void wspi_lld_command(WSPIDriver *wspip, const wspi_command_t *cmdp) {
|
||||||
#endif
|
#endif
|
||||||
wspip->ospi->CR &= ~OCTOSPI_CR_FMODE;
|
wspip->ospi->CR &= ~OCTOSPI_CR_FMODE;
|
||||||
wspip->ospi->DLR = 0U;
|
wspip->ospi->DLR = 0U;
|
||||||
wspip->ospi->IR = cmdp->cmd;
|
|
||||||
wspip->ospi->ABR = cmdp->alt;
|
|
||||||
wspip->ospi->TCR = cmdp->dummy;
|
wspip->ospi->TCR = cmdp->dummy;
|
||||||
wspip->ospi->CCR = cmdp->cfg;
|
wspip->ospi->CCR = cmdp->cfg;
|
||||||
|
wspip->ospi->ABR = cmdp->alt;
|
||||||
|
wspip->ospi->IR = cmdp->cmd;
|
||||||
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
||||||
wspip->ospi->AR = cmdp->addr;
|
wspip->ospi->AR = cmdp->addr;
|
||||||
}
|
}
|
||||||
|
@ -314,10 +316,10 @@ void wspi_lld_send(WSPIDriver *wspip, const wspi_command_t *cmdp,
|
||||||
|
|
||||||
wspip->ospi->CR &= ~OCTOSPI_CR_FMODE;
|
wspip->ospi->CR &= ~OCTOSPI_CR_FMODE;
|
||||||
wspip->ospi->DLR = n - 1;
|
wspip->ospi->DLR = n - 1;
|
||||||
wspip->ospi->IR = cmdp->cmd;
|
|
||||||
wspip->ospi->ABR = cmdp->alt;
|
|
||||||
wspip->ospi->TCR = cmdp->dummy;
|
wspip->ospi->TCR = cmdp->dummy;
|
||||||
wspip->ospi->CCR = cmdp->cfg;
|
wspip->ospi->CCR = cmdp->cfg;
|
||||||
|
wspip->ospi->ABR = cmdp->alt;
|
||||||
|
wspip->ospi->IR = cmdp->cmd;
|
||||||
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
||||||
wspip->ospi->AR = cmdp->addr;
|
wspip->ospi->AR = cmdp->addr;
|
||||||
}
|
}
|
||||||
|
@ -345,10 +347,10 @@ void wspi_lld_receive(WSPIDriver *wspip, const wspi_command_t *cmdp,
|
||||||
|
|
||||||
wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) | OCTOSPI_CR_FMODE_0;
|
wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) | OCTOSPI_CR_FMODE_0;
|
||||||
wspip->ospi->DLR = n - 1;
|
wspip->ospi->DLR = n - 1;
|
||||||
wspip->ospi->IR = cmdp->cmd;
|
|
||||||
wspip->ospi->ABR = cmdp->alt;
|
|
||||||
wspip->ospi->TCR = cmdp->dummy;
|
wspip->ospi->TCR = cmdp->dummy;
|
||||||
wspip->ospi->CCR = cmdp->cfg;
|
wspip->ospi->CCR = cmdp->cfg;
|
||||||
|
wspip->ospi->ABR = cmdp->alt;
|
||||||
|
wspip->ospi->IR = cmdp->cmd;
|
||||||
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
if ((cmdp->cfg & WSPI_CFG_ADDR_MODE_MASK) != WSPI_CFG_ADDR_MODE_NONE) {
|
||||||
wspip->ospi->AR = cmdp->addr;
|
wspip->ospi->AR = cmdp->addr;
|
||||||
}
|
}
|
||||||
|
@ -380,11 +382,11 @@ void wspi_lld_map_flash(WSPIDriver *wspip,
|
||||||
wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) |
|
wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) |
|
||||||
(OCTOSPI_CR_FMODE_1 | OCTOSPI_CR_FMODE_0);
|
(OCTOSPI_CR_FMODE_1 | OCTOSPI_CR_FMODE_0);
|
||||||
wspip->ospi->DLR = 0;
|
wspip->ospi->DLR = 0;
|
||||||
wspip->ospi->IR = cmdp->cmd;
|
|
||||||
wspip->ospi->ABR = 0;
|
|
||||||
wspip->ospi->TCR = cmdp->dummy;
|
wspip->ospi->TCR = cmdp->dummy;
|
||||||
wspip->ospi->AR = 0;
|
|
||||||
wspip->ospi->CCR = cmdp->cfg;
|
wspip->ospi->CCR = cmdp->cfg;
|
||||||
|
wspip->ospi->ABR = 0;
|
||||||
|
wspip->ospi->IR = cmdp->cmd;
|
||||||
|
wspip->ospi->AR = 0;
|
||||||
|
|
||||||
/* Mapped flash absolute base address.*/
|
/* Mapped flash absolute base address.*/
|
||||||
if (addrp != NULL) {
|
if (addrp != NULL) {
|
||||||
|
|
|
@ -416,6 +416,34 @@
|
||||||
#define rccResetDMA2() rccResetAHB1(RCC_AHB1RSTR_DMA2RST)
|
#define rccResetDMA2() rccResetAHB1(RCC_AHB1RSTR_DMA2RST)
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name DMAMUX peripheral specific RCC operations
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Enables the DMAMUX peripheral clock.
|
||||||
|
*
|
||||||
|
* @param[in] lp low power enable flag
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
#define rccEnableDMAMUX(lp) rccEnableAHB1(RCC_AHB1ENR_DMAMUX1EN, lp)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables the DMAMUX peripheral clock.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
#define rccDisableDMAMUX() rccDisableAHB1(RCC_AHB1ENR_DMAMUX1EN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Resets the DMAMUX peripheral.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
#define rccResetDMAMUX() rccResetAHB1(RCC_AHB1RSTR_DMAMUX1RST)
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name PWR interface specific RCC operations
|
* @name PWR interface specific RCC operations
|
||||||
* @{
|
* @{
|
||||||
|
|
Loading…
Reference in New Issue