AT32F435_437_Firmware_Library/libraries/drivers/inc/at32f435_437_dvp.h

623 lines
18 KiB
C

/**
**************************************************************************
* @file at32f435_437_dvp.h
* @version v2.0.9
* @date 2022-06-28
* @brief at32f435_437 dvp header file
**************************************************************************
* Copyright notice & Disclaimer
*
* The software Board Support Package (BSP) that is made available to
* download from Artery official website is the copyrighted work of Artery.
* Artery authorizes customers to use, copy, and distribute the BSP
* software and its related documentation for the purpose of design and
* development in conjunction with Artery microcontrollers. Use of the
* software is governed by this copyright notice and the following disclaimer.
*
* THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
* GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
* TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
* STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
* INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
*
**************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __AT32F435_437_DVP_H
#define __AT32F435_437_DVP_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "at32f435_437.h"
/** @addtogroup AT32F435_437_periph_driver
* @{
*/
/** @addtogroup DVP
* @{
*/
/** @defgroup DVP_event_flags_definition
* @brief dvp event flag
* @{
*/
#define DVP_CFD_EVT_FLAG ((uint32_t)0x00000001) /*!< capture frame done event status flag */
#define DVP_OVR_EVT_FLAG ((uint32_t)0x00000002) /*!< data fifo overrun event status flag */
#define DVP_ESE_EVT_FLAG ((uint32_t)0x00000004) /*!< embedded synchronization error event status flag */
#define DVP_VS_EVT_FLAG ((uint32_t)0x00000008) /*!< vertical synchonization event status flag */
#define DVP_HS_EVT_FLAG ((uint32_t)0x00000010) /*!< horizontal synchonization event status flag */
/**
* @}
*/
/** @defgroup DVP_interrupt_flags_definition
* @brief dvp interrupt flag
* @{
*/
#define DVP_CFD_INT_FLAG ((uint32_t)0x80000001) /*!< capture frame done interrupt status flag */
#define DVP_OVR_INT_FLAG ((uint32_t)0x80000002) /*!< data fifo overrun interrupt status flag */
#define DVP_ESE_INT_FLAG ((uint32_t)0x80000004) /*!< embedded synchronization error interrupt status flag */
#define DVP_VS_INT_FLAG ((uint32_t)0x80000008) /*!< vertical synchonization interrupt status flag */
#define DVP_HS_INT_FLAG ((uint32_t)0x80000010) /*!< horizontal synchonization interrupt status flag */
/**
* @}
*/
/** @defgroup DVP_interrupts_definition
* @brief dvp interrupt
* @{
*/
#define DVP_CFD_INT ((uint32_t)0x00000001) /*!< capture frame done interrupt */
#define DVP_OVR_INT ((uint32_t)0x00000002) /*!< data fifo overrun interrupt */
#define DVP_ESE_INT ((uint32_t)0x00000004) /*!< embedded synchronization error interrupt */
#define DVP_VS_INT ((uint32_t)0x00000008) /*!< vertical synchonization interrupt */
#define DVP_HS_INT ((uint32_t)0x00000010) /*!< horizontal synchonization interrupt */
/**
* @}
*/
/** @defgroup DVP_exported_types
* @{
*/
/**
* @brief dvp cfm type
*/
typedef enum
{
DVP_CAP_FUNC_MODE_CONTINUOUS = 0x00,
DVP_CAP_FUNC_MODE_SINGLE = 0x01
} dvp_cfm_type;
/**
* @brief dvp sm type
*/
typedef enum
{
DVP_SYNC_MODE_HARDWARE = 0x00,
DVP_SYNC_MODE_EMBEDDED = 0x01
} dvp_sm_type;
/**
* @brief dvp ckp type
*/
typedef enum
{
DVP_CLK_POLARITY_RISING = 0x00,
DVP_CLK_POLARITY_FALLING = 0x01
} dvp_ckp_type;
/**
* @brief dvp hsp type
*/
typedef enum
{
DVP_HSYNC_POLARITY_HIGH = 0x00,
DVP_HSYNC_POLARITY_LOW = 0x01
} dvp_hsp_type;
/**
* @brief dvp vsp type
*/
typedef enum
{
DVP_VSYNC_POLARITY_LOW = 0x00,
DVP_VSYNC_POLARITY_HIGH = 0x01
} dvp_vsp_type;
/**
* @brief dvp bfrc type
*/
typedef enum
{
DVP_BFRC_ALL = 0x00,
DVP_BFRC_HALF = 0x01,
DVP_BFRC_QUARTER = 0x02
} dvp_bfrc_type;
/**
* @brief dvp pdl type
*/
typedef enum
{
DVP_PIXEL_DATA_LENGTH_8 = 0x00,
DVP_PIXEL_DATA_LENGTH_10 = 0x01,
DVP_PIXEL_DATA_LENGTH_12 = 0x02,
DVP_PIXEL_DATA_LENGTH_14 = 0x03
} dvp_pdl_type;
/**
* @brief dvp pcdc type
*/
typedef enum
{
DVP_PCDC_ALL = 0x00,
DVP_PCDC_ONE_IN_TWO = 0x01,
DVP_PCDC_ONE_IN_FOUR = 0x02,
DVP_PCDC_TWO_IN_FOUR = 0x03
} dvp_pcdc_type;
/**
* @brief dvp pcds type
*/
typedef enum
{
DVP_PCDS_CAP_FIRST = 0x00,
DVP_PCDS_DROP_FIRST = 0x01
} dvp_pcds_type;
/**
* @brief dvp lcdc type
*/
typedef enum
{
DVP_LCDC_ALL = 0x00,
DVP_LCDC_ONE_IN_TWO = 0x01
} dvp_lcdc_type;
/**
* @brief dvp lcds type
*/
typedef enum
{
DVP_LCDS_CAP_FIRST = 0x00,
DVP_LCDS_DROP_FIRST = 0x01
} dvp_lcds_type;
/**
* @brief dvp status basic type
*/
typedef enum
{
DVP_STATUS_HSYN = 0x00,
DVP_STATUS_VSYN = 0x01,
DVP_STATUS_OFNE = 0x02
} dvp_status_basic_type;
/**
* @brief dvp pcdes type
*/
typedef enum
{
DVP_PCDES_CAP_FIRST = 0x00,
DVP_PCDES_DROP_FIRST = 0x01
} dvp_pcdes_type;
/**
* @brief dvp efdf type
*/
typedef enum
{
DVP_EFDF_BYPASS = 0x00,
DVP_EFDF_YUV422_UYVY = 0x04,
DVP_EFDF_YUV422_YUYV = 0x05,
DVP_EFDF_RGB565_555 = 0x06,
DVP_EFDF_Y8 = 0x07
} dvp_efdf_type;
/**
* @brief dvp idus type
*/
typedef enum
{
DVP_IDUS_MSB = 0x00,
DVP_IDUS_LSB = 0x01
} dvp_idus_type;
/**
* @brief dvp dmabt type
*/
typedef enum
{
DVP_DMABT_SINGLE = 0x00,
DVP_DMABT_BURST = 0x01
} dvp_dmabt_type;
/**
* @brief dvp hseid type
*/
typedef enum
{
DVP_HSEID_LINE_END = 0x00,
DVP_HSEID_LINE_START = 0x01
} dvp_hseid_type;
/**
* @brief dvp vseid type
*/
typedef enum
{
DVP_VSEID_FRAME_END = 0x00,
DVP_VSEID_FRMAE_START = 0x01
} dvp_vseid_type;
/**
* @brief dvp idun type
*/
typedef enum
{
DVP_IDUN_0 = 0x00,
DVP_IDUN_2 = 0x01,
DVP_IDUN_4 = 0x02,
DVP_IDUN_6 = 0x03
} dvp_idun_type;
typedef struct
{
/**
* @brief dvp ctrl register, offset:0x00
*/
union
{
__IO uint32_t ctrl;
struct
{
__IO uint32_t cap : 1; /* [0] */
__IO uint32_t cfm : 1; /* [1] */
__IO uint32_t crp : 1; /* [2] */
__IO uint32_t jpeg : 1; /* [3] */
__IO uint32_t sm : 1; /* [4] */
__IO uint32_t ckp : 1; /* [5] */
__IO uint32_t hsp : 1; /* [6] */
__IO uint32_t vsp : 1; /* [7] */
__IO uint32_t bfrc : 2; /* [9:8] */
__IO uint32_t pdl : 2; /* [11:10] */
__IO uint32_t reserved1 : 2; /* [13:12] */
__IO uint32_t ena : 1; /* [14] */
__IO uint32_t reserved2 : 1; /* [15] */
__IO uint32_t pcdc : 2; /* [17:16] */
__IO uint32_t pcds : 1; /* [18] */
__IO uint32_t lcdc : 1; /* [19] */
__IO uint32_t lcds : 1; /* [20] */
__IO uint32_t : 11;/* [31:21] */
} ctrl_bit;
};
/**
* @brief dvp sts register, offset:0x04
*/
union
{
__IO uint32_t sts;
struct
{
__IO uint32_t hsyn : 1; /* [0] */
__IO uint32_t vsyn : 1; /* [1] */
__IO uint32_t ofne : 1; /* [2] */
__IO uint32_t reserved1 : 29;/* [31:3] */
} sts_bit;
};
/**
* @brief dvp ests register, offset:0x08
*/
union
{
__IO uint32_t ests;
struct
{
__IO uint32_t cfdes : 1; /* [0] */
__IO uint32_t ovres : 1; /* [1] */
__IO uint32_t esees : 1; /* [2] */
__IO uint32_t vses : 1; /* [3] */
__IO uint32_t hses : 1; /* [4] */
__IO uint32_t reserved1 : 27;/* [31:5] */
} ests_bit;
};
/**
* @brief dvp ier register, offset:0x0C
*/
union
{
__IO uint32_t ier;
struct
{
__IO uint32_t cfdie : 1; /* [0] */
__IO uint32_t ovrie : 1; /* [1] */
__IO uint32_t eseie : 1; /* [2] */
__IO uint32_t vsie : 1; /* [3] */
__IO uint32_t hsie : 1; /* [4] */
__IO uint32_t reserved1 : 27;/* [31:5] */
} ier_bit;
};
/**
* @brief dvp ists register, offset:0x10
*/
union
{
__IO uint32_t ists;
struct
{
__IO uint32_t cfdis : 1; /* [0] */
__IO uint32_t ovris : 1; /* [1] */
__IO uint32_t eseis : 1; /* [2] */
__IO uint32_t vsis : 1; /* [3] */
__IO uint32_t hsis : 1; /* [4] */
__IO uint32_t reserved1 : 27;/* [31:5] */
} ists_bit;
};
/**
* @brief dvp iclr register, offset:0x14
*/
union
{
__IO uint32_t iclr;
struct
{
__IO uint32_t cfdic : 1; /* [0] */
__IO uint32_t ovric : 1; /* [1] */
__IO uint32_t eseic : 1; /* [2] */
__IO uint32_t vsic : 1; /* [3] */
__IO uint32_t hsic : 1; /* [4] */
__IO uint32_t reserved1 : 27;/* [31:5] */
} iclr_bit;
};
/**
* @brief dvp scr register, offset:0x18
*/
union
{
__IO uint32_t scr;
struct
{
__IO uint32_t fmsc : 8; /* [7:0] */
__IO uint32_t lnsc : 8; /* [15:8] */
__IO uint32_t lnec : 8; /* [23:16] */
__IO uint32_t fmec : 8; /* [31:24] */
} scr_bit;
};
/**
* @brief dvp sur register, offset:0x1C
*/
union
{
__IO uint32_t sur;
struct
{
__IO uint32_t fmsu : 8; /* [7:0] */
__IO uint32_t lnsu : 8; /* [15:8] */
__IO uint32_t lneu : 8; /* [23:16] */
__IO uint32_t fmeu : 8; /* [31:24] */
} sur_bit;
};
/**
* @brief dvp cwst register, offset:0x20
*/
union
{
__IO uint32_t cwst;
struct
{
__IO uint32_t chstr : 14;/* [13:0] */
__IO uint32_t reserved1 : 2; /* [15:14] */
__IO uint32_t cvstr : 13;/* [28:16] */
__IO uint32_t reserved2 : 3; /* [31:29] */
} cwst_bit;
};
/**
* @brief dvp cwsz register, offset:0x24
*/
union
{
__IO uint32_t cwsz;
struct
{
__IO uint32_t chnum : 14;/* [13:0] */
__IO uint32_t reserved1 : 2; /* [15:14] */
__IO uint32_t cvnum : 14;/* [29:16] */
__IO uint32_t reserved2 : 2; /* [31:30] */
} cwsz_bit;
};
/**
* @brief dvp dt register, offset:0x28
*/
union
{
__IO uint32_t dt;
struct
{
__IO uint32_t dr0 : 8; /* [7:0] */
__IO uint32_t dr1 : 8; /* [15:8] */
__IO uint32_t dr2 : 8; /* [23:16] */
__IO uint32_t dr3 : 8; /* [31:24] */
} dt_bit;
};
/**
* @brief dvp reserved1 register, offset:0x2C-0x3C
*/
__IO uint32_t reserved1[5];
/**
* @brief dvp actrl register, offset:0x40
*/
union
{
__IO uint32_t actrl;
struct
{
__IO uint32_t eisre : 1; /* [0] */
__IO uint32_t efrce : 1; /* [1] */
__IO uint32_t mibe : 1; /* [2] */
__IO uint32_t pcdes : 1; /* [3] */
__IO uint32_t efdf : 3; /* [6:4] */
__IO uint32_t reserved1 : 1; /* [7] */
__IO uint32_t idun : 2; /* [9:8] */
__IO uint32_t idus : 1; /* [10] */
__IO uint32_t reserved2 : 1; /* [11] */
__IO uint32_t dmabt : 1; /* [12] */
__IO uint32_t reserved3 : 1; /* [13] */
__IO uint32_t reserved4 : 1; /* [14] */
__IO uint32_t reserved5 : 1; /* [15] */
__IO uint32_t hseid : 1; /* [16] */
__IO uint32_t vseid : 1; /* [17] */
__IO uint32_t reserved6 : 1; /* [18] */
__IO uint32_t reserved7 : 2; /* [20:19] */
__IO uint32_t reserved8 : 11;/* [31:21] */
} actrl_bit;
};
/**
* @brief dvp reserved2 register, offset:0x44
*/
__IO uint32_t reserved2;
/**
* @brief dvp hscf register, offset:0x48
*/
union
{
__IO uint32_t hscf;
struct
{
__IO uint32_t hsrss : 13;/* [12:0] */
__IO uint32_t reserved1 : 3; /* [15:13] */
__IO uint32_t hsrts : 13;/* [28:16] */
__IO uint32_t reserved2 : 3; /* [31:29] */
} hscf_bit;
};
/**
* @brief dvp vscf register, offset:0x4C
*/
union
{
__IO uint32_t vscf;
struct
{
__IO uint32_t vsrss : 13;/* [12:0] */
__IO uint32_t reserved1 : 3; /* [15:13] */
__IO uint32_t vsrts : 13;/* [28:16] */
__IO uint32_t reserved2 : 3; /* [31:29] */
} vscf_bit;
};
/**
* @brief dvp frf register, offset:0x50
*/
union
{
__IO uint32_t frf;
struct
{
__IO uint32_t efrcsf : 5; /* [4:0] */
__IO uint32_t reserved1 : 3; /* [7:5] */
__IO uint32_t efrctf : 5; /* [12:8] */
__IO uint32_t reserved2 : 19;/* [31:13] */
} frf_bit;
};
/**
* @brief dvp bth register, offset:0x54
*/
union
{
__IO uint32_t bth;
struct
{
__IO uint32_t mibthd : 8; /* [7:0] */
__IO uint32_t reserved1 : 24;/* [31:8] */
} bth_bit;
};
} dvp_type;
/**
* @}
*/
#define DVP ((dvp_type *) DVP_BASE)
/** @defgroup DVP_exported_functions
* @{
*/
void dvp_reset(void);
void dvp_capture_enable(confirm_state new_state);
void dvp_capture_enable(confirm_state new_state);
void dvp_capture_mode_set(dvp_cfm_type cap_mode);
void dvp_window_crop_enable(confirm_state new_state);
void dvp_window_crop_set(uint16_t crop_x, uint16_t crop_y, uint16_t crop_w, uint16_t crop_h, uint8_t bytes);
void dvp_jpeg_enable(confirm_state new_state);
void dvp_sync_mode_set(dvp_sm_type sync_mode);
void dvp_sync_code_set(uint8_t fmsc, uint8_t fmec, uint8_t lnsc, uint8_t lnec);
void dvp_sync_unmask_set(uint8_t fmsu, uint8_t fmeu, uint8_t lnsu, uint8_t lneu);
void dvp_pclk_polarity_set(dvp_ckp_type eage);
void dvp_hsync_polarity_set(dvp_hsp_type hsync_pol);
void dvp_vsync_polarity_set(dvp_vsp_type vsync_pol);
void dvp_basic_frame_rate_control_set(dvp_bfrc_type dvp_bfrc);
void dvp_pixel_data_length_set(dvp_pdl_type dvp_pdl);
void dvp_enable(confirm_state new_state);
void dvp_zoomout_select(dvp_pcdes_type dvp_pcdes);
void dvp_zoomout_set(dvp_pcdc_type dvp_pcdc, dvp_pcds_type dvp_pcds, dvp_lcdc_type dvp_lcdc, dvp_lcds_type dvp_lcds);
flag_status dvp_basic_status_get(dvp_status_basic_type dvp_status_basic);
void dvp_interrupt_enable(uint32_t dvp_int, confirm_state new_state);
flag_status dvp_flag_get(uint32_t flag);
void dvp_flag_clear(uint32_t flag);
void dvp_enhanced_scaling_resize_enable(confirm_state new_state);
void dvp_enhanced_scaling_resize_set(uint16_t src_w, uint16_t des_w, uint16_t src_h, uint16_t des_h);
void dvp_enhanced_framerate_set(uint16_t efrcsf, uint16_t efrctf, confirm_state new_state);
void dvp_monochrome_image_binarization_set(uint8_t mibthd, confirm_state new_state);
void dvp_enhanced_data_format_set(dvp_efdf_type dvp_efdf);
void dvp_input_data_unused_set(dvp_idus_type dvp_idus, dvp_idun_type dvp_idun);
void dvp_dma_burst_set(dvp_dmabt_type dvp_dmabt);
void dvp_sync_event_interrupt_set(dvp_hseid_type dvp_hseid, dvp_vseid_type dvp_vseid);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif