You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
7.3 KiB
219 lines
7.3 KiB
4 years ago
|
////////////////////////////////////////////////////////////////////////////
|
||
|
///@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_debug.h"
|
||
|
#include "bsp_func.h"
|
||
|
#include "bsp_cam_isr.h"
|
||
|
#include "bsp_cam.h"
|
||
|
#include "../msp/uart0.h"
|
||
|
#include "cw63xx.h"
|
||
|
#include "../clib/Clib.h"
|
||
|
#include "../clib/bit.h"
|
||
|
#include "../msp/time.h"
|
||
|
#define D_pclk_div_hs 1 ///D_pclk_per_hs*D_pclk_div_hs < 680
|
||
|
|
||
|
///vs p3.7 int3
|
||
|
///hs p3.6 int2
|
||
|
///pclk p3.2 int0
|
||
|
/// row lineȷ���Ա�ʾһ���� һ�е���˼.��column�������ı�ʾһ�������ġ���
|
||
|
|
||
|
#define D_line_get 10
|
||
|
#define D_row_get2 4
|
||
|
#ifdef doc_98989
|
||
|
vs /```24.8ms````\_______________________________..1.16s..._____________________________________________/```````````\__________
|
||
|
hs /\����������������/\_2.14MS_/\____/\____/\____ ...... __/\____/\____/\__480��__/\____/\____/\____/\����������������/\
|
||
|
|
||
|
hs /``\________________________hs______________________/``\
|
||
|
pclk |||||||||||||||||||||||||||||||||||||||||||||||640
|
||
|
|
||
|
|
||
|
Line0 L1 L2 L1 L1 L1 L1 L1 L1 L480
|
||
|
----------------------------------------------------------------------
|
||
|
1 1 1 1 1 1 1 1 1 --- --- 1
|
||
|
2 2 2 2 2 2 2 2 2 --- --- 2
|
||
|
3 3 3 3 3 3 3 3 3 --- --- 3
|
||
|
4 4 4 4 4 4 4 4 4 --- --- 4
|
||
|
5 5 5 5 5 5 5 5 5 --- --- 5
|
||
|
6 6 6 6 6 6 6 6 6 --- --- 6
|
||
|
7 7 7 7 7 7 7 7 7 --- --- 7
|
||
|
8 8 8 8 8 8 8 8 8 --- --- 8
|
||
|
9 9 9 9 9 9 9 9 9 --- --- 9
|
||
|
10 10 10 10 10 10 10 10 10 --- --- 10
|
||
|
11 11 11 11 11 11 11 11 11 --- --- 11
|
||
|
12 12 12 12 12 12 12 12 12 --- --- 12
|
||
|
13 13 13 13 13 13 13 13 13 --- --- 13
|
||
|
14 14 14 14 14 14 14 14 14 --- --- 14
|
||
|
. . . . . . . . . --- --- .
|
||
|
. . . . . . . . . --- --- .
|
||
|
. . . . . . . . . --- --- .
|
||
|
. . . . . . . . . --- --- .
|
||
|
640 640 640 640 640 640 640 640 640 --- --- 640
|
||
|
|
||
|
#endif ///doc_98989
|
||
|
|
||
|
|
||
|
void L0_cam_isr_init(void)
|
||
|
{
|
||
|
IT0 = 1;///int0 �½��ش��� = 0 �����ؾ��ɴ���
|
||
|
/// IT0 = 0;////int0 �½��ش��� = 0 �����ؾ��ɴ���
|
||
|
/// L0_INT0_OPEN();
|
||
|
D_HSYNCS_close();
|
||
|
D_VSYNCS_open();
|
||
|
D_PCLK_close();
|
||
|
|
||
|
}
|
||
|
|
||
|
#if(MODE_CAM_LINE == MODE_CAM)
|
||
|
|
||
|
|
||
|
#if 0
|
||
|
//////////
|
||
|
/////һ֡���ݵĿ�ʼ
|
||
|
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////�½���
|
||
|
{////�ҵ�һ֡���ݵĿ�ͷ����һ��
|
||
|
L0_INT3_CLEAR();
|
||
|
///s_task_GC032A.usHs_count = 0;
|
||
|
DR_line_n = 0;
|
||
|
/// s_task_GC032A.next_line = D_ready;///������һ�� ����ȷ��֡ͷ�ǵ�һ�У�������///
|
||
|
/// s_task_GC032A.one_line_ok = D_clear;
|
||
|
s_task_GC032A.line_get = D_clear;
|
||
|
s_task_GC032A.vs_ok = D_ready;
|
||
|
//s_task_GC032A.frames ++;
|
||
|
//if(s_task_GC032A.frames > 10)
|
||
|
{/// ʱ������
|
||
|
///s_task_GC032A.frames = 0;
|
||
|
}
|
||
|
D_ledb_OFF();
|
||
|
/// D_leda_ON();
|
||
|
D_HSYNCS_open();
|
||
|
}
|
||
|
|
||
|
/////һ��line row���ݵĿ�ʼ
|
||
|
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /�½���
|
||
|
{///hs ������Ч
|
||
|
L0_INT2_CLEAR();
|
||
|
//// hs�źŵļ�����vs��Ч��ʱ�����㣬����usHs_count=D_row_get�ʹ���
|
||
|
//// ��ǰһ֡���������ĵ�D_row_get��hs��Ҳ����һ�������еĵڼ�������
|
||
|
///if(D_ready == s_task_GC032A.next_line)
|
||
|
{///D_P33_REV();
|
||
|
//D_leda_OFF();
|
||
|
/// s_task_GC032A.next_line = D_clear;///��Ϊ����һ�����ݵ�ʱ��ԶԶС�ڷ��͵�ʱ��
|
||
|
///������������Ϊ�����߿ɿ���
|
||
|
///�������˺��ɡ�gc032a����������
|
||
|
s_task_GC032A.lines = DR_line_n;////���浱ǰ���кŵ�������,��Ϊ�кű仯���ٶȳ���
|
||
|
////���͵��ٶ�,����"gc032A����"��ʹ�õ�ʱ��DR_line_n �Ѿ��仯��
|
||
|
///0 24 58 94 129 165 200 236 271 307 342 378
|
||
|
D_PCLK_open();
|
||
|
//D_P35_REV() ;
|
||
|
DR_pclk_n = 0;
|
||
|
if(DR_line_n >= D_line_get)
|
||
|
{
|
||
|
s_task_GC032A.line_get = D_ready;
|
||
|
D_HSYNCS_close();D_PCLK_close();
|
||
|
}
|
||
|
}
|
||
|
DR_line_n ++;///��ǰ��������
|
||
|
}
|
||
|
|
||
|
////s_task_GC032A.buf ���ŵ���һ�е�����
|
||
|
//// pclk int0 ÿ�����IJ���
|
||
|
void L0_PCLK_Isr(void) interrupt D_ISR_int0 /// using 10///
|
||
|
{///PCLK
|
||
|
// D_P34_REV();
|
||
|
DR_Dat = P1;
|
||
|
s_task_GC032A.buf[DR_pclk_n] = DR_Dat; // s_task_GC032A.buf[DR_pclk_n] = 0xaa;//P1&0xf0; //s_task_GC032A.buf[s_task_GC032A.usN] = s_task_GC032A.usN;
|
||
|
DR_pclk_n++;// D_P34_REV();
|
||
|
if(DR_pclk_n > D_pclk_per_hs)////һ�е���Ч���ݽ������� ������ D_pclk_per_hs���̶�����
|
||
|
{
|
||
|
D_PCLK_close();
|
||
|
|
||
|
//D_ledb_REV() ;
|
||
|
DR_pclk_n = D_pclk_per_hs; ///fixme
|
||
|
DR_pclk_n = 0;
|
||
|
/// s_task_GC032A.one_line_ok = D_ready;////����gc032a��������Ϣ ���Կ�ʼ�������߷�����
|
||
|
D_ledb_ON();
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#elif(MODE_CAM_FRAME == MODE_CAM)
|
||
|
|
||
|
#elif(MODE_CAM_TEST == MODE_CAM)
|
||
|
/////��������
|
||
|
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////�½���
|
||
|
{////�ҵ�һ֡���ݵĿ�ͷ����һ��
|
||
|
///s_task_GC032A.usHs_count = 0;
|
||
|
DR_line_n = 0;
|
||
|
s_task_GC032A.next_line = 1;///������һ�� ����ȷ��֡ͷ�ǵ�һ�У�������///
|
||
|
s_task_GC032A.vs_ok = D_ready;
|
||
|
}
|
||
|
|
||
|
/////һ��line row���ݵĿ�ʼ
|
||
|
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /�½���
|
||
|
{///hs ������Ч
|
||
|
//// hs�źŵļ�����vs��Ч��ʱ�����㣬����usHs_count=D_row_get�ʹ���
|
||
|
//// ��ǰһ֡���������ĵ�D_row_get��hs��Ҳ����һ�������еĵڼ�������
|
||
|
if(s_task_GC032A.next_line)
|
||
|
{///D_P33_REV();
|
||
|
s_task_GC032A.next_line = 0;///��Ϊ����һ�����ݵ�ʱ��ԶԶС�ڷ��͵�ʱ��
|
||
|
///������������Ϊ�����߿ɿ���
|
||
|
///�������˺��ɡ�gc032a����������
|
||
|
s_task_GC032A.lines = DR_line_n;////���浱ǰ���кŵ�������,��Ϊ�кű仯���ٶȳ���
|
||
|
////���͵��ٶ�,����"gc032A����"��ʹ�õ�ʱ��DR_line_n �Ѿ��仯��
|
||
|
///0 24 58 94 129 165 200 236 271 307 342 378
|
||
|
|
||
|
/*****
|
||
|
if(D_line_get == DR_line_n)
|
||
|
{
|
||
|
s_task_GC032A.line_get = 1;
|
||
|
}
|
||
|
******/
|
||
|
D_PCLK_open();///������¼��һ������
|
||
|
DR_pclk_n = 0;
|
||
|
}
|
||
|
DR_line_n ++;///��ǰ��������
|
||
|
}
|
||
|
|
||
|
////s_task_GC032A.buf ���ŵ���һ�е�����
|
||
|
//// pclk int0 ÿ�����IJ���
|
||
|
void L0_PCLK_Isr(void) interrupt D_ISR_int0 //// using 10///
|
||
|
{///PCLK
|
||
|
// D_P34_REV();
|
||
|
//// DR_Dat = P1; s_task_GC032A.buf[DR_pclk_n] = DR_Dat;
|
||
|
s_task_GC032A.buf[DR_pclk_n] = P1;
|
||
|
|
||
|
|
||
|
////s_task_GC032A.buf[DR_pclk_n] = 0xcc;
|
||
|
///s_task_GC032A.buf[DR_pclk_n] = DR_pclk_n;
|
||
|
DR_pclk_n++;// D_P34_REV();
|
||
|
if(DR_pclk_n > D_pclk_per_hs) ////һ�е���Ч���ݽ������� ������ D_pclk_per_hs���̶�����
|
||
|
{
|
||
|
D_PCLK_close();
|
||
|
DR_pclk_n = D_pclk_per_hs; ///fixme
|
||
|
|
||
|
s_task_GC032A.line_ok = 1; ////����gc032a��������Ϣ ���Կ�ʼ�������߷�����
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
////�յ� next_line ��¼��ǰ�ڼ���lines������ pclk���ɼ����ݵ�buf�У�Ȼ��line_ok
|
||
|
///// send buf, set next_line after send buf over
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|