📄 image_s_m.c
字号:
/******************************************************************
Program for reg dsp image board *
UART (CPLD) UART_OUT,UATR_IN 2007.09.04
transfer data width is 8 bit *
for cis: 4 seg *
******************************************************************/
#include <stdio.h>
#include <csl.h>
#include <csl_cache.h>
#include <csl_edma.h>
#include <csl_timer.h>
#include <csl_irq.h>
#include "image_s.h"
EDMA_Handle hEdma;
EDMA_Config cfgEdma;
extern far void vectors();
void EraseFlash(void);
void setupInterrupts(void);
void stopEdma(void);
void cis_bright(unsigned char cis_led_bright); // cis_led_bright=0--16
void start_sampling();
void stop_sampling();
void clear_sampling();
void ad0_init();
void ad1_init();
void start_edma();
void pre_process00();
void pre_process01();
void pre_process02();
void pre_process100();
void pre_process101();
void pre_process102();
void frame_process();
void setupInterrupts(void);
void stopEdma(void);
void init_emif( void );
void init_pll( void );
void save_image0();
void save_image1();
void save_image2();
void test(void);
void mem_test(void);
void rs232_out();
unsigned char rs232_in(void);
void disp(int Num);
void init_sys(void);
/**********************************************/
void main(){
init_sys();
while(1)
{
if( get_sampling==1 ){
while( sampling_stop==0 ){
start_sampling();
start_edma();
while( frame_sam_end==0 ) { }
stop_sampling();
frame_process();
// printf("\nf=%3d",frame_counter);
disp(frame_counter);
save_image0();
save_image1();
// save_image2();
frame_counter++;
}
}
}
}
/**********************************************/
//-------------------------------------------
void init_sys(void)
{
init_pll();
init_emif();
tmp00=0x40;
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
CSL_init();
*( unsigned char *)FrameCon1 = FrameWindow+2; //Frame sampling control
*( unsigned char *)FrameCon2 = FrameWindow+1;
*( unsigned char *)FrameCon3 = FrameWindow;
*( unsigned char *)FrameCon4 = FrameWindow + FrameWindow_Offset;
// EraseFlash();
clear_sampling();
stop_sampling();
test();
// mem_test();
// while(1)
ad0_init();
// while(1)
ad1_init();
// while(1)
// rs232_out();
/*
while(1)
{
uart232_out = rs232_in();
rs232_out();
}
*/
// while(1)
cis_bright(BRIGHT);
receive_p=receive_buf;
setupInterrupts(); /* defined below */
get_sampling=1;
sampling_stop=0;
frame_counter=0;
get_sampling=1;
/*
while(1)
{
//test for rs232 working whith extint 5
}
*/
}
//------------------------------------------------
void EraseFlash(void)
{
/* Code to erase AMD29LV400B
* 4MBit (256K X 8) Flash Memory
*/
*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY1;
*(volatile char *)FLASH_ADR2 = (char)FLASH_KEY2;
*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY4;
*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY1;
*(volatile char *)FLASH_ADR2 = (char)FLASH_KEY2;
*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY5;
/* Scan here until erasing completes
*/
// while(GetFlashVal(FLASH_START) != 0xff)
;/* Do Nothing!*/
return;
}
/* Create the EDMA configuration structure for line_buffer transfers */
EDMA_Config cfgEdma = {
EDMA_OPT_RMK(
EDMA_OPT_PRI_LOW,
EDMA_OPT_ESIZE_8BIT,
EDMA_OPT_2DS_NO,
EDMA_OPT_SUM_INC,
EDMA_OPT_2DD_NO,
EDMA_OPT_DUM_INC,
EDMA_OPT_TCINT_YES,
EDMA_OPT_TCC_OF(TCCINTNUM),
EDMA_OPT_LINK_NO,
EDMA_OPT_FS_YES
),
EDMA_SRC_OF(EDMA_SOURCE_ADDR),
EDMA_CNT_OF(IMAGE_WIDTH),
EDMA_DST_OF(line_buffer),
EDMA_IDX_OF(0x00000000),
EDMA_RLD_OF(0x00000000)
};
/************************************************************
parameters and functions for dip and led control
**************************************************************
cis init functions for sampling control
********************************************************/
void cis_bright(unsigned char cis_led_bright) // cis_led_bright=0--16
{
tmp00=cis_led_bright;
ad_com_addr_p=AD_COM_ADDR2;
*ad_com_addr_p=tmp00;
}
void stop_sampling(){
tmp00=0x40;
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
get_sampling=0;
}
void start_sampling(){
tmp00=0xc0;
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
}
//-----------------------------------------
void clear_sampling(){
tmp00=0x0;
ad_com_addr_p=AD_COM_ADDR0;
*ad_com_addr_p=tmp00;
#ifndef Sync_c
*(unsigned char *)SamplingMode_se = WorkMode; //setup WorkMod
//Image Sampling sync. with MCLK,N2
#else
*(unsigned char *)SamplingMode_se = WorkMode | 0x80;
//Image Sampling sync. with internel clk.
#endif
}
//-----------------------------------------
void ad0_init(){
tmp00=0x60;
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
for( i=0;i<8;i++ )
{
tmp00=0x20; //laod=1
*ad_com_addr_p=tmp00; //SCLK=0
value.Tw=ad0_init_com_w[i];
ad_com_addr_p=AD_COM_ADDR3
ad_com_addr_p1=AD_COM_ADDR4;
for( j=0; j<16; j++ )
{
tmp00=value.Tb[1];
tmp00=tmp00 & 0x80;
*ad_com_addr_p=tmp00; //DATA=BIT 7
*ad_com_addr_p1=tmp00; //SCLK
value.Tw=value.Tw<<1;
}
tmp00=0x60; //laod=0
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
}
}
//-----------------------------------------
void ad1_init(){
tmp00=0x60;
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
for( i=0;i<8;i++ )
{
tmp00=0x40; //laod=1
*ad_com_addr_p=tmp00; //SCLK=0
value.Tw=ad1_init_com_w[i];
ad_com_addr_p=AD_COM_ADDR3
ad_com_addr_p1=AD_COM_ADDR4;
for( j=0; j<16; j++ )
{
tmp00=value.Tb[1];
tmp00=tmp00 & 0x80;
*ad_com_addr_p=tmp00; //DATA=BIT 7
*ad_com_addr_p1=tmp00; //SCLK
value.Tw=value.Tw<<1;
}
tmp00=0x60; //laod=0
ad_com_addr_p=AD_COM_ADDR1;
*ad_com_addr_p=tmp00;
}
}
/*****************************************/
void start_edma(){
sampling_stop=0;
line_counter=0;
frame_sam_end=0;
pixel_p0=ImageBuffer0;
pixel_p1=ImageBuffer1;
pixel_p2=ImageBuffer2;
EDMA_clearPram(0x00000000);
hEdma = EDMA_open(EDMA_CHA_EXTINT4, EDMA_OPEN_RESET);
/* EDMA event select int4 */
EDMA_config(hEdma, &cfgEdma);
EDMA_intDisable(TCCINTNUM);
EDMA_intClear(TCCINTNUM);
EDMA_intEnable(TCCINTNUM);
EDMA_enableChannel(hEdma);
IRQ_enable(IRQ_EVT_EDMAINT);
}
#ifndef Led_M
/*-------------------------------------------------
Current input image line preprocess
pre_process00()
get image_buffer0(IMAGE_WIDTH0*IMAGE_HIGHT0),
from current image
-------------------------------------------------*/
void pre_process00(){
if((line_counter>=IMAGE_L_ST0*line_m) &&
(line_counter<(IMAGE_L_ST0+IMAGE_HIGHT0)*line_m) &&
line_counter==((line_counter/line_m)*line_m))
{
inbuff0 = line_buffer+IMAGE_W_ST0*pixel_m;
for ( x=0; x<IMAGE_WIDTH0;x++)
{
*pixel_p0++ = *inbuff0; /*image_buffer1 for 270*150 from HRS image */
inbuff0=inbuff0+pixel_m;
}
inbuff0=pixel_p0-IMAGE_WIDTH0;
CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH0+1), CACHE_WAIT);
}
inbuff0 = line_buffer;
CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));
}
/*------------------------------------------------
get image_buffer1 from HRS image
------------------------------------------------*/
void pre_process01(){
int Image_ln;
Image_ln=line_counter - (line_counter/line_m01)*line_m01;
if(line_counter >= IMAGE_L_ST1 *line_m &&
line_counter < IMAGE_L_ST1 *line_m + IMAGE_HIGHT1*line_m01 )
{
if ( Image_ln == 0 ){
inbuff0 = line_buffer+( IMAGE_W_ST1 + IMAGE_W_ST0 ) * pixel_m;
for ( x=0; x<IMAGE_WIDTH1;x++)
{
*pixel_p1++ = *inbuff0;
inbuff0 = inbuff0 + pixel_m01;
}
}
}
inbuff0=pixel_p1-IMAGE_WIDTH1;
CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH1+1), CACHE_WAIT);
inbuff0 = line_buffer;
CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));
}
/*------------------------------------------------
get image_buffer2 from HRS image
------------------------------------------------*/
void pre_process02(){
int Image_ln;
Image_ln=line_counter - (line_counter/line_m02)*line_m02;
if(line_counter >= IMAGE_L_ST2 *line_m &&
line_counter < IMAGE_L_ST2 *line_m + IMAGE_HIGHT2*line_m02 )
{
if ( Image_ln == 0 ){
inbuff0 = line_buffer+( IMAGE_W_ST2 + IMAGE_W_ST0 ) * pixel_m;
for ( x=0; x<IMAGE_WIDTH2;x++)
{
*pixel_p2++ = *inbuff0; /* image_buffer1 for 270*150 from HRS image*/
inbuff0 = inbuff0 + pixel_m02;
}
}
}
inbuff0=pixel_p2-IMAGE_WIDTH2;
CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH2+1), CACHE_WAIT);
inbuff0 = line_buffer;
CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -