nu_ccap.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /**************************************************************************//**
  2. * @file nu_ccap.h
  3. * @version V3.00
  4. * @brief M460 Series CCAP Driver Header File
  5. *
  6. * @copyright SPDX-License-Identifier: Apache-2.0
  7. * @copyright Copyright (C) 2021 Nuvoton Technology Corp. All rights reserved.
  8. ******************************************************************************/
  9. #ifndef __NU_CCAP_H__
  10. #define __NU_CCAP_H__
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. /** @addtogroup Standard_Driver Standard Driver
  16. @{
  17. */
  18. /** @addtogroup CCAP_Driver CCAP Driver
  19. @{
  20. */
  21. /** @addtogroup CCAP_EXPORTED_CONSTANTS CCAP Exported Constants
  22. @{
  23. */
  24. /*---------------------------------------------------------------------------------------------------------*/
  25. /* CTL constant definitions */
  26. /*---------------------------------------------------------------------------------------------------------*/
  27. #define CCAP_CTL_CCAPEN (1ul<<CCAP_CTL_CCAPEN_Pos) /*!< CCAP CTL setting for enabling Camera Capture Interface \hideinitializer */
  28. #define CCAP_CTL_PKTEN (1ul<<CCAP_CTL_PKTEN_Pos) /*!< CCAP CTL setting for enabling packet output mode \hideinitializer */
  29. #define CCAP_CTL_PLNEN (1ul<<CCAP_CTL_PLNEN_Pos) /*!< CCAP CTL setting for enabling planar output mode \hideinitializer */
  30. #define CCAP_CTL_SHUTTER (1ul<<CCAP_CTL_SHUTTER_Pos) /*!< CCAP CTL setting for enabling shutter mode \hideinitializer */
  31. #define CCAP_CTL_UPDATE (1ul<<CCAP_CTL_UPDATE_Pos) /*!< CCAP CTL setting for enabling update register at new frame \hideinitializer */
  32. #define CCAP_CTL_RESET (1ul<<CCAP_CTL_VPRST_Pos) /*!< CCAP CTL setting for capture reset \hideinitializer */
  33. #define CCAP_CTL_MY8_MY4 (0ul<<CCAP_CTL_MY8_MY4_Pos) /*!< CCAP CTL setting for 4-bit data I/O interface with Mono \hideinitializer */
  34. #define CCAP_CTL_MY8_MY8 (1ul<<CCAP_CTL_MY8_MY4_Pos) /*!< CCAP CTL setting for 8-bit data I/O interface with Mono \hideinitializer */
  35. /*---------------------------------------------------------------------------------------------------------*/
  36. /* PAR constant definitions */
  37. /*---------------------------------------------------------------------------------------------------------*/
  38. #define CCAP_PAR_INFMT_YUV422 (0ul<<CCAP_PAR_INFMT_Pos) /*!< CCAP PAR setting for Sensor Input Data YUV422 Format \hideinitializer */
  39. #define CCAP_PAR_INFMT_RGB565 (1ul<<CCAP_PAR_INFMT_Pos) /*!< CCAP PAR setting for Sensor Input Data RGB565 Format \hideinitializer */
  40. #define CCAP_PAR_SENTYPE_CCIR601 (0ul<<CCAP_PAR_SENTYPE_Pos) /*!< CCAP PAR setting for Sensor Input CCIR601 Type \hideinitializer */
  41. #define CCAP_PAR_SENTYPE_CCIR656 (1ul<<CCAP_PAR_SENTYPE_Pos) /*!< CCAP PAR setting for Sensor Input CCIR656 Type \hideinitializer */
  42. #define CCAP_PAR_INDATORD_YUYV (0x0ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, YUYV \hideinitializer */
  43. #define CCAP_PAR_INDATORD_YVYU (0x1ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, YVYU \hideinitializer */
  44. #define CCAP_PAR_INDATORD_UYVY (0x2ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, UYVY \hideinitializer */
  45. #define CCAP_PAR_INDATORD_VYUY (0x3ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, VYUY \hideinitializer */
  46. #define CCAP_PAR_INDATORD_RGGB (0x0ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, 0byte: R[0:4] G[5:8], 1byte G[0:2] R[3:8] \hideinitializer */
  47. #define CCAP_PAR_INDATORD_BGGR (0x1ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, 0byte: b[0:4] G[5:8], 1byte G[0:2] R[3:8] \hideinitializer */
  48. #define CCAP_PAR_INDATORD_GBRG (0x2ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, 0byte: G[0:3] G[4:8], 1byte G[0:4] G[5:8] \hideinitializer */
  49. #define CCAP_PAR_INDATORD_GRBG (0x3ul<<CCAP_PAR_INDATORD_Pos) /*!< CCAP PAR setting for Sensor Input Data Order, 0byte: G[0:3] G[4:8], 1byte G[0:4] G[5:8] \hideinitializer */
  50. #define CCAP_PAR_PLNFMT_YUV422 (0x0ul<<CCAP_PAR_PLNFMT_Pos) /*!< CCAP PAR setting for Image Data YUV422P Format Output to System Memory \hideinitializer */
  51. #define CCAP_PAR_PLNFMT_YUV420 (0x1ul<<CCAP_PAR_PLNFMT_Pos) /*!< CCAP PAR setting for Image Data YUV420P Format Output to System Memory \hideinitializer */
  52. #define CCAP_PAR_OUTFMT_YUV422 (0x0ul<<CCAP_PAR_OUTFMT_Pos) /*!< CCAP PAR setting for Image Data YUV422 Format Output to System Memory \hideinitializer */
  53. #define CCAP_PAR_OUTFMT_ONLY_Y (0x1ul<<CCAP_PAR_OUTFMT_Pos) /*!< CCAP PAR setting for Image Data ONLY_Y Format Output to System Memory \hideinitializer */
  54. #define CCAP_PAR_OUTFMT_RGB555 (0x2ul<<CCAP_PAR_OUTFMT_Pos) /*!< CCAP PAR setting for Image Data RGB555 Format Output to System Memory \hideinitializer */
  55. #define CCAP_PAR_OUTFMT_RGB565 (0x3ul<<CCAP_PAR_OUTFMT_Pos) /*!< CCAP PAR setting for Image Data RGB565 Format Output to System Memory \hideinitializer */
  56. #define CCAP_PAR_VSP_LOW (0x0ul<<CCAP_PAR_VSP_Pos) /*!< CCAP PAR setting for Sensor Vsync Polarity \hideinitializer */
  57. #define CCAP_PAR_VSP_HIGH (0x1ul<<CCAP_PAR_VSP_Pos) /*!< CCAP PAR setting for Sensor Vsync Polarity \hideinitializer */
  58. #define CCAP_PAR_HSP_LOW (0x0ul<<CCAP_PAR_HSP_Pos) /*!< CCAP PAR setting for Sensor Hsync Polarity \hideinitializer */
  59. #define CCAP_PAR_HSP_HIGH (0x1ul<<CCAP_PAR_HSP_Pos) /*!< CCAP PAR setting for Sensor Hsync Polarity \hideinitializer */
  60. #define CCAP_PAR_PCLKP_LOW (0x0ul<<CCAP_PAR_PCLKP_Pos) /*!< CCAP PAR setting for Sensor Pixel Clock Polarity \hideinitializer */
  61. #define CCAP_PAR_PCLKP_HIGH (0x1ul<<CCAP_PAR_PCLKP_Pos) /*!< CCAP PAR setting for Sensor Pixel Clock Polarity \hideinitializer */
  62. /*---------------------------------------------------------------------------------------------------------*/
  63. /* INT constant definitions */
  64. /*---------------------------------------------------------------------------------------------------------*/
  65. #define CCAP_INT_VIEN_ENABLE (0x1ul<<CCAP_INT_VIEN_Pos) /*!< VININT setting for Video Frame End Interrupt enable \hideinitializer */
  66. #define CCAP_INT_MEIEN_ENABLE (0x1ul<<CCAP_INT_MEIEN_Pos) /*!< VININT setting for Bus Master Transfer Error Interrupt enable \hideinitializer */
  67. #define CCAP_INT_ADDRMIEN_ENABLE (0x1ul<<CCAP_INT_ADDRMIEN_Pos) /*!< VININT setting for Memory Address Match Interrupt enable \hideinitializer */
  68. /*---------------------------------------------------------------------------------------------------------*/
  69. /* Define Error Code */
  70. /*---------------------------------------------------------------------------------------------------------*/
  71. #define CCAP_INVALID_INT ((int32_t)(0xFFFFFFFF-1))
  72. #define CCAP_INVALID_BUF ((int32_t)(0xFFFFFFFF-2))
  73. #define CCAP_INVALID_PIPE ((int32_t)(0xFFFFFFFF-3))
  74. #define CCAP_TIMEOUT_ERR (-1) /*!< CCAP operation abort due to timeout error \hideinitializer */
  75. /*@}*/ /* end of group CCAP_EXPORTED_CONSTANTS */
  76. extern int32_t g_CCAP_i32ErrCode;
  77. /** @addtogroup CCAP_EXPORTED_FUNCTIONS CCAP Exported Functions
  78. @{
  79. */
  80. /**
  81. * @brief Is CCAP module stopped
  82. *
  83. * @param None
  84. *
  85. * @retval 0 CCAP module is enabled
  86. * @retval 1 CCAP module is disabled(stopped)
  87. *
  88. * @details Check Camera Capture Interface module Enable or Disable(stopped)
  89. * \hideinitializer
  90. */
  91. #define CCAP_IS_STOPPED(ccap) ((ccap->CTL & CCAP_CTL_CCAPEN_Msk)?0:1)
  92. /**
  93. * @brief Clear CCAP flag
  94. *
  95. * @param[in] u32IntMask interrupt flags settings. It could be
  96. * - \ref CCAP_INT_VINTF_Msk
  97. * - \ref CCAP_INT_MEINTF_Msk
  98. * - \ref CCAP_INT_ADDRMINTF_Msk
  99. * - \ref CCAP_INT_MDINTF_Msk
  100. *
  101. * @return None
  102. *
  103. * @details Clear Camera Capture Interface interrupt flag
  104. * \hideinitializer
  105. */
  106. #define CCAP_CLR_INT_FLAG(ccap, u32IntMask) (ccap->INT |= (u32IntMask))
  107. /**
  108. * @brief Get CCAP Interrupt status
  109. *
  110. * @param None
  111. *
  112. * @return CCAP Interrupt Register
  113. *
  114. * @details Get Camera Capture Interface interrupt status.
  115. * \hideinitializer
  116. */
  117. #define CCAP_GET_INT_STS(ccap) (ccap->INT)
  118. #define CCAP_SET_CTL(ccap, u32IntMask) (ccap->CTL |= u32IntMask)
  119. #define CCAP_CLR_CTL(ccap, u32IntMask) (ccap->CTL &= ~u32IntMask)
  120. void CCAP_Open(CCAP_T *ccap, uint32_t u32InFormat, uint32_t u32OutFormat);
  121. void CCAP_SetCroppingWindow(CCAP_T *ccap, uint32_t u32VStart, uint32_t u32HStart, uint32_t u32Height, uint32_t u32Width);
  122. void CCAP_SetPacketBuf(CCAP_T *ccap, uint32_t u32Address);
  123. void CCAP_Close(CCAP_T *ccap);
  124. void CCAP_EnableInt(CCAP_T *ccap, uint32_t u32IntMask);
  125. void CCAP_DisableInt(CCAP_T *ccap, uint32_t u32IntMask);
  126. void CCAP_Start(CCAP_T *ccap);
  127. void CCAP_Stop(CCAP_T *ccap, uint32_t u32FrameComplete);
  128. void CCAP_SetPacketScaling(CCAP_T *ccap, uint32_t u32VNumerator, uint32_t u32VDenominator, uint32_t u32HNumerator, uint32_t u32HDenominator);
  129. void CCAP_SetPacketStride(CCAP_T *ccap, uint32_t u32Stride);
  130. void CCAP_EnableMono(CCAP_T *ccap, uint32_t u32Interface);
  131. void CCAP_DisableMono(CCAP_T *ccap);
  132. void CCAP_EnableLumaYOne(CCAP_T *ccap, uint32_t u32th);
  133. void CCAP_DisableLumaYOne(CCAP_T *ccap);
  134. void CCAP_SetPlanarYBuf(CCAP_T *ccap, uint32_t u32Address);
  135. void CCAP_SetPlanarUBuf(CCAP_T *ccap, uint32_t u32Address);
  136. void CCAP_SetPlanarVBuf(CCAP_T *ccap, uint32_t u32Address);
  137. void CCAP_SetPlanarScaling(CCAP_T *ccap, uint32_t u32VNumerator, uint32_t u32VDenominator, uint32_t u32HNumerator, uint32_t u32HDenominator);
  138. void CCAP_SetPlanarStride(CCAP_T *ccap, uint32_t u32Stride);
  139. /*@}*/ /* end of group CCAP_EXPORTED_FUNCTIONS */
  140. /*@}*/ /* end of group CCAP_Driver */
  141. /*@}*/ /* end of group Standard_Driver */
  142. #ifdef __cplusplus
  143. }
  144. #endif
  145. #endif //__NU_CCAP_H__