📄 main.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 + -