stm32f1xx_hal_cec.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. /**
  2. ******************************************************************************
  3. * @file stm32f1xx_hal_cec.h
  4. * @author MCD Application Team
  5. * @version V1.0.4
  6. * @date 29-April-2016
  7. * @brief Header file of CEC HAL module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32F1xx_HAL_CEC_H
  39. #define __STM32F1xx_HAL_CEC_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. #if defined(STM32F100xB) || defined(STM32F100xE)
  44. /* Includes ------------------------------------------------------------------*/
  45. #include "stm32f1xx_hal_def.h"
  46. /** @addtogroup STM32F1xx_HAL_Driver
  47. * @{
  48. */
  49. /** @addtogroup CEC
  50. * @{
  51. */
  52. /** @addtogroup CEC_Private_Constants
  53. * @{
  54. */
  55. #define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BIT_TIMING_ERROR_MODE_STANDARD) || \
  56. ((MODE) == CEC_BIT_TIMING_ERROR_MODE_ERRORFREE))
  57. #define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BIT_PERIOD_ERROR_MODE_STANDARD) || \
  58. ((MODE) == CEC_BIT_PERIOD_ERROR_MODE_FLEXIBLE))
  59. /** @brief Check CEC device Own Address Register (OAR) setting.
  60. * @param __ADDRESS__: CEC own address.
  61. * @retval Test result (TRUE or FALSE).
  62. */
  63. #define IS_CEC_OAR_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0xF)
  64. /** @brief Check CEC initiator or destination logical address setting.
  65. * Initiator and destination addresses are coded over 4 bits.
  66. * @param __ADDRESS__: CEC initiator or logical address.
  67. * @retval Test result (TRUE or FALSE).
  68. */
  69. #define IS_CEC_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0xF)
  70. /** @brief Check CEC message size.
  71. * The message size is the payload size: without counting the header,
  72. * it varies from 0 byte (ping operation, one header only, no payload) to
  73. * 15 bytes (1 opcode and up to 14 operands following the header).
  74. * @param __SIZE__: CEC message size.
  75. * @retval Test result (TRUE or FALSE).
  76. */
  77. #define IS_CEC_MSGSIZE(__SIZE__) ((__SIZE__) <= 0xF)
  78. /**
  79. * @}
  80. */
  81. /* Exported types ------------------------------------------------------------*/
  82. /** @defgroup CEC_Exported_Types CEC Exported Types
  83. * @{
  84. */
  85. /**
  86. * @brief CEC Init Structure definition
  87. */
  88. typedef struct
  89. {
  90. uint32_t TimingErrorFree; /*!< Configures the CEC Bit Timing Error Mode.
  91. This parameter can be a value of @ref CEC_BitTimingErrorMode */
  92. uint32_t PeriodErrorFree; /*!< Configures the CEC Bit Period Error Mode.
  93. This parameter can be a value of @ref CEC_BitPeriodErrorMode */
  94. uint8_t InitiatorAddress; /*!< Initiator address (source logical address, sent in each header)
  95. This parameter can be a value <= 0xF */
  96. }CEC_InitTypeDef;
  97. /**
  98. * @brief HAL CEC State structures definition
  99. */
  100. typedef enum
  101. {
  102. HAL_CEC_STATE_RESET = 0x00, /*!< Peripheral Reset state */
  103. HAL_CEC_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */
  104. HAL_CEC_STATE_BUSY = 0x02, /*!< An internal process is ongoing */
  105. HAL_CEC_STATE_BUSY_TX = 0x03, /*!< Data Transmission process is ongoing */
  106. HAL_CEC_STATE_BUSY_RX = 0x04, /*!< Data Reception process is ongoing */
  107. HAL_CEC_STATE_BUSY_TX_RX = 0x05, /*!< Data Transmission and Reception process is ongoing */
  108. HAL_CEC_STATE_TIMEOUT = 0x06, /*!< Timeout state */
  109. HAL_CEC_STATE_ERROR = 0x07 /*!< State Error */
  110. }HAL_CEC_StateTypeDef;
  111. /**
  112. * @brief HAL Error structures definition
  113. */
  114. typedef enum
  115. {
  116. HAL_CEC_ERROR_NONE = (uint32_t) 0x0, /*!< no error */
  117. HAL_CEC_ERROR_BTE = CEC_ESR_BTE, /*!< Bit Timing Error */
  118. HAL_CEC_ERROR_BPE = CEC_ESR_BPE, /*!< Bit Period Error */
  119. HAL_CEC_ERROR_RBTFE = CEC_ESR_RBTFE, /*!< Rx Block Transfer Finished Error */
  120. HAL_CEC_ERROR_SBE = CEC_ESR_SBE, /*!< Start Bit Error */
  121. HAL_CEC_ERROR_ACKE = CEC_ESR_ACKE, /*!< Block Acknowledge Error */
  122. HAL_CEC_ERROR_LINE = CEC_ESR_LINE, /*!< Line Error */
  123. HAL_CEC_ERROR_TBTFE = CEC_ESR_TBTFE, /*!< Tx Block Transfer Finished Error */
  124. }HAL_CEC_ErrorTypeDef;
  125. /**
  126. * @brief CEC handle Structure definition
  127. */
  128. typedef struct
  129. {
  130. CEC_TypeDef *Instance; /*!< CEC registers base address */
  131. CEC_InitTypeDef Init; /*!< CEC communication parameters */
  132. uint8_t *pTxBuffPtr; /*!< Pointer to CEC Tx transfer Buffer */
  133. uint16_t TxXferCount; /*!< CEC Tx Transfer Counter */
  134. uint8_t *pRxBuffPtr; /*!< Pointer to CEC Rx transfer Buffer */
  135. uint16_t RxXferSize; /*!< CEC Rx Transfer size, 0: header received only */
  136. uint32_t ErrorCode; /*!< For errors handling purposes, copy of ESR register in case error is reported */
  137. HAL_LockTypeDef Lock; /*!< Locking object */
  138. HAL_CEC_StateTypeDef State; /*!< CEC communication state */
  139. }CEC_HandleTypeDef;
  140. /**
  141. * @}
  142. */
  143. /* Exported constants --------------------------------------------------------*/
  144. /** @defgroup CEC_Exported_Constants CEC Exported Constants
  145. * @{
  146. */
  147. /** @defgroup CEC_BitTimingErrorMode Bit Timing Error Mode
  148. * @{
  149. */
  150. #define CEC_BIT_TIMING_ERROR_MODE_STANDARD ((uint32_t)0x00) /*!< Bit timing error Standard Mode */
  151. #define CEC_BIT_TIMING_ERROR_MODE_ERRORFREE CEC_CFGR_BTEM /*!< Bit timing error Free Mode */
  152. /**
  153. * @}
  154. */
  155. /** @defgroup CEC_BitPeriodErrorMode Bit Period Error Mode
  156. * @{
  157. */
  158. #define CEC_BIT_PERIOD_ERROR_MODE_STANDARD ((uint32_t)0x00) /*!< Bit period error Standard Mode */
  159. #define CEC_BIT_PERIOD_ERROR_MODE_FLEXIBLE CEC_CFGR_BPEM /*!< Bit period error Flexible Mode */
  160. /**
  161. * @}
  162. */
  163. /** @defgroup CEC_Initiator_Position Initiator logical address position in message header
  164. * @{
  165. */
  166. #define CEC_INITIATOR_LSB_POS ((uint32_t) 4)
  167. /**
  168. * @}
  169. */
  170. /** @defgroup CEC_Interrupts_Definitions Interrupts definition
  171. * @{
  172. */
  173. #define CEC_IT_IE CEC_CFGR_IE
  174. /**
  175. * @}
  176. */
  177. /** @defgroup CEC_Flags_Definitions Flags definition
  178. * @{
  179. */
  180. #define CEC_FLAG_TSOM CEC_CSR_TSOM
  181. #define CEC_FLAG_TEOM CEC_CSR_TEOM
  182. #define CEC_FLAG_TERR CEC_CSR_TERR
  183. #define CEC_FLAG_TBTRF CEC_CSR_TBTRF
  184. #define CEC_FLAG_RSOM CEC_CSR_RSOM
  185. #define CEC_FLAG_REOM CEC_CSR_REOM
  186. #define CEC_FLAG_RERR CEC_CSR_RERR
  187. #define CEC_FLAG_RBTF CEC_CSR_RBTF
  188. /**
  189. * @}
  190. */
  191. /**
  192. * @}
  193. */
  194. /* Exported macros -----------------------------------------------------------*/
  195. /** @defgroup CEC_Exported_Macros CEC Exported Macros
  196. * @{
  197. */
  198. /** @brief Reset CEC handle state
  199. * @param __HANDLE__: CEC handle.
  200. * @retval None
  201. */
  202. #define __HAL_CEC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CEC_STATE_RESET)
  203. /** @brief Checks whether or not the specified CEC interrupt flag is set.
  204. * @param __HANDLE__: specifies the CEC Handle.
  205. * @param __INTERRUPT__: specifies the interrupt to check.
  206. * @arg CEC_FLAG_TERR: Tx Error
  207. * @arg CEC_FLAG_TBTF: Tx Block Transfer Finished
  208. * @arg CEC_FLAG_RERR: Rx Error
  209. * @arg CEC_FLAG_RBTF: Rx Block Transfer Finished
  210. * @retval ITStatus
  211. */
  212. #define __HAL_CEC_GET_FLAG(__HANDLE__, __INTERRUPT__) READ_BIT((__HANDLE__)->Instance->CSR,(__INTERRUPT__))
  213. /** @brief Clears the CEC's pending flags.
  214. * @param __HANDLE__: specifies the CEC Handle.
  215. * @param __FLAG__: specifies the flag to clear.
  216. * This parameter can be any combination of the following values:
  217. * @arg CEC_CSR_TERR: Tx Error
  218. * @arg CEC_CSR_TBTF: Tx Block Transfer Finished
  219. * @arg CEC_CSR_RERR: Rx Error
  220. * @arg CEC_CSR_RBTF: Rx Block Transfer Finished
  221. * @retval none
  222. */
  223. #define __HAL_CEC_CLEAR_FLAG(__HANDLE__, __FLAG__) \
  224. do { \
  225. uint32_t tmp = 0x0; \
  226. tmp = (__HANDLE__)->Instance->CSR & 0x2; \
  227. (__HANDLE__)->Instance->CSR &= (uint32_t)(((~(uint32_t)(__FLAG__)) & 0xFFFFFFFC) | tmp);\
  228. } while(0)
  229. /** @brief Enables the specified CEC interrupt.
  230. * @param __HANDLE__: specifies the CEC Handle.
  231. * @param __INTERRUPT__: The CEC interrupt to enable.
  232. * This parameter can be:
  233. * @arg CEC_IT_IE : Interrupt Enable
  234. * @retval none
  235. */
  236. #define __HAL_CEC_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
  237. /** @brief Disables the specified CEC interrupt.
  238. * @param __HANDLE__: specifies the CEC Handle.
  239. * @param __INTERRUPT__: The CEC interrupt to enable.
  240. * This parameter can be:
  241. * @arg CEC_IT_IE : Interrupt Enable
  242. * @retval none
  243. */
  244. #define __HAL_CEC_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
  245. /** @brief Checks whether or not the specified CEC interrupt is enabled.
  246. * @param __HANDLE__: specifies the CEC Handle.
  247. * @param __INTERRUPT__: The CEC interrupt to enable.
  248. * This parameter can be:
  249. * @arg CEC_IT_IE : Interrupt Enable
  250. * @retval FlagStatus
  251. */
  252. #define __HAL_CEC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) READ_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
  253. /** @brief Enables the CEC device
  254. * @param __HANDLE__: specifies the CEC Handle.
  255. * @retval none
  256. */
  257. #define __HAL_CEC_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CFGR, CEC_CFGR_PE)
  258. /** @brief Disables the CEC device
  259. * @param __HANDLE__: specifies the CEC Handle.
  260. * @retval none
  261. */
  262. #define __HAL_CEC_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, CEC_CFGR_PE)
  263. /** @brief Set Transmission Start flag
  264. * @param __HANDLE__: specifies the CEC Handle.
  265. * @retval none
  266. */
  267. #define __HAL_CEC_FIRST_BYTE_TX_SET(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TSOM)
  268. /** @brief Set Transmission End flag
  269. * @param __HANDLE__: specifies the CEC Handle.
  270. * @retval none
  271. */
  272. #define __HAL_CEC_LAST_BYTE_TX_SET(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TEOM)
  273. /** @brief Get Transmission Start flag
  274. * @param __HANDLE__: specifies the CEC Handle.
  275. * @retval FlagStatus
  276. */
  277. #define __HAL_CEC_GET_TRANSMISSION_START_FLAG(__HANDLE__) READ_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TSOM)
  278. /** @brief Get Transmission End flag
  279. * @param __HANDLE__: specifies the CEC Handle.
  280. * @retval FlagStatus
  281. */
  282. #define __HAL_CEC_GET_TRANSMISSION_END_FLAG(__HANDLE__) READ_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TEOM)
  283. /** @brief Clear OAR register
  284. * @param __HANDLE__: specifies the CEC Handle.
  285. * @retval none
  286. */
  287. #define __HAL_CEC_CLEAR_OAR(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->OAR, CEC_OAR_OA)
  288. /** @brief Set OAR register
  289. * @param __HANDLE__: specifies the CEC Handle.
  290. * @param __ADDRESS__: Own Address value.
  291. * @retval none
  292. */
  293. #define __HAL_CEC_SET_OAR(__HANDLE__,__ADDRESS__) MODIFY_REG((__HANDLE__)->Instance->OAR, CEC_OAR_OA, (__ADDRESS__));
  294. /**
  295. * @}
  296. */
  297. /* Exported functions --------------------------------------------------------*/
  298. /** @addtogroup CEC_Exported_Functions CEC Exported Functions
  299. * @{
  300. */
  301. /** @addtogroup CEC_Exported_Functions_Group1 Initialization and de-initialization functions
  302. * @brief Initialization and Configuration functions
  303. * @{
  304. */
  305. /* Initialization and de-initialization functions ****************************/
  306. HAL_StatusTypeDef HAL_CEC_Init(CEC_HandleTypeDef *hcec);
  307. HAL_StatusTypeDef HAL_CEC_DeInit(CEC_HandleTypeDef *hcec);
  308. void HAL_CEC_MspInit(CEC_HandleTypeDef *hcec);
  309. void HAL_CEC_MspDeInit(CEC_HandleTypeDef *hcec);
  310. /**
  311. * @}
  312. */
  313. /** @addtogroup CEC_Exported_Functions_Group2 Input and Output operation functions
  314. * @brief CEC Transmit/Receive functions
  315. * @{
  316. */
  317. /* IO operation functions *****************************************************/
  318. HAL_StatusTypeDef HAL_CEC_Transmit(CEC_HandleTypeDef *hcec, uint8_t DestinationAddress, uint8_t *pData, uint32_t Size, uint32_t Timeout);
  319. HAL_StatusTypeDef HAL_CEC_Receive(CEC_HandleTypeDef *hcec, uint8_t *pData, uint32_t Timeout);
  320. HAL_StatusTypeDef HAL_CEC_Transmit_IT(CEC_HandleTypeDef *hcec, uint8_t DestinationAddress, uint8_t *pData, uint32_t Size);
  321. HAL_StatusTypeDef HAL_CEC_Receive_IT(CEC_HandleTypeDef *hcec, uint8_t *pData);
  322. uint32_t HAL_CEC_GetReceivedFrameSize(CEC_HandleTypeDef *hcec);
  323. void HAL_CEC_IRQHandler(CEC_HandleTypeDef *hcec);
  324. void HAL_CEC_TxCpltCallback(CEC_HandleTypeDef *hcec);
  325. void HAL_CEC_RxCpltCallback(CEC_HandleTypeDef *hcec);
  326. void HAL_CEC_ErrorCallback(CEC_HandleTypeDef *hcec);
  327. /**
  328. * @}
  329. */
  330. /** @defgroup CEC_Exported_Functions_Group3 Peripheral Control functions
  331. * @brief CEC control functions
  332. * @{
  333. */
  334. /* Peripheral State and Error functions ***************************************/
  335. HAL_CEC_StateTypeDef HAL_CEC_GetState(CEC_HandleTypeDef *hcec);
  336. uint32_t HAL_CEC_GetError(CEC_HandleTypeDef *hcec);
  337. /**
  338. * @}
  339. */
  340. /**
  341. * @}
  342. */
  343. /**
  344. * @}
  345. */
  346. /**
  347. * @}
  348. */
  349. #endif /* defined(STM32F100xB) || defined(STM32F100xE) */
  350. #ifdef __cplusplus
  351. }
  352. #endif
  353. #endif /* __STM32F1xx_HAL_CEC_H */
  354. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/