|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
|
|
///-------------------------------------------------------------------------
|
|
|
|
/// @file bsp_gc6133.c.c
|
|
|
|
/// @brief bsp @ driver config
|
|
|
|
///-------------------------------------------------------------------------
|
|
|
|
/// @version 1.0
|
|
|
|
/// @author CC
|
|
|
|
/// @date 20180331
|
|
|
|
/// @note cc_AS_stc02
|
|
|
|
///-------------------------------------------------------------------------
|
|
|
|
/// @version 1.2
|
|
|
|
/// @author CC
|
|
|
|
/// @date 20180703
|
|
|
|
/// @note cc_AS_stc02
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include "bsp_cam_isr.h"
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef doc_98989
|
|
|
|
vs /```24.8ms````\_______________________________..1.16s..._____________________________________________/```````````\__________
|
|
|
|
hs /\————————/\_2.14MS_/\____/\____/\____ ...... __/\____/\____/\__480个__/\____/\____/\____/\————————/\
|
|
|
|
|
|
|
|
hs /``\________________________hs______________________/``\
|
|
|
|
pclk |||||||||||||||||||||||||||||||||||||||||||||||640
|
|
|
|
#endif ///doc_98989
|
|
|
|
|
|
|
|
void L0_VSYNCS_Isr(void) D_SERVE_VS
|
|
|
|
{////找到一帧数据的开头:第一行
|
|
|
|
ts_task_GC032a.HS_max = ts_clk.hs_n;
|
|
|
|
if(ts_task_GC032a.m > D_480_div )
|
|
|
|
{
|
|
|
|
ts_task_GC032a.m = 0;
|
|
|
|
ts_task_GC032a.vs_ok = 1;
|
|
|
|
}else
|
|
|
|
{
|
|
|
|
ts_task_GC032a.m ++;
|
|
|
|
}
|
|
|
|
ts_task_GC032a.VS_max ++;
|
|
|
|
ts_clk.hs_n = 0;
|
|
|
|
D_HSYNCS_open();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void L0_HSYNCS_Isr(void) D_SERVE_HS/// using 1
|
|
|
|
{///hs 下沿有效
|
|
|
|
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
|
|
|
|
ET0 = 0;
|
|
|
|
ts_clk.hs_n ++;
|
|
|
|
ts_task_GC032a.hs_ok = 1;
|
|
|
|
ts_task_GC032a.pclk_max = ts_clk.pclk_n;
|
|
|
|
D_LED1_REV();//////// if(0)////
|
|
|
|
D_PCLK_open();
|
|
|
|
ts_clk.pclk_n = 0;
|
|
|
|
ET0 = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
//// 读取不为0x80的数据
|
|
|
|
//// 放入s_task_GC032A.buf
|
|
|
|
////D_pclk_per_hs 数量满足后 s_task_GC032A.status = 1;
|
|
|
|
void l0_PCLK_Isr(void) D_SERVE_CLK /// using 1
|
|
|
|
{///PCLK
|
|
|
|
//D_LED2_REV();
|
|
|
|
// D_LED2_ON();
|
|
|
|
/// DR_Dat = P2;
|
|
|
|
/// if(DR_Dat != 0X80)//////////
|
|
|
|
{
|
|
|
|
///ts_task_GC032a.buf[0][ts_task_GC032a.pclk_n] = DR_Dat;///
|
|
|
|
ts_task_GC032a.buf[0][ts_clk.pclk_n] = P2;
|
|
|
|
|
|
|
|
ts_clk.pclk_n++;//!
|
|
|
|
|
|
|
|
if(P37)
|
|
|
|
{
|
|
|
|
D_PCLK_close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// D_LED2_OFF();
|
|
|
|
/// ts_task_GC032a.pclk_n ++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void L0_cam_INT_init(void)
|
|
|
|
{
|
|
|
|
///D_VSYNCS_open();
|
|
|
|
/// D_HSYNCS_open();//BITN_1(INT_CLKO, INT_EX2);//使能INT2中断
|
|
|
|
D_HSYNCS_close();
|
|
|
|
D_PCLK_init();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
void L0_HSYNCS_Isr(void) D_SERVE_HS/// using 1
|
|
|
|
{///hs 下沿有效
|
|
|
|
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
|
|
|
|
///EA = 0;
|
|
|
|
ET0 = 0;
|
|
|
|
/// ts_task_GC032a.HS[DR_Hs_count] = ts_task_GC032a.pclk_n;
|
|
|
|
/// ts_task_GC032a.HS[DR_Hs_count] = DR_Hs_count;//
|
|
|
|
/// ts_task_GC032a.pclk_n = 0;
|
|
|
|
|
|
|
|
DR_Hs_count ++;
|
|
|
|
|
|
|
|
ts_task_GC032a.vs_ok = 1;
|
|
|
|
|
|
|
|
ts_task_GC032a.pclk_max = ts_task_GC032a.pclk_n;
|
|
|
|
|
|
|
|
D_LED1_REV();//////// if(0)////
|
|
|
|
D_PCLK_open();
|
|
|
|
/// DR_pclk_n = 0;
|
|
|
|
ET0 = 1;
|
|
|
|
|
|
|
|
|
|
|
|
/// EA = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
//// 读取不为0x80的数据
|
|
|
|
//// 放入s_task_GC032A.buf
|
|
|
|
////D_pclk_per_hs 数量满足后 s_task_GC032A.status = 1;
|
|
|
|
void l0_PCLK_Isr(void) D_SERVE_CLK /// using 1
|
|
|
|
{///PCLK
|
|
|
|
D_LED2_REV();
|
|
|
|
///DR_Dat = P2;
|
|
|
|
/////if(DR_Dat != 0X80)
|
|
|
|
{
|
|
|
|
///ts_task_GC032a.buf[0][DR_pclk_n] = DR_Dat;
|
|
|
|
/// ts_task_GC032a.buf[0][DR_pclk_n] = P2;
|
|
|
|
ts_task_GC032a.buf[0][ts_task_GC032a.pclk_n] = P2;
|
|
|
|
|
|
|
|
|
|
|
|
//// DR_pclk_n++;//
|
|
|
|
}
|
|
|
|
ts_task_GC032a.pclk_n ++;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void L0_HSYNCS_Isr(void) D_SERVE_HS/// using 1
|
|
|
|
{///hs 下沿有效
|
|
|
|
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
|
|
|
|
///EA = 0;
|
|
|
|
ET0 = 0;
|
|
|
|
/// ts_task_GC032a.HS[DR_Hs_count] = ts_task_GC032a.pclk_n;
|
|
|
|
/// ts_task_GC032a.HS[DR_Hs_count] = DR_Hs_count;//
|
|
|
|
/// ts_task_GC032a.pclk_n = 0;
|
|
|
|
//
|
|
|
|
|
|
|
|
DR_Hs_count ++;
|
|
|
|
|
|
|
|
ts_task_GC032a.vs_ok = 1;
|
|
|
|
|
|
|
|
D_LED1_REV();//////// if(0)////
|
|
|
|
|
|
|
|
|
|
|
|
//// 当前一帧画面里面的第D_row_get个hs,也就是一个画面中的第几行数据
|
|
|
|
if(DR_Hs_count == D_row_get)
|
|
|
|
{///D_P33_REV();
|
|
|
|
DR_pclk_n = 0;
|
|
|
|
D_PCLK_open();
|
|
|
|
ET0 = 0; //add by cc
|
|
|
|
|
|
|
|
}else if(DR_Hs_count == (1+D_row_get))
|
|
|
|
{
|
|
|
|
D_PCLK_close();
|
|
|
|
ET0 = 1;
|
|
|
|
ts_task_GC032a.status = 1;
|
|
|
|
ts_task_GC032a.pclk_max = DR_pclk_n;
|
|
|
|
}else
|
|
|
|
{
|
|
|
|
ET0 = 1;
|
|
|
|
}
|
|
|
|
/// EA = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|