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