dp83848.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. /**
  2. ******************************************************************************
  3. * @file dp83848.h
  4. * @author MCD Application Team
  5. * @brief This file contains all the functions prototypes for the
  6. * dp83848.c PHY driver.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2021 STMicroelectronics.
  11. * All rights reserved.
  12. *
  13. * This software is licensed under terms that can be found in the LICENSE file
  14. * in the root directory of this software component.
  15. * If no LICENSE file comes with this software, it is provided AS-IS.
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef DP83848_H
  21. #define DP83848_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include <stdint.h>
  27. /** @addtogroup BSP
  28. * @{
  29. */
  30. /** @addtogroup Component
  31. * @{
  32. */
  33. /** @defgroup DP83848
  34. * @{
  35. */
  36. /* Exported constants --------------------------------------------------------*/
  37. /** @defgroup DP83848_Exported_Constants DP83848 Exported Constants
  38. * @{
  39. */
  40. /** @defgroup DP83848_Registers_Mapping DP83848 Registers Mapping
  41. * @{
  42. */
  43. #define DP83848_BCR ((uint16_t)0x0000U)
  44. #define DP83848_BSR ((uint16_t)0x0001U)
  45. #define DP83848_PHYI1R ((uint16_t)0x0002U)
  46. #define DP83848_PHYI2R ((uint16_t)0x0003U)
  47. #define DP83848_ANAR ((uint16_t)0x0004U)
  48. #define DP83848_ANLPAR ((uint16_t)0x0005U)
  49. #define DP83848_ANER ((uint16_t)0x0006U)
  50. #define DP83848_ANNPTR ((uint16_t)0x0007U)
  51. #define DP83848_SMR ((uint16_t)0x0019U)
  52. #define DP83848_ISFR ((uint16_t)0x0012U)
  53. #define DP83848_IMR ((uint16_t)0x0011U)
  54. #define DP83848_PHYSCSR ((uint16_t)0x0010U)
  55. /**
  56. * @}
  57. */
  58. /** @defgroup DP83848_BCR_Bit_Definition DP83848 BCR Bit Definition
  59. * @{
  60. */
  61. #define DP83848_BCR_SOFT_RESET ((uint16_t)0x8000U)
  62. #define DP83848_BCR_LOOPBACK ((uint16_t)0x4000U)
  63. #define DP83848_BCR_SPEED_SELECT ((uint16_t)0x2000U)
  64. #define DP83848_BCR_AUTONEGO_EN ((uint16_t)0x1000U)
  65. #define DP83848_BCR_POWER_DOWN ((uint16_t)0x0800U)
  66. #define DP83848_BCR_ISOLATE ((uint16_t)0x0400U)
  67. #define DP83848_BCR_RESTART_AUTONEGO ((uint16_t)0x0200U)
  68. #define DP83848_BCR_DUPLEX_MODE ((uint16_t)0x0100U)
  69. /**
  70. * @}
  71. */
  72. /** @defgroup DP83848_BSR_Bit_Definition DP83848 BSR Bit Definition
  73. * @{
  74. */
  75. #define DP83848_BSR_100BASE_T4 ((uint16_t)0x8000U)
  76. #define DP83848_BSR_100BASE_TX_FD ((uint16_t)0x4000U)
  77. #define DP83848_BSR_100BASE_TX_HD ((uint16_t)0x2000U)
  78. #define DP83848_BSR_10BASE_T_FD ((uint16_t)0x1000U)
  79. #define DP83848_BSR_10BASE_T_HD ((uint16_t)0x0800U)
  80. #define DP83848_BSR_MF_PREAMBLE ((uint16_t)0x0040U)
  81. #define DP83848_BSR_AUTONEGO_CPLT ((uint16_t)0x0020U)
  82. #define DP83848_BSR_REMOTE_FAULT ((uint16_t)0x0010U)
  83. #define DP83848_BSR_AUTONEGO_ABILITY ((uint16_t)0x0008U)
  84. #define DP83848_BSR_LINK_STATUS ((uint16_t)0x0004U)
  85. #define DP83848_BSR_JABBER_DETECT ((uint16_t)0x0002U)
  86. #define DP83848_BSR_EXTENDED_CAP ((uint16_t)0x0001U)
  87. /**
  88. * @}
  89. */
  90. /** @defgroup DP83848_PHYI1R_Bit_Definition DP83848 PHYI1R Bit Definition
  91. * @{
  92. */
  93. #define DP83848_PHYI1R_OUI_3_18 ((uint16_t)0xFFFFU)
  94. /**
  95. * @}
  96. */
  97. /** @defgroup DP83848_PHYI2R_Bit_Definition DP83848 PHYI2R Bit Definition
  98. * @{
  99. */
  100. #define DP83848_PHYI2R_OUI_19_24 ((uint16_t)0xFC00U)
  101. #define DP83848_PHYI2R_MODEL_NBR ((uint16_t)0x03F0U)
  102. #define DP83848_PHYI2R_REVISION_NBR ((uint16_t)0x000FU)
  103. /**
  104. * @}
  105. */
  106. /** @defgroup DP83848_ANAR_Bit_Definition DP83848 ANAR Bit Definition
  107. * @{
  108. */
  109. #define DP83848_ANAR_NEXT_PAGE ((uint16_t)0x8000U)
  110. #define DP83848_ANAR_REMOTE_FAULT ((uint16_t)0x2000U)
  111. #define DP83848_ANAR_PAUSE_OPERATION ((uint16_t)0x0C00U)
  112. #define DP83848_ANAR_PO_NOPAUSE ((uint16_t)0x0000U)
  113. #define DP83848_ANAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U)
  114. #define DP83848_ANAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U)
  115. #define DP83848_ANAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U)
  116. #define DP83848_ANAR_100BASE_TX_FD ((uint16_t)0x0100U)
  117. #define DP83848_ANAR_100BASE_TX ((uint16_t)0x0080U)
  118. #define DP83848_ANAR_10BASE_T_FD ((uint16_t)0x0040U)
  119. #define DP83848_ANAR_10BASE_T ((uint16_t)0x0020U)
  120. #define DP83848_ANAR_SELECTOR_FIELD ((uint16_t)0x000FU)
  121. /**
  122. * @}
  123. */
  124. /** @defgroup DP83848_ANLPAR_Bit_Definition DP83848 ANLPAR Bit Definition
  125. * @{
  126. */
  127. #define DP83848_ANLPAR_NEXT_PAGE ((uint16_t)0x8000U)
  128. #define DP83848_ANLPAR_REMOTE_FAULT ((uint16_t)0x2000U)
  129. #define DP83848_ANLPAR_PAUSE_OPERATION ((uint16_t)0x0C00U)
  130. #define DP83848_ANLPAR_PO_NOPAUSE ((uint16_t)0x0000U)
  131. #define DP83848_ANLPAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U)
  132. #define DP83848_ANLPAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U)
  133. #define DP83848_ANLPAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U)
  134. #define DP83848_ANLPAR_100BASE_TX_FD ((uint16_t)0x0100U)
  135. #define DP83848_ANLPAR_100BASE_TX ((uint16_t)0x0080U)
  136. #define DP83848_ANLPAR_10BASE_T_FD ((uint16_t)0x0040U)
  137. #define DP83848_ANLPAR_10BASE_T ((uint16_t)0x0020U)
  138. #define DP83848_ANLPAR_SELECTOR_FIELD ((uint16_t)0x000FU)
  139. /**
  140. * @}
  141. */
  142. /** @defgroup DP83848_ANER_Bit_Definition DP83848 ANER Bit Definition
  143. * @{
  144. */
  145. #define DP83848_ANER_RX_NP_LOCATION_ABLE ((uint16_t)0x0040U)
  146. #define DP83848_ANER_RX_NP_STORAGE_LOCATION ((uint16_t)0x0020U)
  147. #define DP83848_ANER_PARALLEL_DETECT_FAULT ((uint16_t)0x0010U)
  148. #define DP83848_ANER_LP_NP_ABLE ((uint16_t)0x0008U)
  149. #define DP83848_ANER_NP_ABLE ((uint16_t)0x0004U)
  150. #define DP83848_ANER_PAGE_RECEIVED ((uint16_t)0x0002U)
  151. #define DP83848_ANER_LP_AUTONEG_ABLE ((uint16_t)0x0001U)
  152. /**
  153. * @}
  154. */
  155. /** @defgroup DP83848_ANNPTR_Bit_Definition DP83848 ANNPTR Bit Definition
  156. * @{
  157. */
  158. #define DP83848_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U)
  159. #define DP83848_ANNPTR_MESSAGE_PAGE ((uint16_t)0x2000U)
  160. #define DP83848_ANNPTR_ACK2 ((uint16_t)0x1000U)
  161. #define DP83848_ANNPTR_TOGGLE ((uint16_t)0x0800U)
  162. #define DP83848_ANNPTR_MESSAGE_CODE ((uint16_t)0x07FFU)
  163. /**
  164. * @}
  165. */
  166. /** @defgroup DP83848_ANNPRR_Bit_Definition DP83848 ANNPRR Bit Definition
  167. * @{
  168. */
  169. #define DP83848_ANNPRR_NEXT_PAGE ((uint16_t)0x8000U)
  170. #define DP83848_ANNPRR_ACK ((uint16_t)0x4000U)
  171. #define DP83848_ANNPRR_MESSAGE_PAGE ((uint16_t)0x2000U)
  172. #define DP83848_ANNPRR_ACK2 ((uint16_t)0x1000U)
  173. #define DP83848_ANNPRR_TOGGLE ((uint16_t)0x0800U)
  174. #define DP83848_ANNPRR_MESSAGE_CODE ((uint16_t)0x07FFU)
  175. /**
  176. * @}
  177. */
  178. /** @defgroup DP83848_MMDACR_Bit_Definition DP83848 MMDACR Bit Definition
  179. * @{
  180. */
  181. #define DP83848_MMDACR_MMD_FUNCTION ((uint16_t)0xC000U)
  182. #define DP83848_MMDACR_MMD_FUNCTION_ADDR ((uint16_t)0x0000U)
  183. #define DP83848_MMDACR_MMD_FUNCTION_DATA ((uint16_t)0x4000U)
  184. #define DP83848_MMDACR_MMD_DEV_ADDR ((uint16_t)0x001FU)
  185. /**
  186. * @}
  187. */
  188. /** @defgroup DP83848_ENCTR_Bit_Definition DP83848 ENCTR Bit Definition
  189. * @{
  190. */
  191. #define DP83848_ENCTR_TX_ENABLE ((uint16_t)0x8000U)
  192. #define DP83848_ENCTR_TX_TIMER ((uint16_t)0x6000U)
  193. #define DP83848_ENCTR_TX_TIMER_1S ((uint16_t)0x0000U)
  194. #define DP83848_ENCTR_TX_TIMER_768MS ((uint16_t)0x2000U)
  195. #define DP83848_ENCTR_TX_TIMER_512MS ((uint16_t)0x4000U)
  196. #define DP83848_ENCTR_TX_TIMER_265MS ((uint16_t)0x6000U)
  197. #define DP83848_ENCTR_RX_ENABLE ((uint16_t)0x1000U)
  198. #define DP83848_ENCTR_RX_MAX_INTERVAL ((uint16_t)0x0C00U)
  199. #define DP83848_ENCTR_RX_MAX_INTERVAL_64MS ((uint16_t)0x0000U)
  200. #define DP83848_ENCTR_RX_MAX_INTERVAL_256MS ((uint16_t)0x0400U)
  201. #define DP83848_ENCTR_RX_MAX_INTERVAL_512MS ((uint16_t)0x0800U)
  202. #define DP83848_ENCTR_RX_MAX_INTERVAL_1S ((uint16_t)0x0C00U)
  203. #define DP83848_ENCTR_EX_CROSS_OVER ((uint16_t)0x0002U)
  204. #define DP83848_ENCTR_EX_MANUAL_CROSS_OVER ((uint16_t)0x0001U)
  205. /**
  206. * @}
  207. */
  208. /** @defgroup DP83848_MCSR_Bit_Definition DP83848 MCSR Bit Definition
  209. * @{
  210. */
  211. #define DP83848_MCSR_EDPWRDOWN ((uint16_t)0x2000U)
  212. #define DP83848_MCSR_FARLOOPBACK ((uint16_t)0x0200U)
  213. #define DP83848_MCSR_ALTINT ((uint16_t)0x0040U)
  214. #define DP83848_MCSR_ENERGYON ((uint16_t)0x0002U)
  215. /**
  216. * @}
  217. */
  218. /** @defgroup DP83848_SMR_Bit_Definition DP83848 SMR Bit Definition
  219. * @{
  220. */
  221. #define DP83848_SMR_MODE ((uint16_t)0x00E0U)
  222. #define DP83848_SMR_PHY_ADDR ((uint16_t)0x001FU)
  223. /**
  224. * @}
  225. */
  226. /** @defgroup DP83848_TPDCR_Bit_Definition DP83848 TPDCR Bit Definition
  227. * @{
  228. */
  229. #define DP83848_TPDCR_DELAY_IN ((uint16_t)0x8000U)
  230. #define DP83848_TPDCR_LINE_BREAK_COUNTER ((uint16_t)0x7000U)
  231. #define DP83848_TPDCR_PATTERN_HIGH ((uint16_t)0x0FC0U)
  232. #define DP83848_TPDCR_PATTERN_LOW ((uint16_t)0x003FU)
  233. /**
  234. * @}
  235. */
  236. /** @defgroup DP83848_TCSR_Bit_Definition DP83848 TCSR Bit Definition
  237. * @{
  238. */
  239. #define DP83848_TCSR_TDR_ENABLE ((uint16_t)0x8000U)
  240. #define DP83848_TCSR_TDR_AD_FILTER_ENABLE ((uint16_t)0x4000U)
  241. #define DP83848_TCSR_TDR_CH_CABLE_TYPE ((uint16_t)0x0600U)
  242. #define DP83848_TCSR_TDR_CH_CABLE_DEFAULT ((uint16_t)0x0000U)
  243. #define DP83848_TCSR_TDR_CH_CABLE_SHORTED ((uint16_t)0x0200U)
  244. #define DP83848_TCSR_TDR_CH_CABLE_OPEN ((uint16_t)0x0400U)
  245. #define DP83848_TCSR_TDR_CH_CABLE_MATCH ((uint16_t)0x0600U)
  246. #define DP83848_TCSR_TDR_CH_STATUS ((uint16_t)0x0100U)
  247. #define DP83848_TCSR_TDR_CH_LENGTH ((uint16_t)0x00FFU)
  248. /**
  249. * @}
  250. */
  251. /** @defgroup DP83848_SCSIR_Bit_Definition DP83848 SCSIR Bit Definition
  252. * @{
  253. */
  254. #define DP83848_SCSIR_AUTO_MDIX_ENABLE ((uint16_t)0x8000U)
  255. #define DP83848_SCSIR_CHANNEL_SELECT ((uint16_t)0x2000U)
  256. #define DP83848_SCSIR_SQE_DISABLE ((uint16_t)0x0800U)
  257. #define DP83848_SCSIR_XPOLALITY ((uint16_t)0x0010U)
  258. /**
  259. * @}
  260. */
  261. /** @defgroup DP83848_CLR_Bit_Definition DP83848 CLR Bit Definition
  262. * @{
  263. */
  264. #define DP83848_CLR_CABLE_LENGTH ((uint16_t)0xF000U)
  265. /**
  266. * @}
  267. */
  268. /** @defgroup DP83848_IMR_ISFR_Bit_Definition DP83848 IMR ISFR Bit Definition
  269. * @{
  270. */
  271. #define DP83848_INT_8 ((uint16_t)0x0100U)
  272. #define DP83848_INT_7 ((uint16_t)0x0080U)
  273. #define DP83848_INT_6 ((uint16_t)0x0040U)
  274. #define DP83848_INT_5 ((uint16_t)0x0020U)
  275. #define DP83848_INT_4 ((uint16_t)0x0010U)
  276. #define DP83848_INT_3 ((uint16_t)0x0008U)
  277. #define DP83848_INT_2 ((uint16_t)0x0004U)
  278. #define DP83848_INT_1 ((uint16_t)0x0002U)
  279. /**
  280. * @}
  281. */
  282. /** @defgroup DP83848_PHYSCSR_Bit_Definition DP83848 PHYSCSR Bit Definition
  283. * @{
  284. */
  285. #define DP83848_PHYSCSR_AUTONEGO_DONE ((uint16_t)0x010U)
  286. #define DP83848_PHYSCSR_HCDSPEEDMASK ((uint16_t)0x006U)
  287. #define DP83848_PHYSCSR_10BT_HD ((uint16_t)0x002U)
  288. #define DP83848_PHYSCSR_10BT_FD ((uint16_t)0x006U)
  289. #define DP83848_PHYSCSR_100BTX_HD ((uint16_t)0x000U)
  290. #define DP83848_PHYSCSR_100BTX_FD ((uint16_t)0x004U)
  291. /**
  292. * @}
  293. */
  294. /** @defgroup DP83848_Status DP83848 Status
  295. * @{
  296. */
  297. #define DP83848_STATUS_READ_ERROR ((int32_t)-5)
  298. #define DP83848_STATUS_WRITE_ERROR ((int32_t)-4)
  299. #define DP83848_STATUS_ADDRESS_ERROR ((int32_t)-3)
  300. #define DP83848_STATUS_RESET_TIMEOUT ((int32_t)-2)
  301. #define DP83848_STATUS_ERROR ((int32_t)-1)
  302. #define DP83848_STATUS_OK ((int32_t) 0)
  303. #define DP83848_STATUS_LINK_DOWN ((int32_t) 1)
  304. #define DP83848_STATUS_100MBITS_FULLDUPLEX ((int32_t) 2)
  305. #define DP83848_STATUS_100MBITS_HALFDUPLEX ((int32_t) 3)
  306. #define DP83848_STATUS_10MBITS_FULLDUPLEX ((int32_t) 4)
  307. #define DP83848_STATUS_10MBITS_HALFDUPLEX ((int32_t) 5)
  308. #define DP83848_STATUS_AUTONEGO_NOTDONE ((int32_t) 6)
  309. /**
  310. * @}
  311. */
  312. /** @defgroup DP83848_IT_Flags DP83848 IT Flags
  313. * @{
  314. */
  315. #define DP83848_WOL_IT DP83848_INT_8
  316. #define DP83848_ENERGYON_IT DP83848_INT_7
  317. #define DP83848_AUTONEGO_COMPLETE_IT DP83848_INT_6
  318. #define DP83848_REMOTE_FAULT_IT DP83848_INT_5
  319. #define DP83848_LINK_DOWN_IT DP83848_INT_4
  320. #define DP83848_AUTONEGO_LP_ACK_IT DP83848_INT_3
  321. #define DP83848_PARALLEL_DETECTION_FAULT_IT DP83848_INT_2
  322. #define DP83848_AUTONEGO_PAGE_RECEIVED_IT DP83848_INT_1
  323. /**
  324. * @}
  325. */
  326. /**
  327. * @}
  328. */
  329. /* Exported types ------------------------------------------------------------*/
  330. /** @defgroup DP83848_Exported_Types DP83848 Exported Types
  331. * @{
  332. */
  333. typedef int32_t (*dp83848_Init_Func) (void);
  334. typedef int32_t (*dp83848_DeInit_Func) (void);
  335. typedef int32_t (*dp83848_ReadReg_Func) (uint32_t, uint32_t, uint32_t *);
  336. typedef int32_t (*dp83848_WriteReg_Func) (uint32_t, uint32_t, uint32_t);
  337. typedef int32_t (*dp83848_GetTick_Func) (void);
  338. typedef struct
  339. {
  340. dp83848_Init_Func Init;
  341. dp83848_DeInit_Func DeInit;
  342. dp83848_WriteReg_Func WriteReg;
  343. dp83848_ReadReg_Func ReadReg;
  344. dp83848_GetTick_Func GetTick;
  345. } dp83848_IOCtx_t;
  346. typedef struct
  347. {
  348. uint32_t DevAddr;
  349. uint32_t Is_Initialized;
  350. dp83848_IOCtx_t IO;
  351. void *pData;
  352. }dp83848_Object_t;
  353. /**
  354. * @}
  355. */
  356. /* Exported macro ------------------------------------------------------------*/
  357. /* Exported functions --------------------------------------------------------*/
  358. /** @defgroup DP83848_Exported_Functions DP83848 Exported Functions
  359. * @{
  360. */
  361. int32_t DP83848_RegisterBusIO(dp83848_Object_t *pObj, dp83848_IOCtx_t *ioctx);
  362. int32_t DP83848_Init(dp83848_Object_t *pObj);
  363. int32_t DP83848_DeInit(dp83848_Object_t *pObj);
  364. int32_t DP83848_DisablePowerDownMode(dp83848_Object_t *pObj);
  365. int32_t DP83848_EnablePowerDownMode(dp83848_Object_t *pObj);
  366. int32_t DP83848_StartAutoNego(dp83848_Object_t *pObj);
  367. int32_t DP83848_GetLinkState(dp83848_Object_t *pObj);
  368. int32_t DP83848_SetLinkState(dp83848_Object_t *pObj, uint32_t LinkState);
  369. int32_t DP83848_EnableLoopbackMode(dp83848_Object_t *pObj);
  370. int32_t DP83848_DisableLoopbackMode(dp83848_Object_t *pObj);
  371. int32_t DP83848_EnableIT(dp83848_Object_t *pObj, uint32_t Interrupt);
  372. int32_t DP83848_DisableIT(dp83848_Object_t *pObj, uint32_t Interrupt);
  373. int32_t DP83848_ClearIT(dp83848_Object_t *pObj, uint32_t Interrupt);
  374. int32_t DP83848_GetITStatus(dp83848_Object_t *pObj, uint32_t Interrupt);
  375. /**
  376. * @}
  377. */
  378. #ifdef __cplusplus
  379. }
  380. #endif
  381. #endif /* DP83848_H */
  382. /**
  383. * @}
  384. */
  385. /**
  386. * @}
  387. */
  388. /**
  389. * @}
  390. */
  391. /**
  392. * @}
  393. */