![]() |
|
|||
File indexing completed on 2025-05-11 08:23:08
0001 /** 0002 ****************************************************************************** 0003 * @file stm32h7xx_hal_mdios.c 0004 * @author MCD Application Team 0005 * @brief MDIOS HAL module driver. 0006 * This file provides firmware functions to manage the following 0007 * functionalities of the MDIOS Peripheral. 0008 * + Initialization and de-initialization functions 0009 * + IO operation functions 0010 * + Peripheral Control functions 0011 * 0012 * 0013 ****************************************************************************** 0014 * @attention 0015 * 0016 * Copyright (c) 2017 STMicroelectronics. 0017 * All rights reserved. 0018 * 0019 * This software is licensed under terms that can be found in the LICENSE file 0020 * in the root directory of this software component. 0021 * If no LICENSE file comes with this software, it is provided AS-IS. 0022 * 0023 ****************************************************************************** 0024 @verbatim 0025 =============================================================================== 0026 ##### How to use this driver ##### 0027 =============================================================================== 0028 [..] 0029 The MDIOS HAL driver can be used as follow: 0030 0031 (#) Declare a MDIOS_HandleTypeDef handle structure. 0032 0033 (#) Initialize the MDIOS low level resources by implementing the HAL_MDIOS_MspInit() API: 0034 (##) Enable the MDIOS interface clock. 0035 (##) MDIOS pins configuration: 0036 (+++) Enable clocks for the MDIOS GPIOs. 0037 (+++) Configure the MDIOS pins as alternate function. 0038 (##) NVIC configuration if you need to use interrupt process: 0039 (+++) Configure the MDIOS interrupt priority. 0040 (+++) Enable the NVIC MDIOS IRQ handle. 0041 0042 (#) Program the Port Address and the Preamble Check in the Init structure. 0043 0044 (#) Initialize the MDIOS registers by calling the HAL_MDIOS_Init() API. 0045 0046 (#) Perform direct slave read/write operations using the following APIs: 0047 (##) Read the value of a DINn register: HAL_MDIOS_ReadReg() 0048 (##) Write a value to a DOUTn register: HAL_MDIOS_WriteReg() 0049 0050 (#) Get the Master read/write operations flags using the following APIs: 0051 (##) Bit map of DOUTn registers read by Master: HAL_MDIOS_GetReadRegAddress() 0052 (##) Bit map of DINn registers written by Master : HAL_MDIOS_GetWrittenRegAddress() 0053 0054 (#) Clear the read/write flags using the following APIs: 0055 (##) Clear read flags of a set of registers: HAL_MDIOS_ClearReadRegAddress() 0056 (##) Clear write flags of a set of registers: HAL_MDIOS_ClearWriteRegAddress() 0057 0058 (#) Enable interrupts on events using HAL_MDIOS_EnableEvents(), when called 0059 the MDIOS will generate an interrupt in the following cases: 0060 (##) a DINn register written by the Master 0061 (##) a DOUTn register read by the Master 0062 (##) an error occur 0063 0064 (@) A callback is executed for each genereted interrupt, so the driver provide the following 0065 HAL_MDIOS_WriteCpltCallback(), HAL_MDIOS_ReadCpltCallback() and HAL_MDIOS_ErrorCallback() 0066 (@) HAL_MDIOS_IRQHandler() must be called from the MDIOS IRQ Handler, to handle the interrupt 0067 and execute the previous callbacks 0068 0069 (#) Reset the MDIOS peripheral and all related resources by calling the HAL_MDIOS_DeInit() API. 0070 (##) HAL_MDIOS_MspDeInit() must be implemented to reset low level resources 0071 (GPIO, Clocks, NVIC configuration ...) 0072 0073 *** Callback registration *** 0074 ============================================= 0075 0076 The compilation define USE_HAL_MDIOS_REGISTER_CALLBACKS when set to 1 0077 allows the user to configure dynamically the driver callbacks. 0078 Use Function @ref HAL_MDIOS_RegisterCallback() to register an interrupt callback. 0079 0080 Function @ref HAL_MDIOS_RegisterCallback() allows to register following callbacks: 0081 (+) WriteCpltCallback : Write Complete Callback. 0082 (+) ReadCpltCallback : Read Complete Callback. 0083 (+) ErrorCallback : Error Callback. 0084 (+) WakeUpCallback : Wake UP Callback 0085 (+) MspInitCallback : MspInit Callback. 0086 (+) MspDeInitCallback : MspDeInit Callback. 0087 0088 This function takes as parameters the HAL peripheral handle, the Callback ID 0089 and a pointer to the user callback function. 0090 0091 Use function @ref HAL_MDIOS_UnRegisterCallback() to reset a callback to the default 0092 weak function. 0093 @ref HAL_MDIOS_UnRegisterCallback takes as parameters the HAL peripheral handle, 0094 and the Callback ID. 0095 This function allows to reset following callbacks: 0096 (+) WriteCpltCallback : Write Complete Callback. 0097 (+) ReadCpltCallback : Read Complete Callback. 0098 (+) ErrorCallback : Error Callback. 0099 (+) WakeUpCallback : Wake UP Callback 0100 (+) MspInitCallback : MspInit Callback. 0101 (+) MspDeInitCallback : MspDeInit Callback. 0102 0103 By default, after the HAL_MDIOS_Init and when the state is HAL_MDIOS_STATE_RESET 0104 all callbacks are set to the corresponding weak functions: 0105 examples @ref HAL_MDIOS_WriteCpltCallback(), @ref HAL_MDIOS_ReadCpltCallback(). 0106 Exception done for MspInit and MspDeInit functions that are 0107 reset to the legacy weak function in the HAL_MDIOS_Init/ @ref HAL_MDIOS_DeInit only when 0108 these callbacks are null (not registered beforehand). 0109 if not, MspInit or MspDeInit are not null, the HAL_MDIOS_Init/ @ref HAL_MDIOS_DeInit 0110 keep and use the user MspInit/MspDeInit callbacks (registered beforehand) 0111 0112 Callbacks can be registered/unregistered in HAL_MDIOS_STATE_READY state only. 0113 Exception done MspInit/MspDeInit that can be registered/unregistered 0114 in HAL_MDIOS_STATE_READY or HAL_MDIOS_STATE_RESET state, 0115 thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. 0116 In that case first register the MspInit/MspDeInit user callbacks 0117 using @ref HAL_MDIOS_RegisterCallback() before calling @ref HAL_MDIOS_DeInit 0118 or HAL_MDIOS_Init function. 0119 0120 When The compilation define USE_HAL_MDIOS_REGISTER_CALLBACKS is set to 0 or 0121 not defined, the callback registration feature is not available and all callbacks 0122 are set to the corresponding weak functions. 0123 0124 0125 @endverbatim 0126 */ 0127 0128 /* Includes ------------------------------------------------------------------*/ 0129 #include "stm32h7xx_hal.h" 0130 0131 /** @addtogroup STM32H7xx_HAL_Driver 0132 * @{ 0133 */ 0134 #if defined (MDIOS) 0135 /** @defgroup MDIOS MDIOS 0136 * @ingroup RTEMSBSPsARMSTM32H7 0137 * @brief HAL MDIOS module driver 0138 * @{ 0139 */ 0140 #ifdef HAL_MDIOS_MODULE_ENABLED 0141 0142 0143 0144 /* Private typedef -----------------------------------------------------------*/ 0145 /* Private define ------------------------------------------------------------*/ 0146 /** @defgroup MDIOS_Private_Define MDIOS Private Define 0147 * @ingroup RTEMSBSPsARMSTM32H7 0148 * @{ 0149 */ 0150 #define MDIOS_PORT_ADDRESS_SHIFT ((uint32_t)8) 0151 #define MDIOS_ALL_REG_FLAG ((uint32_t)0xFFFFFFFFU) 0152 #define MDIOS_ALL_ERRORS_FLAG ((uint32_t)(MDIOS_SR_PERF | MDIOS_SR_SERF | MDIOS_SR_TERF)) 0153 0154 #define MDIOS_DIN_BASE_ADDR (MDIOS_BASE + 0x100U) 0155 #define MDIOS_DOUT_BASE_ADDR (MDIOS_BASE + 0x180U) 0156 /** 0157 * @} 0158 */ 0159 /* Private macro -------------------------------------------------------------*/ 0160 /* Private variables ---------------------------------------------------------*/ 0161 /* Private function prototypes -----------------------------------------------*/ 0162 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0163 /** @defgroup MDIOS_Private_Functions MDIOS Private Functions 0164 * @ingroup RTEMSBSPsARMSTM32H7 0165 * @{ 0166 */ 0167 static void MDIOS_InitCallbacksToDefault(MDIOS_HandleTypeDef *hmdios); 0168 /** 0169 * @} 0170 */ 0171 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0172 /* Private functions ---------------------------------------------------------*/ 0173 /* Exported functions --------------------------------------------------------*/ 0174 /** @defgroup MDIOS_Exported_Functions MDIOS Exported Functions 0175 * @ingroup RTEMSBSPsARMSTM32H7 0176 * @{ 0177 */ 0178 0179 /** @defgroup MDIOS_Exported_Functions_Group1 Initialization/de-initialization functions 0180 * @ingroup RTEMSBSPsARMSTM32H7 0181 * @brief Initialization and Configuration functions 0182 * 0183 @verbatim 0184 =============================================================================== 0185 ##### Initialization and Configuration functions ##### 0186 =============================================================================== 0187 [..] 0188 This subsection provides a set of functions allowing to initialize the MDIOS 0189 (+) The following parameters can be configured: 0190 (++) Port Address 0191 (++) Preamble Check 0192 0193 @endverbatim 0194 * @{ 0195 */ 0196 0197 /** 0198 * @brief Initializes the MDIOS according to the specified parameters in 0199 * the MDIOS_InitTypeDef and creates the associated handle . 0200 * @param hmdios: pointer to a MDIOS_HandleTypeDef structure that contains 0201 * the configuration information for MDIOS module 0202 * @retval HAL status 0203 */ 0204 HAL_StatusTypeDef HAL_MDIOS_Init(MDIOS_HandleTypeDef *hmdios) 0205 { 0206 uint32_t tmpcr; 0207 0208 /* Check the MDIOS handle allocation */ 0209 if(hmdios == NULL) 0210 { 0211 return HAL_ERROR; 0212 } 0213 0214 /* Check the parameters */ 0215 assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance)); 0216 assert_param(IS_MDIOS_PORTADDRESS(hmdios->Init.PortAddress)); 0217 assert_param(IS_MDIOS_PREAMBLECHECK(hmdios->Init.PreambleCheck)); 0218 0219 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0220 0221 if(hmdios->State == HAL_MDIOS_STATE_RESET) 0222 { 0223 MDIOS_InitCallbacksToDefault(hmdios); 0224 0225 if(hmdios->MspInitCallback == NULL) 0226 { 0227 hmdios->MspInitCallback = HAL_MDIOS_MspInit; 0228 } 0229 0230 /* Init the low level hardware */ 0231 hmdios->MspInitCallback(hmdios); 0232 } 0233 0234 #else 0235 0236 if(hmdios->State == HAL_MDIOS_STATE_RESET) 0237 { 0238 /* Init the low level hardware */ 0239 HAL_MDIOS_MspInit(hmdios); 0240 } 0241 0242 #endif /* (USE_HAL_MDIOS_REGISTER_CALLBACKS) */ 0243 0244 /* Change the MDIOS state */ 0245 hmdios->State = HAL_MDIOS_STATE_BUSY; 0246 0247 /* Get the MDIOS CR value */ 0248 tmpcr = hmdios->Instance->CR; 0249 0250 /* Clear PORT_ADDRESS, DPC and EN bits */ 0251 tmpcr &= ((uint32_t)~(MDIOS_CR_EN | MDIOS_CR_DPC | MDIOS_CR_PORT_ADDRESS)); 0252 0253 /* Set MDIOS control parametrs and enable the peripheral */ 0254 tmpcr |= (uint32_t)(((hmdios->Init.PortAddress) << MDIOS_PORT_ADDRESS_SHIFT) |\ 0255 (hmdios->Init.PreambleCheck) | \ 0256 (MDIOS_CR_EN)); 0257 0258 /* Write the MDIOS CR */ 0259 hmdios->Instance->CR = tmpcr; 0260 0261 hmdios->ErrorCode = HAL_MDIOS_ERROR_NONE; 0262 0263 /* Change the MDIOS state */ 0264 hmdios->State = HAL_MDIOS_STATE_READY; 0265 0266 /* Release Lock */ 0267 __HAL_UNLOCK(hmdios); 0268 0269 /* Return function status */ 0270 return HAL_OK; 0271 0272 } 0273 0274 /** 0275 * @brief DeInitializes the MDIOS peripheral. 0276 * @param hmdios: MDIOS handle 0277 * @retval HAL status 0278 */ 0279 HAL_StatusTypeDef HAL_MDIOS_DeInit(MDIOS_HandleTypeDef *hmdios) 0280 { 0281 /* Check the MDIOS handle allocation */ 0282 if(hmdios == NULL) 0283 { 0284 return HAL_ERROR; 0285 } 0286 0287 /* Check the parameters */ 0288 assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance)); 0289 0290 /* Change the MDIOS state */ 0291 hmdios->State = HAL_MDIOS_STATE_BUSY; 0292 0293 /* Disable the Peripheral */ 0294 __HAL_MDIOS_DISABLE(hmdios); 0295 0296 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0297 0298 if(hmdios->MspDeInitCallback == NULL) 0299 { 0300 hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; 0301 } 0302 /* DeInit the low level hardware */ 0303 hmdios->MspDeInitCallback(hmdios); 0304 #else 0305 0306 /* DeInit the low level hardware */ 0307 HAL_MDIOS_MspDeInit(hmdios); 0308 0309 #endif /* (USE_HAL_MDIOS_REGISTER_CALLBACKS) */ 0310 0311 /* Change the MDIOS state */ 0312 hmdios->State = HAL_MDIOS_STATE_RESET; 0313 0314 /* Release Lock */ 0315 __HAL_UNLOCK(hmdios); 0316 0317 /* Return function status */ 0318 return HAL_OK; 0319 } 0320 0321 /** 0322 * @brief MDIOS MSP Init 0323 * @param hmdios: mdios handle 0324 * @retval None 0325 */ 0326 __weak void HAL_MDIOS_MspInit(MDIOS_HandleTypeDef *hmdios) 0327 { 0328 /* Prevent unused argument(s) compilation warning */ 0329 UNUSED(hmdios); 0330 0331 /* NOTE : This function should not be modified, when the callback is needed, 0332 the HAL_MDIOS_MspInit can be implemented in the user file 0333 */ 0334 } 0335 0336 /** 0337 * @brief MDIOS MSP DeInit 0338 * @param hmdios: mdios handle 0339 * @retval None 0340 */ 0341 __weak void HAL_MDIOS_MspDeInit(MDIOS_HandleTypeDef *hmdios) 0342 { 0343 /* Prevent unused argument(s) compilation warning */ 0344 UNUSED(hmdios); 0345 0346 /* NOTE : This function should not be modified, when the callback is needed, 0347 the HAL_MDIOS_MspDeInit can be implemented in the user file 0348 */ 0349 } 0350 0351 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0352 /** 0353 * @brief Register a User MDIOS Callback 0354 * To be used instead of the weak predefined callback 0355 * @param hmdios mdios handle 0356 * @param CallbackID ID of the callback to be registered 0357 * This parameter can be one of the following values: 0358 * @arg @ref HAL_MDIOS_WRITE_COMPLETE_CB_ID Write Complete Callback ID 0359 * @arg @ref HAL_MDIOS_READ_COMPLETE_CB_ID Read Complete Callback ID 0360 * @arg @ref HAL_MDIOS_ERROR_CB_ID Error Callback ID 0361 * @arg @ref HAL_MDIOS_WAKEUP_CB_ID Wake Up Callback ID 0362 * @arg @ref HAL_MDIOS_MSPINIT_CB_ID MspInit callback ID 0363 * @arg @ref HAL_MDIOS_MSPDEINIT_CB_ID MspDeInit callback ID 0364 * @param pCallback pointer to the Callback function 0365 * @retval status 0366 */ 0367 HAL_StatusTypeDef HAL_MDIOS_RegisterCallback(MDIOS_HandleTypeDef *hmdios, HAL_MDIOS_CallbackIDTypeDef CallbackID, pMDIOS_CallbackTypeDef pCallback) 0368 { 0369 HAL_StatusTypeDef status = HAL_OK; 0370 0371 if(pCallback == NULL) 0372 { 0373 /* Update the error code */ 0374 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0375 0376 return HAL_ERROR; 0377 } 0378 /* Process locked */ 0379 __HAL_LOCK(hmdios); 0380 0381 if(hmdios->State == HAL_MDIOS_STATE_READY) 0382 { 0383 switch (CallbackID) 0384 { 0385 case HAL_MDIOS_WRITE_COMPLETE_CB_ID : 0386 hmdios->WriteCpltCallback = pCallback; 0387 break; 0388 0389 case HAL_MDIOS_READ_COMPLETE_CB_ID : 0390 hmdios->ReadCpltCallback = pCallback; 0391 break; 0392 0393 case HAL_MDIOS_ERROR_CB_ID : 0394 hmdios->ErrorCallback = pCallback; 0395 break; 0396 0397 case HAL_MDIOS_WAKEUP_CB_ID : 0398 hmdios->WakeUpCallback = pCallback; 0399 break; 0400 0401 case HAL_MDIOS_MSPINIT_CB_ID : 0402 hmdios->MspInitCallback = pCallback; 0403 break; 0404 0405 case HAL_MDIOS_MSPDEINIT_CB_ID : 0406 hmdios->MspDeInitCallback = pCallback; 0407 break; 0408 0409 default : 0410 /* Update the error code */ 0411 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0412 /* Return error status */ 0413 status = HAL_ERROR; 0414 break; 0415 } 0416 } 0417 else if(hmdios->State == HAL_MDIOS_STATE_RESET) 0418 { 0419 switch (CallbackID) 0420 { 0421 case HAL_MDIOS_MSPINIT_CB_ID : 0422 hmdios->MspInitCallback = pCallback; 0423 break; 0424 0425 case HAL_MDIOS_MSPDEINIT_CB_ID : 0426 hmdios->MspDeInitCallback = pCallback; 0427 break; 0428 0429 default : 0430 /* Update the error code */ 0431 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0432 /* Return error status */ 0433 status = HAL_ERROR; 0434 break; 0435 } 0436 } 0437 else 0438 { 0439 /* Update the error code */ 0440 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0441 /* Return error status */ 0442 status = HAL_ERROR; 0443 } 0444 0445 /* Release Lock */ 0446 __HAL_UNLOCK(hmdios); 0447 0448 return status; 0449 } 0450 0451 /** 0452 * @brief Unregister an MDIOS Callback 0453 * MDIOS callback is redirected to the weak predefined callback 0454 * @param hmdios mdios handle 0455 * @param CallbackID ID of the callback to be unregistered 0456 * This parameter can be one of the following values: 0457 * @arg @ref HAL_MDIOS_WRITE_COMPLETE_CB_ID Write Complete Callback ID 0458 * @arg @ref HAL_MDIOS_READ_COMPLETE_CB_ID Read Complete Callback ID 0459 * @arg @ref HAL_MDIOS_ERROR_CB_ID Error Callback ID 0460 * @arg @ref HAL_MDIOS_WAKEUP_CB_ID Wake Up Callback ID 0461 * @arg @ref HAL_MDIOS_MSPINIT_CB_ID MspInit callback ID 0462 * @arg @ref HAL_MDIOS_MSPDEINIT_CB_ID MspDeInit callback ID 0463 * @retval status 0464 */ 0465 HAL_StatusTypeDef HAL_MDIOS_UnRegisterCallback(MDIOS_HandleTypeDef *hmdios, HAL_MDIOS_CallbackIDTypeDef CallbackID) 0466 { 0467 HAL_StatusTypeDef status = HAL_OK; 0468 0469 /* Process locked */ 0470 __HAL_LOCK(hmdios); 0471 0472 if(hmdios->State == HAL_MDIOS_STATE_READY) 0473 { 0474 switch (CallbackID) 0475 { 0476 case HAL_MDIOS_WRITE_COMPLETE_CB_ID : 0477 hmdios->WriteCpltCallback = HAL_MDIOS_WriteCpltCallback; 0478 break; 0479 0480 case HAL_MDIOS_READ_COMPLETE_CB_ID : 0481 hmdios->ReadCpltCallback = HAL_MDIOS_ReadCpltCallback; 0482 break; 0483 0484 case HAL_MDIOS_ERROR_CB_ID : 0485 hmdios->ErrorCallback = HAL_MDIOS_ErrorCallback; 0486 break; 0487 0488 case HAL_MDIOS_WAKEUP_CB_ID : 0489 hmdios->WakeUpCallback = HAL_MDIOS_WakeUpCallback; 0490 break; 0491 0492 case HAL_MDIOS_MSPINIT_CB_ID : 0493 hmdios->MspInitCallback = HAL_MDIOS_MspInit; 0494 break; 0495 0496 case HAL_MDIOS_MSPDEINIT_CB_ID : 0497 hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; 0498 break; 0499 0500 default : 0501 /* Update the error code */ 0502 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0503 /* Return error status */ 0504 status = HAL_ERROR; 0505 break; 0506 } 0507 } 0508 else if(hmdios->State == HAL_MDIOS_STATE_RESET) 0509 { 0510 switch (CallbackID) 0511 { 0512 case HAL_MDIOS_MSPINIT_CB_ID : 0513 hmdios->MspInitCallback = HAL_MDIOS_MspInit; 0514 break; 0515 0516 case HAL_MDIOS_MSPDEINIT_CB_ID : 0517 hmdios->MspDeInitCallback = HAL_MDIOS_MspDeInit; 0518 break; 0519 0520 default : 0521 /* Update the error code */ 0522 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0523 /* Return error status */ 0524 status = HAL_ERROR; 0525 break; 0526 } 0527 } 0528 else 0529 { 0530 /* Update the error code */ 0531 hmdios->ErrorCode |= HAL_MDIOS_ERROR_INVALID_CALLBACK; 0532 /* Return error status */ 0533 status = HAL_ERROR; 0534 } 0535 0536 /* Release Lock */ 0537 __HAL_UNLOCK(hmdios); 0538 0539 return status; 0540 } 0541 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0542 0543 /** 0544 * @} 0545 */ 0546 0547 /** @defgroup MDIOS_Exported_Functions_Group2 IO operation functions 0548 * @ingroup RTEMSBSPsARMSTM32H7 0549 * @brief MDIOS Read/Write functions 0550 * 0551 @verbatim 0552 =============================================================================== 0553 ##### IO operation functions ##### 0554 =============================================================================== 0555 This subsection provides a set of functions allowing to manage the MDIOS 0556 read and write operations. 0557 0558 (#) APIs that allow to the MDIOS to read/write from/to the 0559 values of one of the DINn/DOUTn registers: 0560 (+) Read the value of a DINn register: HAL_MDIOS_ReadReg() 0561 (+) Write a value to a DOUTn register: HAL_MDIOS_WriteReg() 0562 0563 (#) APIs that provide if there are some Slave registres have been 0564 read or written by the Master: 0565 (+) DOUTn registers read by Master: HAL_MDIOS_GetReadRegAddress() 0566 (+) DINn registers written by Master : HAL_MDIOS_GetWrittenRegAddress() 0567 0568 (#) APIs that Clear the read/write flags: 0569 (+) Clear read registers flags: HAL_MDIOS_ClearReadRegAddress() 0570 (+) Clear write registers flags: HAL_MDIOS_ClearWriteRegAddress() 0571 0572 (#) A set of Callbacks are provided: 0573 (+) HAL_MDIOS_WriteCpltCallback() 0574 (+) HAL_MDIOS_ReadCpltCallback() 0575 (+) HAL_MDIOS_ErrorCallback() 0576 0577 @endverbatim 0578 * @{ 0579 */ 0580 0581 /** 0582 * @brief Writes to an MDIOS output register 0583 * @param hmdios: mdios handle 0584 * @param RegNum: MDIOS output register address 0585 * @param Data: Data to write 0586 * @retval HAL status 0587 */ 0588 HAL_StatusTypeDef HAL_MDIOS_WriteReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t Data) 0589 { 0590 uint32_t tmpreg; 0591 0592 /* Check the parameters */ 0593 assert_param(IS_MDIOS_REGISTER(RegNum)); 0594 0595 /* Process Locked */ 0596 __HAL_LOCK(hmdios); 0597 0598 /* Get the addr of output register to be written by the MDIOS */ 0599 tmpreg = MDIOS_DOUT_BASE_ADDR + (4U * RegNum); 0600 0601 /* Write to DOUTn register */ 0602 *((uint32_t *)tmpreg) = Data; 0603 0604 /* Process Unlocked */ 0605 __HAL_UNLOCK(hmdios); 0606 0607 return HAL_OK; 0608 } 0609 0610 /** 0611 * @brief Reads an MDIOS input register 0612 * @param hmdios: mdios handle 0613 * @param RegNum: MDIOS input register address 0614 * @param pData: pointer to Data 0615 * @retval HAL status 0616 */ 0617 HAL_StatusTypeDef HAL_MDIOS_ReadReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t *pData) 0618 { 0619 uint32_t tmpreg; 0620 0621 /* Check the parameters */ 0622 assert_param(IS_MDIOS_REGISTER(RegNum)); 0623 0624 /* Process Locked */ 0625 __HAL_LOCK(hmdios); 0626 0627 /* Get the addr of input register to be read by the MDIOS */ 0628 tmpreg = MDIOS_DIN_BASE_ADDR + (4U * RegNum); 0629 0630 /* Read DINn register */ 0631 *pData = (uint16_t)(*((uint32_t *)tmpreg)); 0632 0633 /* Process Unlocked */ 0634 __HAL_UNLOCK(hmdios); 0635 0636 return HAL_OK; 0637 } 0638 0639 /** 0640 * @brief Gets Written registers by MDIO master 0641 * @param hmdios: mdios handle 0642 * @retval bit map of written registers addresses 0643 */ 0644 uint32_t HAL_MDIOS_GetWrittenRegAddress(MDIOS_HandleTypeDef *hmdios) 0645 { 0646 return hmdios->Instance->WRFR; 0647 } 0648 0649 /** 0650 * @brief Gets Read registers by MDIO master 0651 * @param hmdios: mdios handle 0652 * @retval bit map of read registers addresses 0653 */ 0654 uint32_t HAL_MDIOS_GetReadRegAddress(MDIOS_HandleTypeDef *hmdios) 0655 { 0656 return hmdios->Instance->RDFR; 0657 } 0658 0659 /** 0660 * @brief Clears Write registers flag 0661 * @param hmdios: mdios handle 0662 * @param RegNum: registers addresses to be cleared 0663 * @retval HAL status 0664 */ 0665 HAL_StatusTypeDef HAL_MDIOS_ClearWriteRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum) 0666 { 0667 /* Check the parameters */ 0668 assert_param(IS_MDIOS_REGISTER(RegNum)); 0669 0670 /* Process Locked */ 0671 __HAL_LOCK(hmdios); 0672 0673 /* Clear write registers flags */ 0674 hmdios->Instance->CWRFR |= (RegNum); 0675 0676 /* Release Lock */ 0677 __HAL_UNLOCK(hmdios); 0678 0679 return HAL_OK; 0680 } 0681 0682 /** 0683 * @brief Clears Read register flag 0684 * @param hmdios: mdios handle 0685 * @param RegNum: registers addresses to be cleared 0686 * @retval HAL status 0687 */ 0688 HAL_StatusTypeDef HAL_MDIOS_ClearReadRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum) 0689 { 0690 /* Check the parameters */ 0691 assert_param(IS_MDIOS_REGISTER(RegNum)); 0692 0693 /* Process Locked */ 0694 __HAL_LOCK(hmdios); 0695 0696 /* Clear read registers flags */ 0697 hmdios->Instance->CRDFR |= (RegNum); 0698 0699 /* Release Lock */ 0700 __HAL_UNLOCK(hmdios); 0701 0702 return HAL_OK; 0703 } 0704 0705 /** 0706 * @brief Enables Events for MDIOS peripheral 0707 * @param hmdios: mdios handle 0708 * @retval HAL status 0709 */ 0710 HAL_StatusTypeDef HAL_MDIOS_EnableEvents(MDIOS_HandleTypeDef *hmdios) 0711 { 0712 /* Process Locked */ 0713 __HAL_LOCK(hmdios); 0714 0715 /* Enable MDIOS interrupts: Register Write, Register Read and Error ITs */ 0716 __HAL_MDIOS_ENABLE_IT(hmdios, (MDIOS_IT_WRITE | MDIOS_IT_READ | MDIOS_IT_ERROR)); 0717 0718 /* Process Unlocked */ 0719 __HAL_UNLOCK(hmdios); 0720 0721 return HAL_OK; 0722 } 0723 0724 /** 0725 * @brief This function handles MDIOS interrupt request. 0726 * @param hmdios: MDIOS handle 0727 * @retval None 0728 */ 0729 void HAL_MDIOS_IRQHandler(MDIOS_HandleTypeDef *hmdios) 0730 { 0731 /* Write Register Interrupt enabled ? */ 0732 if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_WRITE) != (uint32_t)RESET) 0733 { 0734 /* Write register flag */ 0735 if(HAL_MDIOS_GetWrittenRegAddress(hmdios) != (uint32_t)RESET) 0736 { 0737 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0738 /*Call registered Write complete callback*/ 0739 hmdios->WriteCpltCallback(hmdios); 0740 #else 0741 /* Write callback function */ 0742 HAL_MDIOS_WriteCpltCallback(hmdios); 0743 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0744 0745 /* Clear write register flag */ 0746 hmdios->Instance->CWRFR |= MDIOS_ALL_REG_FLAG; 0747 } 0748 } 0749 0750 /* Read Register Interrupt enabled ? */ 0751 if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_READ) != (uint32_t)RESET) 0752 { 0753 /* Read register flag */ 0754 if(HAL_MDIOS_GetReadRegAddress(hmdios) != (uint32_t)RESET) 0755 { 0756 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0757 /*Call registered Read complete callback*/ 0758 hmdios->ReadCpltCallback(hmdios); 0759 #else 0760 /* Read callback function */ 0761 HAL_MDIOS_ReadCpltCallback(hmdios); 0762 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0763 0764 /* Clear read register flag */ 0765 hmdios->Instance->CRDFR |= MDIOS_ALL_REG_FLAG; 0766 } 0767 } 0768 0769 /* Error Interrupt enabled ? */ 0770 if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_ERROR) != (uint32_t)RESET) 0771 { 0772 /* All Errors Flag */ 0773 if(__HAL_MDIOS_GET_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG) != (uint32_t)RESET) 0774 { 0775 hmdios->ErrorCode |= HAL_MDIOS_ERROR_DATA; 0776 0777 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0778 /*Call registered Error callback*/ 0779 hmdios->ErrorCallback(hmdios); 0780 #else 0781 /* Error Callback */ 0782 HAL_MDIOS_ErrorCallback(hmdios); 0783 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0784 0785 /* Clear errors flag */ 0786 __HAL_MDIOS_CLEAR_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG); 0787 } 0788 hmdios->ErrorCode = HAL_MDIOS_ERROR_NONE; 0789 } 0790 #if defined(DUAL_CORE) 0791 0792 if (HAL_GetCurrentCPUID() == CM7_CPUID) 0793 { 0794 if(__HAL_MDIOS_WAKEUP_EXTI_GET_FLAG(MDIOS_WAKEUP_EXTI_LINE) != (uint32_t)RESET) 0795 { 0796 /* Clear MDIOS WAKEUP Exti pending bit */ 0797 __HAL_MDIOS_WAKEUP_EXTI_CLEAR_FLAG(MDIOS_WAKEUP_EXTI_LINE); 0798 0799 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0800 /*Call registered WakeUp callback*/ 0801 hmdios->WakeUpCallback(hmdios); 0802 #else 0803 /* MDIOS WAKEUP callback */ 0804 HAL_MDIOS_WakeUpCallback(hmdios); 0805 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0806 } 0807 } 0808 else 0809 { 0810 if(__HAL_MDIOS_WAKEUP_EXTID2_GET_FLAG(MDIOS_WAKEUP_EXTI_LINE) != (uint32_t)RESET) 0811 { 0812 /* Clear MDIOS WAKEUP Exti D2 pending bit */ 0813 __HAL_MDIOS_WAKEUP_EXTID2_CLEAR_FLAG(MDIOS_WAKEUP_EXTI_LINE); 0814 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0815 /*Call registered WakeUp callback*/ 0816 hmdios->WakeUpCallback(hmdios); 0817 #else 0818 /* MDIOS WAKEUP callback */ 0819 HAL_MDIOS_WakeUpCallback(hmdios); 0820 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0821 } 0822 } 0823 #else 0824 /* check MDIOS WAKEUP exti flag */ 0825 if(__HAL_MDIOS_WAKEUP_EXTI_GET_FLAG(MDIOS_WAKEUP_EXTI_LINE) != (uint32_t)RESET) 0826 { 0827 /* Clear MDIOS WAKEUP Exti pending bit */ 0828 __HAL_MDIOS_WAKEUP_EXTI_CLEAR_FLAG(MDIOS_WAKEUP_EXTI_LINE); 0829 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0830 /*Call registered WakeUp callback*/ 0831 hmdios->WakeUpCallback(hmdios); 0832 #else 0833 /* MDIOS WAKEUP callback */ 0834 HAL_MDIOS_WakeUpCallback(hmdios); 0835 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0836 } 0837 #endif 0838 } 0839 0840 /** 0841 * @brief Write Complete Callback 0842 * @param hmdios: mdios handle 0843 * @retval None 0844 */ 0845 __weak void HAL_MDIOS_WriteCpltCallback(MDIOS_HandleTypeDef *hmdios) 0846 { 0847 /* Prevent unused argument(s) compilation warning */ 0848 UNUSED(hmdios); 0849 0850 /* NOTE : This function should not be modified, when the callback is needed, 0851 the HAL_MDIOS_WriteCpltCallback can be implemented in the user file 0852 */ 0853 } 0854 0855 /** 0856 * @brief Read Complete Callback 0857 * @param hmdios: mdios handle 0858 * @retval None 0859 */ 0860 __weak void HAL_MDIOS_ReadCpltCallback(MDIOS_HandleTypeDef *hmdios) 0861 { 0862 /* Prevent unused argument(s) compilation warning */ 0863 UNUSED(hmdios); 0864 0865 /* NOTE : This function should not be modified, when the callback is needed, 0866 the HAL_MDIOS_ReadCpltCallback can be implemented in the user file 0867 */ 0868 } 0869 0870 /** 0871 * @brief Error Callback 0872 * @param hmdios: mdios handle 0873 * @retval None 0874 */ 0875 __weak void HAL_MDIOS_ErrorCallback(MDIOS_HandleTypeDef *hmdios) 0876 { 0877 /* Prevent unused argument(s) compilation warning */ 0878 UNUSED(hmdios); 0879 0880 /* NOTE : This function should not be modified, when the callback is needed, 0881 the HAL_MDIOS_ErrorCallback can be implemented in the user file 0882 */ 0883 } 0884 0885 /** 0886 * @brief MDIOS WAKEUP interrupt callback 0887 * @param hmdios: mdios handle 0888 * @retval None 0889 */ 0890 __weak void HAL_MDIOS_WakeUpCallback(MDIOS_HandleTypeDef *hmdios) 0891 { 0892 /* Prevent unused argument(s) compilation warning */ 0893 UNUSED(hmdios); 0894 0895 /* NOTE : This function Should not be modified, when the callback is needed, 0896 the HAL_MDIOS_WakeUpCallback could be implemented in the user file 0897 */ 0898 } 0899 0900 /** 0901 * @} 0902 */ 0903 0904 /** @defgroup MDIOS_Exported_Functions_Group3 Peripheral Control functions 0905 * @ingroup RTEMSBSPsARMSTM32H7 0906 * @brief MDIOS control functions 0907 * 0908 @verbatim 0909 =============================================================================== 0910 ##### Peripheral Control functions ##### 0911 =============================================================================== 0912 [..] 0913 This subsection provides a set of functions allowing to control the MDIOS. 0914 (+) HAL_MDIOS_GetState() API, helpful to check in run-time the state. 0915 (+) HAL_MDIOS_GetError() API, returns the errors code of the HAL state machine. 0916 0917 @endverbatim 0918 * @{ 0919 */ 0920 0921 /** 0922 * @brief Gets MDIOS error code 0923 * @param hmdios: mdios handle 0924 * @retval mdios error code 0925 */ 0926 uint32_t HAL_MDIOS_GetError(MDIOS_HandleTypeDef *hmdios) 0927 { 0928 /* return the error code */ 0929 return hmdios->ErrorCode; 0930 } 0931 0932 /** 0933 * @brief Return the MDIOS HAL state 0934 * @param hmdios: mdios handle 0935 * @retval HAL state 0936 */ 0937 HAL_MDIOS_StateTypeDef HAL_MDIOS_GetState(MDIOS_HandleTypeDef *hmdios) 0938 { 0939 /* Return MDIOS state */ 0940 return hmdios->State; 0941 } 0942 0943 /** 0944 * @} 0945 */ 0946 0947 /** 0948 * @} 0949 */ 0950 0951 #if (USE_HAL_MDIOS_REGISTER_CALLBACKS == 1) 0952 /** @addtogroup MDIOS_Private_Functions 0953 * @{ 0954 */ 0955 static void MDIOS_InitCallbacksToDefault(MDIOS_HandleTypeDef *hmdios) 0956 { 0957 /* Init the MDIOS Callback settings */ 0958 hmdios->WriteCpltCallback = HAL_MDIOS_WriteCpltCallback; /* Legacy weak WriteCpltCallback */ 0959 hmdios->ReadCpltCallback = HAL_MDIOS_ReadCpltCallback; /* Legacy weak ReadCpltCallback */ 0960 hmdios->ErrorCallback = HAL_MDIOS_ErrorCallback; /* Legacy weak ErrorCallback */ 0961 hmdios->WakeUpCallback = HAL_MDIOS_WakeUpCallback; /* Legacy weak WakeUpCallback */ 0962 } 0963 /** 0964 * @} 0965 */ 0966 #endif /* USE_HAL_MDIOS_REGISTER_CALLBACKS */ 0967 #endif /* HAL_MDIOS_MODULE_ENABLED */ 0968 /** 0969 * @} 0970 */ 0971 #endif /* MDIOS */ 0972 /** 0973 * @} 0974 */ 0975
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |