⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 BlackFin与摄像头的接口程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -