📄 main.c
字号:
#include <environment.h>
#include <stdio.h>
#include <conio.h>
#include <services/services.h>
#include <drivers/adi_dev.h>
#include <cycle_count_bf.h>
#include <stdlib.h>
#include "../../../../driver/src/common/GPIOconfig.h"
#include "../../../../driver/src/common/UARTconfig.h"
#include "../../../../driver/src/common/PPIconfig.h"
#include "../../../../driver/src/common/CAMconfig.h"
#include "../../../../driver/src/common/CAMdefault.h"
//#include "clock.h"
#include "../../../../blacksheep/common/term/xmodemUART-buf.h"
#include "../../../../blacksheep/common/jpeg/dma_out.h"
#include "../../../../blacksheep/common/jpeg/JPEGencoder.h"
#if defined (__ADSPBF533__)
#include "../../../../driver/src/bf533/gpio_global.h"
#elif defined (__ADSPBF537__)
#include "../../../../driver/src/bf537/gpio_global.h"
#elif defined (__ADSPBF561__)
#include "../../../../driver/src/bf561/gpio_global.h"
#else
#error "processor not supported"
#endif
/*
#define CORE_CLK 525000000
#define SYSTEM_CLK 131250000
#define CLKIN 25000000
*/
// ********************************************************************************************
// PLEASE TAKE IN CONSIDER THAT IN RAW MODE THE EFFECTIVE RESOLUTION IS DIVIDED BY 2 IN X AND Y.
// THIS IS CAUSED BY THE DEMOSAICING PROCESS DURING CONVERTION TO YUV422.
// SO THE EFFECTIVE RESOLUTION BY UXGA SELECTING THE RAW FORMAT IS 800 X 600.
// ********************************************************************************************
/* ********** PLEASE CONFIGURE ************************ */
// SELECT THE CAMERA CONNECTED -------------------------
//#define OV7660
#define OV2630
//#define OV2640
// -----------------------------------------------------
// SELECT THE RESOLUTION -------------------------------
//#define VGA // for OV7660 only
//#define QVGA // for OV7660 only
#define UXGA // for OV2640 and OV2630 only
// -----------------------------------------------------
// FOR OV2640 ONLY: SELECT THE OUTPUT MODE -------------
#define RAW
//#define YUV
//#define RGB565
// -----------------------------------------------------
// SELECT THE FILE FORMAT USED -------------------------
//#define BMP
#define JPEG
#define JPEG_QUALITY 75
// -----------------------------------------------------
// SELECT TARGET BOARD ---------------------------------
//#define DEV_BF5xx // uncomment this for DEV-BF5xx V<3.0
//#define DEV_BF5xx_V3_0 // uncomment this for DEV-BF5xx V>=3.0
//#define EXT_BF5xx_CAMERA // uncomment this for EXT-BF5xx-Camera V<2.0
#define EXT_BF5xx_CAMERA_V2_0 // uncomment this for EXT-BF5xx-Camera V>=2.0
// -----------------------------------------------------
/* *************************************************** */
#if defined (OV2640)
#undef QVGA
#undef VGA
#define UXGA
#elif defined (OV7660)
#undef UXGA
#undef SXGA
#elif defined (OV2630)
#undef YUV
#undef RGB565
#define RAW
#undef VGA
#undef QVGA
#define UXGA
#else
#error "camera module not supported"
#endif
// camera resolution
#if defined(QVGA)
#define X_SIZE 320
#define Y_SIZE 240
#elif defined (VGA)
#define X_SIZE 640
#define Y_SIZE 480
#elif defined (UXGA)
#define X_SIZE 1600
#define Y_SIZE 1200
#else
#error "please select a valid resolution"
#endif
// gpios where camera sccb is connected ------------------------
#if defined (DEV_BF5xx) || defined (EXT_BF5xx_CAMERA)
#if defined (__ADSPBF533__)
#define CAM_SIO_C_PIN _PF11
#define CAM_SIO_D_PIN _PF10
#elif defined (__ADSPBF537__)
#define CAM_SIO_C_PIN _PG8
#define CAM_SIO_D_PIN _PG9
#elif defined (__ADSPBF561__)
#if PPI == 0
#define CAM_SIO_C_PIN _PF40
#define CAM_SIO_D_PIN _PF41
#else
#define CAM_SIO_C_PIN _PF32
#define CAM_SIO_D_PIN _PF33
#endif
#endif
#elif defined (EXT_BF5xx_CAMERA_V2_0)
#if defined (__ADSPBF533__)
#define CAM_SIO_C_PIN _PF4
#define CAM_SIO_D_PIN _PF7
#elif defined (__ADSPBF537__)
#define CAM_SIO_C_PIN _PG15
#define CAM_SIO_D_PIN _PG12
#elif defined (__ADSPBF561__)
#if PPI == 0
#define CAM_SIO_C_PIN _PF47
#define CAM_SIO_D_PIN _PF44
#else
#define CAM_SIO_C_PIN _PF34
#define CAM_SIO_D_PIN _PF35
#endif
#endif
#elif defined (DEV_BF5xx_V3_0)
#if defined (__ADSPBF533__)
#define CAM_SIO_C_PIN _PF7
#define CAM_SIO_D_PIN _PF6
#elif defined (__ADSPBF537__)
#define CAM_SIO_C_PIN _PG12
#define CAM_SIO_D_PIN _PG13
#elif defined (__ADSPBF561__)
#if PPI == 0
#define CAM_SIO_C_PIN _PF44
#define CAM_SIO_D_PIN _PF45
#else
#define CAM_SIO_C_PIN _PF34
#define CAM_SIO_D_PIN _PF35
#endif
#endif
#else
#error "target board not supported"
#endif
// ---------------------------------------------------------------
#define CAM_PWDN_PIN 0 // not connected
#if defined (OV7660)
#define CAM_DEVICE_ADDRESS 0x42 // for OV7645, OV7648, OV7660
#elif defined (OV2640) || defined (OV2630)
#define CAM_DEVICE_ADDRESS 0x60 // for OV2630, OV2640
#else
#error "camera module not supported"
#endif
// baudrate for the uart
#define UART_BAUD_RATE 115200
// 2000 ms capture timeout
#define CAPTURE_TIMEOUT 2000
extern unsigned long out_extrn[NUM_IM_EXT];
// flag to signal end of image transfer
bool bCapturingFinished = false;
// interrupt handler for PPI interrupt
void PPIHandler(void *pa_pClientArg) {
// set flag to signal end of image transfer
bCapturingFinished = true;
}
// memory for the adi interrupt manager
#pragma align(4)
static unsigned char intmgr_storage[(ADI_INT_SECONDARY_MEMORY * 8)];
void main (void) {
unsigned short nXsize = X_SIZE;
unsigned short nYsize = Y_SIZE;
int erCode = 0;
char sMessage[255];
unsigned long vco, cclk, sclk;
// initialize the adi interrupt manager
unsigned long critical_reg;
unsigned long response_count;
if (adi_int_Init (intmgr_storage, sizeof(intmgr_storage), &response_count, &critical_reg) != ADI_INT_RESULT_SUCCESS) {
// error initialising interrupt manager, so stop executing
while (1);
}
#if defined (__ADSPBF537__)
ADI_PWR_COMMAND_PAIR PowerTable [] = { // configuration table for power management
{ ADI_PWR_CMD_SET_PROC_VARIANT, (void*)ADI_PWR_PROC_BF537SKBC600 },
{ ADI_PWR_CMD_SET_PACKAGE, (void*)ADI_PWR_PACKAGE_MBGA },
{ ADI_PWR_CMD_SET_VDDEXT, (void*)ADI_PWR_VDDEXT_330 },
{ ADI_PWR_CMD_SET_CLKIN, (void*)CLKIN },
{ ADI_PWR_CMD_END, NULL },
};
#elif defined (__ADSPBF533__)
ADI_PWR_COMMAND_PAIR PowerTable [] = { // configuration table for power management
{ ADI_PWR_CMD_SET_PROC_VARIANT, (void*)ADI_PWR_PROC_BF533SKBC600 },
{ ADI_PWR_CMD_SET_PACKAGE, (void*)ADI_PWR_PACKAGE_MBGA },
{ ADI_PWR_CMD_SET_VDDEXT, (void*)ADI_PWR_VDDEXT_330 },
{ ADI_PWR_CMD_SET_CLKIN, (void*)CLKIN },
{ ADI_PWR_CMD_END, NULL },
};
#elif defined (__ADSPBF561__)
ADI_PWR_COMMAND_PAIR PowerTable [] = { // configuration table for power management
{ ADI_PWR_CMD_SET_PROC_VARIANT, (void*)ADI_PWR_PROC_BF561SBB600 },
{ ADI_PWR_CMD_SET_PACKAGE, (void*)ADI_PWR_PACKAGE_MBGA },
{ ADI_PWR_CMD_SET_VDDEXT, (void*)ADI_PWR_VDDEXT_330 },
{ ADI_PWR_CMD_SET_CLKIN, (void*)CLKIN },
{ ADI_PWR_CMD_END, NULL },
};
#else
#error "processor not supported"
#endif
// initialize power management
if (adi_pwr_Init(PowerTable) != ADI_DEV_RESULT_SUCCESS) {
while (1);
}
//set optimal frequencies
if (adi_pwr_SetFreq(525, 132, ADI_PWR_DF_ON) != ADI_DEV_RESULT_SUCCESS) {
while (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -