STM32L4xx_HAL_Driver  1.14.0
IO Manager configuration function

OSPI IO Manager configuration function. More...

Functions

HAL_StatusTypeDef HAL_OSPIM_Config (OSPI_HandleTypeDef *hospi, OSPIM_CfgTypeDef *cfg, uint32_t Timeout)
 Configure the OctoSPI IO manager. More...
 

Detailed Description

OSPI IO Manager configuration function.

 ===============================================================================
                  ##### IO Manager configuration function #####
 ===============================================================================
    [..]
    This subsection provides a set of functions allowing to :
      (+) Configure the IO manager.

Function Documentation

◆ HAL_OSPIM_Config()

HAL_StatusTypeDef HAL_OSPIM_Config ( OSPI_HandleTypeDef hospi,
OSPIM_CfgTypeDef cfg,
uint32_t  Timeout 
)

Configure the OctoSPI IO manager.

Parameters
hospi: OSPI handle
cfg: Configuration of the IO Manager for the instance
Timeout: Timeout duration
Return values
HALstatus

Definition at line 2456 of file stm32l4xx_hal_ospi.c.

2457 {
2458  HAL_StatusTypeDef status = HAL_OK;
2459  uint32_t instance;
2460  uint8_t index, ospi_enabled = 0U, other_instance;
2461  OSPIM_CfgTypeDef IOM_cfg[OSPI_NB_INSTANCE];
2462 
2463  /* Prevent unused argument(s) compilation warning */
2464  UNUSED(Timeout);
2465 
2466  /* Check the parameters of the OctoSPI IO Manager configuration structure */
2467  assert_param(IS_OSPIM_PORT(cfg->ClkPort));
2468  assert_param(IS_OSPIM_PORT(cfg->DQSPort));
2469  assert_param(IS_OSPIM_PORT(cfg->NCSPort));
2470  assert_param(IS_OSPIM_IO_PORT(cfg->IOLowPort));
2471  assert_param(IS_OSPIM_IO_PORT(cfg->IOHighPort));
2472 
2473  if (hospi->Instance == OCTOSPI1)
2474  {
2475  instance = 0U;
2476  other_instance = 1U;
2477  }
2478  else
2479  {
2480  instance = 1U;
2481  other_instance = 0U;
2482  }
2483 
2484  /**************** Get current configuration of the instances ****************/
2485  for (index = 0U; index < OSPI_NB_INSTANCE; index++)
2486  {
2487  if (OSPIM_GetConfig(index+1U, &(IOM_cfg[index])) != HAL_OK)
2488  {
2489  status = HAL_ERROR;
2490  hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM;
2491  }
2492  }
2493 
2494  if (status == HAL_OK)
2495  {
2496  /********** Disable both OctoSPI to configure OctoSPI IO Manager **********/
2497  if ((OCTOSPI1->CR & OCTOSPI_CR_EN) != 0U)
2498  {
2499  CLEAR_BIT(OCTOSPI1->CR, OCTOSPI_CR_EN);
2500  ospi_enabled |= 0x1U;
2501  }
2502  if ((OCTOSPI2->CR & OCTOSPI_CR_EN) != 0U)
2503  {
2504  CLEAR_BIT(OCTOSPI2->CR, OCTOSPI_CR_EN);
2505  ospi_enabled |= 0x2U;
2506  }
2507 
2508  /***************** Deactivation of previous configuration *****************/
2509  if (IOM_cfg[instance].ClkPort != 0U)
2510  {
2511  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].ClkPort-1U)], OCTOSPIM_PCR_CLKEN);
2512  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].DQSPort-1U)], OCTOSPIM_PCR_DQSEN);
2513  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].NCSPort-1U)], OCTOSPIM_PCR_NCSEN);
2514  CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[instance].IOLowPort-1U)& OSPI_IOM_PORT_MASK)], OCTOSPIM_PCR_IOLEN);
2515  CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[instance].IOHighPort-1U)& OSPI_IOM_PORT_MASK)], OCTOSPIM_PCR_IOHEN);
2516  }
2517 
2518  /********************* Deactivation of other instance *********************/
2519  if ((cfg->ClkPort == IOM_cfg[other_instance].ClkPort) || (cfg->DQSPort == IOM_cfg[other_instance].DQSPort) ||
2520  (cfg->NCSPort == IOM_cfg[other_instance].NCSPort) || (cfg->IOLowPort == IOM_cfg[other_instance].IOLowPort) ||
2521  (cfg->IOHighPort == IOM_cfg[other_instance].IOHighPort))
2522  {
2523  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].ClkPort-1U)], OCTOSPIM_PCR_CLKEN);
2524  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].DQSPort-1U)], OCTOSPIM_PCR_DQSEN);
2525  CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].NCSPort-1U)], OCTOSPIM_PCR_NCSEN);
2526  CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[other_instance].IOLowPort-1U)& OSPI_IOM_PORT_MASK)], OCTOSPIM_PCR_IOLEN);
2527  CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[other_instance].IOHighPort-1U)& OSPI_IOM_PORT_MASK)], OCTOSPIM_PCR_IOHEN);
2528  }
2529 
2530  /******************** Activation of new configuration *********************/
2531  MODIFY_REG(OCTOSPIM->PCR[(cfg->ClkPort-1U)], (OCTOSPIM_PCR_CLKEN | OCTOSPIM_PCR_CLKSRC), (OCTOSPIM_PCR_CLKEN | (instance << OCTOSPIM_PCR_CLKSRC_Pos)));
2532  MODIFY_REG(OCTOSPIM->PCR[(cfg->DQSPort-1U)], (OCTOSPIM_PCR_DQSEN | OCTOSPIM_PCR_DQSSRC), (OCTOSPIM_PCR_DQSEN | (instance << OCTOSPIM_PCR_DQSSRC_Pos)));
2533  MODIFY_REG(OCTOSPIM->PCR[(cfg->NCSPort-1U)], (OCTOSPIM_PCR_NCSEN | OCTOSPIM_PCR_NCSSRC), (OCTOSPIM_PCR_NCSEN | (instance << OCTOSPIM_PCR_NCSSRC_Pos)));
2534 
2535  if ((cfg->IOLowPort & OCTOSPIM_PCR_IOLEN) != 0U)
2536  {
2537  MODIFY_REG(OCTOSPIM->PCR[((cfg->IOLowPort-1U)& OSPI_IOM_PORT_MASK)], (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC),
2538  (OCTOSPIM_PCR_IOLEN | (instance << (OCTOSPIM_PCR_IOLSRC_Pos+1U))));
2539  }
2540  else
2541  {
2542  MODIFY_REG(OCTOSPIM->PCR[((cfg->IOLowPort-1U)& OSPI_IOM_PORT_MASK)], (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC),
2543  (OCTOSPIM_PCR_IOHEN | (instance << (OCTOSPIM_PCR_IOHSRC_Pos+1U))));
2544  }
2545 
2546  if ((cfg->IOHighPort & OCTOSPIM_PCR_IOLEN) != 0U)
2547  {
2548  MODIFY_REG(OCTOSPIM->PCR[((cfg->IOHighPort-1U)& OSPI_IOM_PORT_MASK)], (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC),
2549  (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC_0 | (instance << (OCTOSPIM_PCR_IOLSRC_Pos+1U))));
2550  }
2551  else
2552  {
2553  MODIFY_REG(OCTOSPIM->PCR[((cfg->IOHighPort-1U)& OSPI_IOM_PORT_MASK)], (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC),
2554  (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC_0 | (instance << (OCTOSPIM_PCR_IOHSRC_Pos+1U))));
2555  }
2556 
2557  /******* Re-enable both OctoSPI after configure OctoSPI IO Manager ********/
2558  if ((ospi_enabled & 0x1U) != 0U)
2559  {
2560  SET_BIT(OCTOSPI1->CR, OCTOSPI_CR_EN);
2561  }
2562  if ((ospi_enabled & 0x2U) != 0U)
2563  {
2564  SET_BIT(OCTOSPI2->CR, OCTOSPI_CR_EN);
2565  }
2566  }
2567 
2568  /* Return function status */
2569  return status;
2570 }
HAL OSPI IO Manager Configuration structure definition.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
return HAL_OK
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
OCTOSPI_TypeDef * Instance
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))