STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_mdios.c
Go to the documentation of this file.
1 
97 /* Includes ------------------------------------------------------------------*/
98 #include "stm32f7xx_hal.h"
99 
108 #ifdef HAL_MDIOS_MODULE_ENABLED
109 
110 #if defined (MDIOS)
111 
112 /* Private typedef -----------------------------------------------------------*/
113 /* Private define ------------------------------------------------------------*/
114 #define MDIOS_PORT_ADDRESS_SHIFT ((uint32_t)8)
115 #define MDIOS_ALL_REG_FLAG ((uint32_t)0xFFFFFFFFU)
116 #define MDIOS_ALL_ERRORS_FLAG ((uint32_t)(MDIOS_SR_PERF | MDIOS_SR_SERF | MDIOS_SR_TERF))
117 
118 #define MDIOS_DIN_BASE_ADDR (MDIOS_BASE + 0x100)
119 #define MDIOS_DOUT_BASE_ADDR (MDIOS_BASE + 0x180)
120 
121 /* Private macro -------------------------------------------------------------*/
122 /* Private variables ---------------------------------------------------------*/
123 /* Private function prototypes -----------------------------------------------*/
124 /* Private functions ---------------------------------------------------------*/
125 /* Exported functions --------------------------------------------------------*/
154 HAL_StatusTypeDef HAL_MDIOS_Init(MDIOS_HandleTypeDef *hmdios)
155 {
156  uint32_t tmpcr = 0;
157 
158  /* Check the MDIOS handle allocation */
159  if(hmdios == NULL)
160  {
161  return HAL_ERROR;
162  }
163 
164  /* Check the parameters */
165  assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance));
166  assert_param(IS_MDIOS_PORTADDRESS(hmdios->Init.PortAddress));
167  assert_param(IS_MDIOS_PREAMBLECHECK(hmdios->Init.PreambleCheck));
168 
169  /* Process Locked */
170  __HAL_LOCK(hmdios);
171 
172  if(hmdios->State == HAL_MDIOS_STATE_RESET)
173  {
174  /* Init the low level hardware */
175  HAL_MDIOS_MspInit(hmdios);
176  }
177 
178  /* Change the MDIOS state */
179  hmdios->State = HAL_MDIOS_STATE_BUSY;
180 
181  /* Get the MDIOS CR value */
182  tmpcr = hmdios->Instance->CR;
183 
184  /* Clear PORT_ADDRESS, DPC and EN bits */
185  tmpcr &= ((uint32_t)~(MDIOS_CR_EN | MDIOS_CR_DPC | MDIOS_CR_PORT_ADDRESS));
186 
187  /* Set MDIOS control parametrs and enable the peripheral */
188  tmpcr |= (uint32_t)(((hmdios->Init.PortAddress) << MDIOS_PORT_ADDRESS_SHIFT) |\
189  (hmdios->Init.PreambleCheck) | \
190  (MDIOS_CR_EN));
191 
192  /* Write the MDIOS CR */
193  hmdios->Instance->CR = tmpcr;
194 
195  /* Change the MDIOS state */
196  hmdios->State = HAL_MDIOS_STATE_READY;
197 
198  /* Release Lock */
199  __HAL_UNLOCK(hmdios);
200 
201  /* Return function status */
202  return HAL_OK;
203 
204 }
205 
211 HAL_StatusTypeDef HAL_MDIOS_DeInit(MDIOS_HandleTypeDef *hmdios)
212 {
213  /* Check the MDIOS handle allocation */
214  if(hmdios == NULL)
215  {
216  return HAL_ERROR;
217  }
218 
219  /* Check the parameters */
220  assert_param(IS_MDIOS_ALL_INSTANCE(hmdios->Instance));
221 
222  /* Change the MDIOS state */
223  hmdios->State = HAL_MDIOS_STATE_BUSY;
224 
225  /* Disable the Peripheral */
226  __HAL_MDIOS_DISABLE(hmdios);
227 
228  /* DeInit the low level hardware */
229  HAL_MDIOS_MspDeInit(hmdios);
230 
231  /* Change the MDIOS state */
232  hmdios->State = HAL_MDIOS_STATE_RESET;
233 
234  /* Release Lock */
235  __HAL_UNLOCK(hmdios);
236 
237  /* Return function status */
238  return HAL_OK;
239 }
240 
246  __weak void HAL_MDIOS_MspInit(MDIOS_HandleTypeDef *hmdios)
247 {
248  /* Prevent unused argument(s) compilation warning */
249  UNUSED(hmdios);
250 
251  /* NOTE : This function should not be modified, when the callback is needed,
252  the HAL_MDIOS_MspInit can be implemented in the user file
253  */
254 }
255 
261  __weak void HAL_MDIOS_MspDeInit(MDIOS_HandleTypeDef *hmdios)
262 {
263  /* Prevent unused argument(s) compilation warning */
264  UNUSED(hmdios);
265 
266  /* NOTE : This function should not be modified, when the callback is needed,
267  the HAL_MDIOS_MspDeInit can be implemented in the user file
268  */
269 }
314 HAL_StatusTypeDef HAL_MDIOS_WriteReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t Data)
315 {
316  uint32_t tmpreg;
317 
318  /* Check the parameters */
319  assert_param(IS_MDIOS_REGISTER(RegNum));
320 
321  /* Process Locked */
322  __HAL_LOCK(hmdios);
323 
324  /* Get the addr of output register to be written by the MDIOS */
325  tmpreg = MDIOS_DOUT_BASE_ADDR + (4 * RegNum);
326 
327  /* Write to DOUTn register */
328  *((uint32_t *)tmpreg) = Data;
329 
330  /* Process Unlocked */
331  __HAL_UNLOCK(hmdios);
332 
333  return HAL_OK;
334 }
335 
343 HAL_StatusTypeDef HAL_MDIOS_ReadReg(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum, uint16_t *pData)
344 {
345  uint32_t tmpreg;
346 
347  /* Check the parameters */
348  assert_param(IS_MDIOS_REGISTER(RegNum));
349 
350  /* Process Locked */
351  __HAL_LOCK(hmdios);
352 
353  /* Get the addr of input register to be read by the MDIOS */
354  tmpreg = MDIOS_DIN_BASE_ADDR + (4 * RegNum);
355 
356  /* Read DINn register */
357  *pData = (uint16_t)(*((uint32_t *)tmpreg));
358 
359  /* Process Unlocked */
360  __HAL_UNLOCK(hmdios);
361 
362  return HAL_OK;
363 }
364 
370 uint32_t HAL_MDIOS_GetWrittenRegAddress(MDIOS_HandleTypeDef *hmdios)
371 {
372  return hmdios->Instance->WRFR;
373 }
374 
380 uint32_t HAL_MDIOS_GetReadRegAddress(MDIOS_HandleTypeDef *hmdios)
381 {
382  return hmdios->Instance->RDFR;
383 }
384 
391 HAL_StatusTypeDef HAL_MDIOS_ClearWriteRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum)
392 {
393  /* Check the parameters */
394  assert_param(IS_MDIOS_REGISTER(RegNum));
395 
396  /* Process Locked */
397  __HAL_LOCK(hmdios);
398 
399  /* Clear write registers flags */
400  hmdios->Instance->CWRFR |= (RegNum);
401 
402  /* Release Lock */
403  __HAL_UNLOCK(hmdios);
404 
405  return HAL_OK;
406 }
407 
414 HAL_StatusTypeDef HAL_MDIOS_ClearReadRegAddress(MDIOS_HandleTypeDef *hmdios, uint32_t RegNum)
415 {
416  /* Check the parameters */
417  assert_param(IS_MDIOS_REGISTER(RegNum));
418 
419  /* Process Locked */
420  __HAL_LOCK(hmdios);
421 
422  /* Clear read registers flags */
423  hmdios->Instance->CRDFR |= (RegNum);
424 
425  /* Release Lock */
426  __HAL_UNLOCK(hmdios);
427 
428  return HAL_OK;
429 }
430 
436 HAL_StatusTypeDef HAL_MDIOS_EnableEvents(MDIOS_HandleTypeDef *hmdios)
437 {
438  /* Process Locked */
439  __HAL_LOCK(hmdios);
440 
441  /* Enable MDIOS interrupts: Register Write, Register Read and Error ITs */
442  __HAL_MDIOS_ENABLE_IT(hmdios, (MDIOS_IT_WRITE | MDIOS_IT_READ | MDIOS_IT_ERROR));
443 
444  /* Process Unlocked */
445  __HAL_UNLOCK(hmdios);
446 
447  return HAL_OK;
448 }
449 
455 void HAL_MDIOS_IRQHandler(MDIOS_HandleTypeDef *hmdios)
456 {
457  /* Write Register Interrupt enabled ? */
458  if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_WRITE) != RESET)
459  {
460  /* Write register flag */
461  if(HAL_MDIOS_GetWrittenRegAddress(hmdios) != RESET)
462  {
463  /* Write callback function */
464  HAL_MDIOS_WriteCpltCallback(hmdios);
465 
466  /* Clear write register flag */
467  HAL_MDIOS_ClearWriteRegAddress(hmdios, MDIOS_ALL_REG_FLAG);
468  }
469  }
470 
471  /* Read Register Interrupt enabled ? */
472  if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_READ) != RESET)
473  {
474  /* Read register flag */
475  if(HAL_MDIOS_GetReadRegAddress(hmdios) != RESET)
476  {
477  /* Read callback function */
478  HAL_MDIOS_ReadCpltCallback(hmdios);
479 
480  /* Clear read register flag */
481  HAL_MDIOS_ClearReadRegAddress(hmdios, MDIOS_ALL_REG_FLAG);
482  }
483  }
484 
485  /* Error Interrupt enabled ? */
486  if(__HAL_MDIOS_GET_IT_SOURCE(hmdios, MDIOS_IT_ERROR) != RESET)
487  {
488  /* All Errors Flag */
489  if(__HAL_MDIOS_GET_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG) !=RESET)
490  {
491  /* Error Callback */
492  HAL_MDIOS_ErrorCallback(hmdios);
493 
494  /* Clear errors flag */
495  __HAL_MDIOS_CLEAR_ERROR_FLAG(hmdios, MDIOS_ALL_ERRORS_FLAG);
496  }
497  }
498 
499  /* check MDIOS WAKEUP exti flag */
500  if(__HAL_MDIOS_WAKEUP_EXTI_GET_FLAG() != RESET)
501  {
502  /* MDIOS WAKEUP interrupt user callback */
503  HAL_MDIOS_WakeUpCallback(hmdios);
504 
505  /* Clear MDIOS WAKEUP Exti pending bit */
506  __HAL_MDIOS_WAKEUP_EXTI_CLEAR_FLAG();
507  }
508 }
509 
515  __weak void HAL_MDIOS_WriteCpltCallback(MDIOS_HandleTypeDef *hmdios)
516 {
517  /* Prevent unused argument(s) compilation warning */
518  UNUSED(hmdios);
519 
520  /* NOTE : This function should not be modified, when the callback is needed,
521  the HAL_MDIOS_WriteCpltCallback can be implemented in the user file
522  */
523 }
524 
530  __weak void HAL_MDIOS_ReadCpltCallback(MDIOS_HandleTypeDef *hmdios)
531 {
532  /* Prevent unused argument(s) compilation warning */
533  UNUSED(hmdios);
534 
535  /* NOTE : This function should not be modified, when the callback is needed,
536  the HAL_MDIOS_ReadCpltCallback can be implemented in the user file
537  */
538 }
539 
545  __weak void HAL_MDIOS_ErrorCallback(MDIOS_HandleTypeDef *hmdios)
546 {
547  /* Prevent unused argument(s) compilation warning */
548  UNUSED(hmdios);
549 
550  /* NOTE : This function should not be modified, when the callback is needed,
551  the HAL_MDIOS_ErrorCallback can be implemented in the user file
552  */
553 }
554 
560 __weak void HAL_MDIOS_WakeUpCallback(MDIOS_HandleTypeDef *hmdios)
561 {
562  /* Prevent unused argument(s) compilation warning */
563  UNUSED(hmdios);
564 
565  /* NOTE : This function Should not be modified, when the callback is needed,
566  the HAL_MDIOS_WakeUpCallback could be implemented in the user file
567  */
568 }
569 
595 uint32_t HAL_MDIOS_GetError(MDIOS_HandleTypeDef *hmdios)
596 {
597  /* return errors flags on status register */
598  return hmdios->Instance->SR;
599 }
600 
606 HAL_MDIOS_StateTypeDef HAL_MDIOS_GetState(MDIOS_HandleTypeDef *hmdios)
607 {
608  /* Return MDIOS state */
609  return hmdios->State;
610 }
611 
619 #endif /* MDIOS */
620 #endif /* HAL_MDIOS_MODULE_ENABLED */
621 
629 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
#define assert_param(expr)
Include module&#39;s header file.
#define IS_MDIOS_ALL_INSTANCE(__INSTANCE__)
Definition: stm32f765xx.h:9258
#define MDIOS_CR_PORT_ADDRESS
Definition: stm32f765xx.h:9115
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
#define NULL
Definition: usbd_def.h:53
This file contains all the functions prototypes for the HAL module driver.
#define UNUSED(x)
#define MDIOS_CR_DPC
Definition: stm32f765xx.h:9114
#define MDIOS_CR_EN
Definition: stm32f765xx.h:9110
HAL_StatusTypeDef
HAL Status structures definition.