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

📄 main.c

📁 以TI 公司的OMAP5910为例
💻 C
字号:
//////////////////////////////////////////////////////////////////////////
//            Copyright (C) 2004, Eyoka @ Microunit
//                           All Rights Reserved
//________________________________________________________________________
//
// FILENAME:    main.c
// PROJECT:     High-Resolution Video System On OMAP
// MODULE:      MPU Framework
// DESCRIPTION: Main Entry of project.
// TARGET CPU:  ARM-925T of OMAP5910
// VERSION:     0.61
//________________________________________________________________________
//
// REVISE HISTORY
// DATE         VERSION	AUTHOR  DESCRIPTION
// 2004-12-29	0.61	Eyoka	Build sample pattern.
// 2004-11-11   0.5     Eyoka   SingleCapture driven by GEL
// 2004-11-10   0.4     Eyoka   SingleCapture every 16 frame.
// 2004-11-08   0.3     Eyoka   Preview.
// 2004-11-05   0.2     Eyoka   Camera-LCD.
// 2004-11-05   0.1     Eyoka   Write LCD.
//////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include "sys.h"
#include "display.h"
#include "armdsp.h"

void DSP_Convert(DWORD addrYUV);
void DSP_Filter(void);
void wait(void);

extern void flash_lcd(void);
extern void build_image(WORD* rgb565);
extern void add_noise(WORD* rgb565);

volatile BOOL g_bReadCamera = FALSE;
volatile WORD g_bufTran;
volatile WORD g_bufProc;
volatile WORD g_CaptureFlag = 0;
int g_wait;
//___________________________________________________________________
//
// Main Entrance Function
//___________________________________________________________________
//
void main()
{
	int come_on = 1;
	DWORD nFrameCount = 0;
	WORD buf;
	DWORD addrLCD, addrCamera;
	DWORD sizeJPG;
	size_t size =  320 * 240;

	//150KB per frame
	WORD* img1 = (WORD*)0x10D00000;	// original image
	WORD* img2 = (WORD*)0x10D40000;	// noised image
	WORD* img3 = (WORD*)0x10D80000;	// filtered image
	WORD* img4 = (WORD*)0x10DC0000;
	memset(img1, 0, size*2);
	memset(img2, 0, size*2);
	memset(img3, 0, size*2);

	// initialization
	ARM_READY = 0;
	DSP_READY = 0;
	g_bReadCamera = FALSE;
	SYS_Init();
	Build_YUV2RGB_Table();
//	build_logo(img4);

	// start lcd
	addrLCD = LCD_BUF + 32 + 240*180*2 + 40*2;
	LCD_Enable(TRUE);

//	memcpy((WORD*)(LCD_BUF+32), img4, 240*320*2);
//	Delay(5000000);
//	flash_lcd();
	build_image(img2);
	DrawImage(img2);
	Delay(3000000);

	// start camera
	g_bufTran = CAM_BUF1 >> 16;
	g_bufProc = CAM_BUF2 >> 16;
	SVC_EnableIRQ(TRUE);
	CAM_Start();

	// hand with DSP
	ARM_READY = 1;
	puts("waiting for DSP...");
	while(!DSP_READY)
	{
		;
	}
	INT_L1_Enable(L1EVT_MAILBOX1);

	// start preview
	g_bReadCamera = TRUE;
	INT_L1_Enable(L1EVT_CAMERA);
	while(nFrameCount < 60)
	{
		while(g_bReadCamera)
		{
			;	// wait for reading new frame
		}
		// swap camera buffer
		buf = g_bufTran;
		g_bufTran = g_bufProc;
		g_bufProc = buf;
		// start a new frame
		g_bReadCamera = TRUE;

		// work on last frame
		nFrameCount++;
		addrCamera = (g_bufProc<<16) + 512;
		DSP_Convert(addrCamera);
		add_noise(img1);
		DrawHalf(img1, 40, 30);
		DSP_Filter();
		DrawHalf(img3, 40, 180);
	}
	puts("end");
}

void DSP_Convert(DWORD addrYUV)
{
	addrYUV &= 0x00FFFFFF;
	ADDR1_L = (WORD)addrYUV;
	ADDR1_U = (WORD)(addrYUV>>16);
	JPG_STAT = 1;
	if(!MBX_Write1(0, MBX1CMD_CONVERT))
	{
		puts("[!]DSP_Convert: Mailbox Write Error.");
		return ;
	}

	while(JPG_STAT)
	{
		;
	}
}

void DSP_Filter(void)
{
	JPG_STAT = 1;
	if(!MBX_Write1(0, MBX1CMD_FILTER))
	{
		puts("[!]DSP_Filter: Mailbox Write Error.");
		return ;
	}

	while(JPG_STAT)
	{
		;
	}
}

void wait(void)
{
	g_wait = 1;
	while(g_wait)
	{
		;
	}
}


// the end
//////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -