| /** |
| ****************************************************************************** |
| * @file stm32f7xx_hal_mdios.c |
| * @author MCD Application Team |
| * @brief MDIOS HAL module driver. |
| * This file provides firmware functions to manage the following |
| * functionalities of the MDIOS Peripheral. |
| * + Initialization and de-initialization functions |
| * + IO operation functions |
| * + Peripheral Control functions |
| * |
| @verbatim |
| =============================================================================== |
| ##### How to use this driver ##### |
| =============================================================================== |
| [..] |
| The MDIOS HAL driver can be used as follows: |
| |
| (#) Declare a MDIOS_HandleTypeDef handle structure. |
| |
| (#) Initialize the MDIOS low level resources by implementing the HAL_MDIOS_MspInit() API: |
| (##) Enable the MDIOS interface clock. |
| (##) MDIOS pins configuration: |
| (+++) Enable clocks for the MDIOS GPIOs. |
| (+++) Configure the MDIOS pins as alternate function. |
| (##) NVIC configuration if you need to use interrupt process: |
| (+++) Configure the MDIOS interrupt priority. |
| (+++) Enable the NVIC MDIOS IRQ handle. |
| |
| (#) Program the Port Address and the Preamble Check in the Init structure. |
| |
| (#) Initialize the MDIOS registers by calling the HAL_MDIOS_Init() API. |
| |
| (#) Perform direct slave read/write operations using the following APIs: |
| (##) Read the value of a DINn register: HAL_MDIOS_ReadReg() |
| (##) Write a value to a DOUTn register: HAL_MDIOS_WriteReg() |
| |
| (#) Get the Master read/write operations flags using the following APIs: |
| (##) Bit map of DOUTn registers read by Master: HAL_MDIOS_GetReadRegAddress() |
| (##) Bit map of DINn registers written by Master : HAL_MDIOS_GetWrittenRegAddress() |
| |
| (#) Clear the read/write flags using the following APIs: |
| (##) Clear read flags of a set of registers: HAL_MDIOS_ClearReadRegAddress() |
| (##) Clear write flags of a set of registers: HAL_MDIOS_ClearWriteRegAddress() |
| |
| (#) Enable interrupts on events using HAL_MDIOS_EnableEvents(), when called |
| the MDIOS will generate an interrupt in the following cases: |
| (##) a DINn register written by the Master |
| (##) a DOUTn register read by the Master |
| (##) an error occur |
| |
| -@@- A callback is executed for each genereted interrupt, so the driver provides the following |
| HAL_MDIOS_WriteCpltCallback(), HAL_MDIOS_ReadCpltCallback() and HAL_MDIOS_ErrorCallback() |
| -@@- HAL_MDIOS_IRQHandler() must be called from the MDIOS IRQ Handler, to handle the interrupt |
| and execute the previous callbacks |
| |
| (#) Reset the MDIOS peripheral and all related ressources by calling the HAL_MDIOS_DeInit() API. |
| (##) HAL_MDIOS_MspDeInit() must be implemented to reset low level ressources |
| (GPIO, Clocks, NVIC configuration ...) |
| |
| *** Callback registration *** |
| ============================================= |
| |
| The compilation define USE_HAL_MDIOS_REGISTER_CALLBACKS when set to 1 |
| allows the user to configure dynamically the driver callbacks. |
| Use Function @ref HAL_MDIOS_RegisterCallback() to register an interrupt callback. |
| |
| Function @ref HAL_MDIOS_RegisterCallback() allows to register following callbacks: |
| (+) WriteCpltCallback : Write Complete Callback. |
| (+) ReadCpltCallback : Read Complete Callback. |
| (+) ErrorCallback : Error Callback. |
| (+) WakeUpCallback : Wake UP Callback |
| (+) MspInitCallback : MspInit Callback. |
| (+) MspDeInitCallback : MspDeInit Callback. |
| |
| This function takes as parameters the HAL peripheral handle, the Callback ID |
| and a pointer to the user callback function. |
| |
| Use function @ref HAL_MDIOS_UnRegisterCallback() to reset a callback to the default |
| weak function. |
| @ref HAL_MDIOS_UnRegisterCallback takes as parameters the HAL peripheral handle, |
| and the Callback ID. |
| This function allows to reset following callbacks: |
| (+) WriteCpltCallback : Write Complete Callback. |
| (+) ReadCpltCallback : Read Complete Callback. |
| (+) ErrorCallback : Error Callback. |
| (+) WakeUpCallback : Wake UP Callback |
| (+) MspInitCallback : MspInit Callback. |
| (+) MspDeInitCallback : MspDeInit Callback. |
| |
| By default, after the HAL_MDIOS_Init and when the state is HAL_MDIOS_STATE_RESET |
| all callbacks are set to the corresponding weak functions: |
| examples @ref HAL_MDIOS_WriteCpltCallback(), @ref HAL_MDIOS_ReadCpltCallback(). |
| Exception done for MspInit and MspDeInit functions that are |
| reset to the legacy weak function in the HAL_MDIOS_Init/ @ref HAL_MDIOS_DeInit only when |
| these callbacks are null (not registered beforehand). |
| if not, MspInit or MspDeInit are not null, the HAL_MDIOS_Init/ @ref HAL_MDIOS_DeInit |
| keep and use the user MspInit/MspDeInit callbacks (registered beforehand) |
| |
| Callbacks can be registered/unregistered in HAL_MDIOS_STATE_READY state only. |
| Exception done MspInit/MspDeInit that can be registered/unregistered |
| in HAL_MDIOS_STATE_READY or HAL_MDIOS_STATE_RESET state, |
| thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. |
| In that case first register the MspInit/MspDeInit user callbacks |
| using @ref HAL_MDIOS_RegisterCallback() before calling @ref HAL_MDIOS_DeInit |
| or HAL_MDIOS_Init function. |
| |
| When The compilation define USE_HAL_MDIOS_REGISTER_CALLBACKS is set to 0 or |
| not defined, the callback registration feature is not available and all callbacks |
| are set to the corresponding weak functions. |
| |
| |
| @endverbatim |
| ****************************************************************************** |
| * @attention |
| * |
| * <h2><center>© Copyright (c) 2017 STMicroelectronics. |
| * All rights reserved.</center></h2> |
| * |
| * This software component is licensed by ST under BSD 3-Clause license, |
| * the "License"; You may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at: |
| * opensource.org/licenses/BSD-3-Clause |
| * |
| ****************************************************************************** |
| */ |
| |
| /* Includes ------------------------------------------------------------------*/ |
| #include "stm32f7xx_hal.h" |
| |
| /** @addtogroup STM32F7xx_HAL_Driver |
| * @{ |
| */ |
| |
| /** @defgroup MDIOS MDIOS |
| * @brief HAL MDIOS module driver |
| * @{ |
| */ |
| #ifdef HAL_MDIOS_MODULE_ENABLED |
| |
| #if defined (MDIOS) |
| |
| /* Private typedef -----------------------------------------------------------*/ |
| /* Private define ------------------------------------------------------------*/ |
| #define MDIOS_PORT_ADDRESS_SHIFT ((uint32_t)8) |
| #define MDIOS_ALL_REG_FLAG ((uint32_t)0xFFFFFFFFU) |
| #define MDIOS_ALL_ERRORS_FLAG ((uint32_t)(MDIOS_SR_PERF | MDIOS_SR_SERF | MDIOS_SR_TERF)) |
| |
| #define MDIOS_DIN_BASE_ADDR (MDIOS_BASE + 0x100) |
| #define MDIOS_DOUT_BASE_ADDR (MDIOS_BASE + 0x180) |
| |
| /* Private macro -------------------------------------------------------------*/ |
| /* Private variables ---------------------------------------------------------*/ |
| /* Private function prototypes -----------------------------------------------*/ |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| static void MDIOS_InitCallbacksToDefault(MDIOS_HandleTypeDef *hmdios); |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| /* Private functions ---------------------------------------------------------*/ |
| /* Exported functions --------------------------------------------------------*/ |
| /** @defgroup MDIOS_Exported_Functions MDIOS Exported Functions |
| * @{ |
| */ |
| |
| /** @defgroup MDIOS_Exported_Functions_Group1 Initialization/de-initialization functions |
| * @brief Initialization and Configuration functions |
| * |
| @verbatim |
| =============================================================================== |
| ##### Initialization and Configuration functions ##### |
| =============================================================================== |
| [..] |
| This subsection provides a set of functions allowing to initialize the MDIOS |
| (+) The following parameters can be configured: |
| (++) Port Address |
| (++) Preamble Check |
| |
| @endverbatim |
| * @{ |
| */ |
| |
| /** |
| * @brief Initializes the MDIOS according to the specified parameters in |
| * the MDIOS_InitTypeDef and creates the associated handle . |
| * @param hmdios pointer to a MDIOS_HandleTypeDef structure that contains |
| * the configuration information for MDIOS module |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_Init(MDIOS_HandleTypeDef *hmdios) |
| { |
| uint32_t tmpcr = 0; |
| |
| /* Check the MDIOS handle allocation */ |
| if(hmdios == NULL) |
| { |
| return HAL_ERROR; |
| } |
| |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance)); |
| assert_param(IS_MDIOS_PORTADDRESS(hmdios->Init.PortAddress)); |
| assert_param(IS_MDIOS_PREAMBLECHECK(hmdios->Init.PreambleCheck)); |
| |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| if(hmdios->State == HAL_MDIOS_STATE_RESET) |
| { |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| |
| MDIOS_InitCallbacksToDefault(hmdios); |
| |
| if(hmdios->MspInitCallback == NULL) |
| { |
| hmdios->MspInitCallback = HAL_MDIOS_MspInit; |
| } |
| |
| /* Init the low level hardware */ |
| hmdios->MspInitCallback(hmdios); |
| |
| #else |
| /* Init the low level hardware */ |
| HAL_MDIOS_MspInit(hmdios); |
| |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| } |
| |
| /* Change the MDIOS state */ |
| hmdios->State = HAL_MDIOS_STATE_BUSY; |
| |
| /* Get the MDIOS CR value */ |
| tmpcr = hmdios->Instance->CR; |
| |
| /* Clear PORT_ADDRESS, DPC and EN bits */ |
| tmpcr &= ((uint32_t)~(MDIOS_CR_EN | MDIOS_CR_DPC | MDIOS_CR_PORT_ADDRESS)); |
| |
| /* Set MDIOS control parametrs and enable the peripheral */ |
| tmpcr |= (uint32_t)(((hmdios->Init.PortAddress) << MDIOS_PORT_ADDRESS_SHIFT) |\ |
| (hmdios->Init.PreambleCheck) | \ |
| (MDIOS_CR_EN)); |
| |
| /* Write the MDIOS CR */ |
| hmdios->Instance->CR = tmpcr; |
| |
| /* Change the MDIOS state */ |
| hmdios->State = HAL_MDIOS_STATE_READY; |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| /* Return function status */ |
| return HAL_OK; |
| |
| } |
| |
| /** |
| * @brief DeInitializes the MDIOS peripheral. |
| * @param hmdios MDIOS handle |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_DeInit(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Check the MDIOS handle allocation */ |
| if(hmdios == NULL) |
| { |
| return HAL_ERROR; |
| } |
| |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance)); |
| |
| /* Change the MDIOS state */ |
| hmdios->State = HAL_MDIOS_STATE_BUSY; |
| |
| /* Disable the Peripheral */ |
| __HAL_MDIOS_DISABLE(hmdios); |
| |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| |
| if(hmdios->MspDeInitCallback == NULL) |
| { |
| hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; |
| } |
| /* DeInit the low level hardware */ |
| hmdios->MspDeInitCallback(hmdios); |
| |
| #else |
| |
| /* DeInit the low level hardware */ |
| HAL_MDIOS_MspDeInit(hmdios); |
| |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /* Change the MDIOS state */ |
| hmdios->State = HAL_MDIOS_STATE_RESET; |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| /* Return function status */ |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief MDIOS MSP Init |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_MspInit(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function should not be modified, when the callback is needed, |
| the HAL_MDIOS_MspInit can be implemented in the user file |
| */ |
| } |
| |
| /** |
| * @brief MDIOS MSP DeInit |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_MspDeInit(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function should not be modified, when the callback is needed, |
| the HAL_MDIOS_MspDeInit can be implemented in the user file |
| */ |
| } |
| |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| /** |
| * @brief Register a User MDIOS Callback |
| * To be used instead of the weak predefined callback |
| * @param hmdios mdios handle |
| * @param CallbackID ID of the callback to be registered |
| * This parameter can be one of the following values: |
| * @arg @ref HAL_MDIOS_WRITE_COMPLETE_CB_ID Write Complete Callback ID |
| * @arg @ref HAL_MDIOS_READ_COMPLETE_CB_ID Read Complete Callback ID |
| * @arg @ref HAL_MDIOS_ERROR_CB_ID Error Callback ID |
| * @arg @ref HAL_MDIOS_WAKEUP_CB_ID Wake Up Callback ID |
| * @arg @ref HAL_MDIOS_MSPINIT_CB_ID MspInit callback ID |
| * @arg @ref HAL_MDIOS_MSPDEINIT_CB_ID MspDeInit callback ID |
| * @param pCallback pointer to the Callback function |
| * @retval status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_RegisterCallback(MDIOS_HandleTypeDef *hmdios, HAL_MDIOS_CallbackIDTypeDef CallbackID, pMDIOS_CallbackTypeDef pCallback) |
| { |
| HAL_StatusTypeDef status = HAL_OK; |
| |
| if(pCallback == NULL) |
| { |
| /* Return error status */ |
| return HAL_ERROR; |
| } |
| /* Process locked */ |
| __HAL_LOCK(hmdios); |
| |
| if(hmdios->State == HAL_MDIOS_STATE_READY) |
| { |
| switch (CallbackID) |
| { |
| case HAL_MDIOS_WRITE_COMPLETE_CB_ID : |
| hmdios->WriteCpltCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_READ_COMPLETE_CB_ID : |
| hmdios->ReadCpltCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_ERROR_CB_ID : |
| hmdios->ErrorCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_WAKEUP_CB_ID : |
| hmdios->WakeUpCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_MSPINIT_CB_ID : |
| hmdios->MspInitCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_MSPDEINIT_CB_ID : |
| hmdios->MspDeInitCallback = pCallback; |
| break; |
| |
| default : |
| /* Return error status */ |
| status = HAL_ERROR; |
| break; |
| } |
| } |
| else if(hmdios->State == HAL_MDIOS_STATE_RESET) |
| { |
| switch (CallbackID) |
| { |
| case HAL_MDIOS_MSPINIT_CB_ID : |
| hmdios->MspInitCallback = pCallback; |
| break; |
| |
| case HAL_MDIOS_MSPDEINIT_CB_ID : |
| hmdios->MspDeInitCallback = pCallback; |
| break; |
| |
| default : |
| /* Return error status */ |
| status = HAL_ERROR; |
| break; |
| } |
| } |
| else |
| { |
| /* Return error status */ |
| status = HAL_ERROR; |
| } |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| return status; |
| } |
| |
| /** |
| * @brief Unregister an MDIOS Callback |
| * MDIOS callabck is redirected to the weak predefined callback |
| * @param hmdios mdios handle |
| * @param CallbackID ID of the callback to be unregistered |
| * This parameter can be one of the following values: |
| * @arg @ref HAL_MDIOS_WRITE_COMPLETE_CB_ID Write Complete Callback ID |
| * @arg @ref HAL_MDIOS_READ_COMPLETE_CB_ID Read Complete Callback ID |
| * @arg @ref HAL_MDIOS_ERROR_CB_ID Error Callback ID |
| * @arg @ref HAL_MDIOS_WAKEUP_CB_ID Wake Up Callback ID |
| * @arg @ref HAL_MDIOS_MSPINIT_CB_ID MspInit callback ID |
| * @arg @ref HAL_MDIOS_MSPDEINIT_CB_ID MspDeInit callback ID |
| * @retval status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_UnRegisterCallback(MDIOS_HandleTypeDef *hmdios, HAL_MDIOS_CallbackIDTypeDef CallbackID) |
| { |
| HAL_StatusTypeDef status = HAL_OK; |
| |
| /* Process locked */ |
| __HAL_LOCK(hmdios); |
| |
| if(hmdios->State == HAL_MDIOS_STATE_READY) |
| { |
| switch (CallbackID) |
| { |
| case HAL_MDIOS_WRITE_COMPLETE_CB_ID : |
| hmdios->WriteCpltCallback = HAL_MDIOS_WriteCpltCallback; |
| break; |
| |
| case HAL_MDIOS_READ_COMPLETE_CB_ID : |
| hmdios->ReadCpltCallback = HAL_MDIOS_ReadCpltCallback; |
| break; |
| |
| case HAL_MDIOS_ERROR_CB_ID : |
| hmdios->ErrorCallback = HAL_MDIOS_ErrorCallback; |
| break; |
| |
| case HAL_MDIOS_WAKEUP_CB_ID : |
| hmdios->WakeUpCallback = HAL_MDIOS_WakeUpCallback; |
| break; |
| |
| case HAL_MDIOS_MSPINIT_CB_ID : |
| hmdios->MspInitCallback = HAL_MDIOS_MspInit; |
| break; |
| |
| case HAL_MDIOS_MSPDEINIT_CB_ID : |
| hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; |
| break; |
| |
| default : |
| /* Return error status */ |
| status = HAL_ERROR; |
| break; |
| } |
| } |
| else if(hmdios->State == HAL_MDIOS_STATE_RESET) |
| { |
| switch (CallbackID) |
| { |
| case HAL_MDIOS_MSPINIT_CB_ID : |
| hmdios->MspInitCallback = HAL_MDIOS_MspInit; |
| break; |
| |
| case HAL_MDIOS_MSPDEINIT_CB_ID : |
| hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; |
| break; |
| |
| default : |
| /* Return error status */ |
| status = HAL_ERROR; |
| break; |
| } |
| } |
| else |
| { |
| /* Return error status */ |
| status = HAL_ERROR; |
| } |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| return status; |
| } |
| |
| static void MDIOS_InitCallbacksToDefault(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Init the MDIOS Callback settings */ |
| hmdios->WriteCpltCallback = HAL_MDIOS_WriteCpltCallback; /* Legacy weak WriteCpltCallback */ |
| hmdios->ReadCpltCallback = HAL_MDIOS_ReadCpltCallback; /* Legacy weak ReadCpltCallback */ |
| hmdios->ErrorCallback = HAL_MDIOS_ErrorCallback; /* Legacy weak ErrorCallback */ |
| hmdios->WakeUpCallback = HAL_MDIOS_WakeUpCallback; /* Legacy weak WakeUpCallback */ |
| } |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /** |
| * @} |
| */ |
| |
| /** @defgroup MDIOS_Exported_Functions_Group2 IO operation functions |
| * @brief MDIOS Read/Write functions |
| * |
| @verbatim |
| =============================================================================== |
| ##### IO operation functions ##### |
| =============================================================================== |
| This subsection provides a set of functions allowing to manage the MDIOS |
| read and write operations. |
| |
| (#) APIs that allow to the MDIOS to read/write from/to the |
| values of one of the DINn/DOUTn registers: |
| (+) Read the value of a DINn register: HAL_MDIOS_ReadReg() |
| (+) Write a value to a DOUTn register: HAL_MDIOS_WriteReg() |
| |
| (#) APIs that provide if there are some Slave registres have been |
| read or written by the Master: |
| (+) DOUTn registers read by Master: HAL_MDIOS_GetReadRegAddress() |
| (+) DINn registers written by Master : HAL_MDIOS_GetWrittenRegAddress() |
| |
| (#) APIs that Clear the read/write flags: |
| (+) Clear read registers flags: HAL_MDIOS_ClearReadRegAddress() |
| (+) Clear write registers flags: HAL_MDIOS_ClearWriteRegAddress() |
| |
| (#) A set of Callbacks are provided: |
| (+) HAL_MDIOS_WriteCpltCallback() |
| (+) HAL_MDIOS_ReadCpltCallback() |
| (+) HAL_MDIOS_ErrorCallback() |
| |
| @endverbatim |
| * @{ |
| */ |
| |
| /** |
| * @brief Writes to an MDIOS output register |
| * @param hmdios mdios handle |
| * @param RegNum MDIOS input register number |
| * @param Data Data to write |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_WriteReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t Data) |
| { |
| uint32_t tmpreg; |
| |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_REGISTER(RegNum)); |
| |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| /* Get the addr of output register to be written by the MDIOS */ |
| tmpreg = MDIOS_DOUT_BASE_ADDR + (4 * RegNum); |
| |
| /* Write to DOUTn register */ |
| *((uint32_t *)tmpreg) = Data; |
| |
| /* Process Unlocked */ |
| __HAL_UNLOCK(hmdios); |
| |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief Reads an MDIOS input register |
| * @param hmdios mdios handle |
| * @param RegNum MDIOS input register number |
| * @param pData pointer to Data |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_ReadReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t *pData) |
| { |
| uint32_t tmpreg; |
| |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_REGISTER(RegNum)); |
| |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| /* Get the addr of input register to be read by the MDIOS */ |
| tmpreg = MDIOS_DIN_BASE_ADDR + (4 * RegNum); |
| |
| /* Read DINn register */ |
| *pData = (uint16_t)(*((uint32_t *)tmpreg)); |
| |
| /* Process Unlocked */ |
| __HAL_UNLOCK(hmdios); |
| |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief Gets Written registers by MDIO master |
| * @param hmdios mdios handle |
| * @retval bit map of written registers addresses |
| */ |
| uint32_t HAL_MDIOS_GetWrittenRegAddress(MDIOS_HandleTypeDef *hmdios) |
| { |
| return hmdios->Instance->WRFR; |
| } |
| |
| /** |
| * @brief Gets Read registers by MDIO master |
| * @param hmdios mdios handle |
| * @retval bit map of read registers addresses |
| */ |
| uint32_t HAL_MDIOS_GetReadRegAddress(MDIOS_HandleTypeDef *hmdios) |
| { |
| return hmdios->Instance->RDFR; |
| } |
| |
| /** |
| * @brief Clears Write registers flag |
| * @param hmdios mdios handle |
| * @param RegNum registers addresses to be cleared |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_ClearWriteRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum) |
| { |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_REGISTER(RegNum)); |
| |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| /* Clear write registers flags */ |
| hmdios->Instance->CWRFR |= (RegNum); |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief Clears Read register flag |
| * @param hmdios mdios handle |
| * @param RegNum registers addresses to be cleared |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_ClearReadRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum) |
| { |
| /* Check the parameters */ |
| assert_param(IS_MDIOS_REGISTER(RegNum)); |
| |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| /* Clear read registers flags */ |
| hmdios->Instance->CRDFR |= (RegNum); |
| |
| /* Release Lock */ |
| __HAL_UNLOCK(hmdios); |
| |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief Enables Events for MDIOS peripheral |
| * @param hmdios mdios handle |
| * @retval HAL status |
| */ |
| HAL_StatusTypeDef HAL_MDIOS_EnableEvents(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Process Locked */ |
| __HAL_LOCK(hmdios); |
| |
| /* Enable MDIOS interrupts: Register Write, Register Read and Error ITs */ |
| __HAL_MDIOS_ENABLE_IT(hmdios, (MDIOS_IT_WRITE | MDIOS_IT_READ | MDIOS_IT_ERROR)); |
| |
| /* Process Unlocked */ |
| __HAL_UNLOCK(hmdios); |
| |
| return HAL_OK; |
| } |
| |
| /** |
| * @brief This function handles MDIOS interrupt request. |
| * @param hmdios MDIOS handle |
| * @retval None |
| */ |
| void HAL_MDIOS_IRQHandler(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Write Register Interrupt enabled ? */ |
| if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_WRITE) != RESET) |
| { |
| /* Write register flag */ |
| if(HAL_MDIOS_GetWrittenRegAddress(hmdios) != RESET) |
| { |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| /* Call registered Write complete callback */ |
| hmdios->WriteCpltCallback(hmdios); |
| #else |
| /* Write callback function */ |
| HAL_MDIOS_WriteCpltCallback(hmdios); |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /* Clear write register flag */ |
| HAL_MDIOS_ClearWriteRegAddress(hmdios, MDIOS_ALL_REG_FLAG); |
| } |
| } |
| |
| /* Read Register Interrupt enabled ? */ |
| if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_READ) != RESET) |
| { |
| /* Read register flag */ |
| if(HAL_MDIOS_GetReadRegAddress(hmdios) != RESET) |
| { |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| /* Call registered Read complete callback */ |
| hmdios->ReadCpltCallback(hmdios); |
| #else |
| /* Read callback function */ |
| HAL_MDIOS_ReadCpltCallback(hmdios); |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /* Clear read register flag */ |
| HAL_MDIOS_ClearReadRegAddress(hmdios, MDIOS_ALL_REG_FLAG); |
| } |
| } |
| |
| /* Error Interrupt enabled ? */ |
| if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_ERROR) != RESET) |
| { |
| /* All Errors Flag */ |
| if(__HAL_MDIOS_GET_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG) !=RESET) |
| { |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| /* Call registered Error callback */ |
| hmdios->ErrorCallback(hmdios); |
| #else |
| /* Error Callback */ |
| HAL_MDIOS_ErrorCallback(hmdios); |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /* Clear errors flag */ |
| __HAL_MDIOS_CLEAR_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG); |
| } |
| } |
| |
| /* check MDIOS WAKEUP exti flag */ |
| if(__HAL_MDIOS_WAKEUP_EXTI_GET_FLAG() != RESET) |
| { |
| #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) |
| /* Call registered WakeUp callback */ |
| hmdios->WakeUpCallback(hmdios); |
| #else |
| /* MDIOS WAKEUP interrupt user callback */ |
| HAL_MDIOS_WakeUpCallback(hmdios); |
| #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ |
| |
| /* Clear MDIOS WAKEUP Exti pending bit */ |
| __HAL_MDIOS_WAKEUP_EXTI_CLEAR_FLAG(); |
| } |
| } |
| |
| /** |
| * @brief Write Complete Callback |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_WriteCpltCallback(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function should not be modified, when the callback is needed, |
| the HAL_MDIOS_WriteCpltCallback can be implemented in the user file |
| */ |
| } |
| |
| /** |
| * @brief Read Complete Callback |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_ReadCpltCallback(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function should not be modified, when the callback is needed, |
| the HAL_MDIOS_ReadCpltCallback can be implemented in the user file |
| */ |
| } |
| |
| /** |
| * @brief Error Callback |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_ErrorCallback(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function should not be modified, when the callback is needed, |
| the HAL_MDIOS_ErrorCallback can be implemented in the user file |
| */ |
| } |
| |
| /** |
| * @brief MDIOS WAKEUP interrupt callback |
| * @param hmdios mdios handle |
| * @retval None |
| */ |
| __weak void HAL_MDIOS_WakeUpCallback(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Prevent unused argument(s) compilation warning */ |
| UNUSED(hmdios); |
| |
| /* NOTE : This function Should not be modified, when the callback is needed, |
| the HAL_MDIOS_WakeUpCallback could be implemented in the user file |
| */ |
| } |
| |
| /** |
| * @} |
| */ |
| |
| /** @defgroup MDIOS_Exported_Functions_Group3 Peripheral Control functions |
| * @brief MDIOS control functions |
| * |
| @verbatim |
| =============================================================================== |
| ##### Peripheral Control functions ##### |
| =============================================================================== |
| [..] |
| This subsection provides a set of functions allowing to control the MDIOS. |
| (+) HAL_MDIOS_GetState() API, helpful to check in run-time the state. |
| (+) HAL_MDIOS_GetError() API, returns the errors occurred during data transfer. |
| |
| @endverbatim |
| * @{ |
| */ |
| |
| /** |
| * @brief Gets MDIOS error flags |
| * @param hmdios mdios handle |
| * @retval bit map of occurred errors |
| */ |
| uint32_t HAL_MDIOS_GetError(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* return errors flags on status register */ |
| return hmdios->Instance->SR; |
| } |
| |
| /** |
| * @brief Return the MDIOS HAL state |
| * @param hmdios mdios handle |
| * @retval MDIOS state |
| */ |
| HAL_MDIOS_StateTypeDef HAL_MDIOS_GetState(MDIOS_HandleTypeDef *hmdios) |
| { |
| /* Return MDIOS state */ |
| return hmdios->State; |
| } |
| |
| /** |
| * @} |
| */ |
| |
| /** |
| * @} |
| */ |
| #endif /* MDIOS */ |
| #endif /* HAL_MDIOS_MODULE_ENABLED */ |
| /** |
| * @} |
| */ |
| |
| /** |
| * @} |
| */ |
| |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |