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.
 
 
 
 

706 lines
22 KiB

////////////////////////////////////////////////////////////////////////////
///@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
//////////////////////////////////////////////////////////////////////////////
#include "Bsp_debug.h"
#include "bsp_func.h"
#include "bsp_power.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"
/// 第一个比第二个延迟20ms 发送 这样同样触发后,第一个10.5ms发送完成 第二个还没有发送,不构成干扰
#define D_p_send_delay(); L1_task_Cdelay(D_Cdelay_15ms*(1+D_cameralIndex));
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
void L0_p_send(void);
extern TS_P_rf433 TS_paer_value;
struct _s_task_GC032A_ s_task_GC032A;
void L2_task_GC032A_init(void)
{
L0_cam_isr_init();
L1_task_init(&s_task_GC032A.task);
s_task_GC032A.next_line = D_clear;
s_task_GC032A.line_ok = D_run;
s_task_GC032A.line_get = D_clear;
s_task_GC032A.cal_ok = D_clear;
s_task_GC032A.vs_ok = D_clear;
}
//// 采集单行的程序 20190217
//// step01 上电时序初始化
///step02 输入配置寄存器
///step03 打开中断进入采集模式
///step04 捕捉第一帧数据 开始采样每一行 同时可以关闭led节约电
/// step05 捕获到需要的行数 采集到需要的一行数据
/// step06------>进入休眠状态
/// |----->持续采集下一行
#if(MODE_CAM_LINE == MODE_CAM)
#if 0
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init()
//#define D_pclk_per_hs 6
// PrintCam_L0_uart0_uc('$');
L2_task_go(D_task_GC032A_init_standby);
TTSS_Task_step(D_task_GC032A_init_standby)
L0_GC032A_standby();
D_cam_led_on();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
// PrintCam_L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_step01(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
L2_task_go(D_task_GC032A_init_AVDD);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
L0_MCLKO_init(D_ON);
L2_task_GC032A_init();
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();
DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
gRccUs03 = 0;
L2_task_go(D_task_GC032A_write_reg);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();
L2_task_go(D_task_GC032A_wakup_sample);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_step03(D_task_GC032A_wakup_sample)
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('w');
///D_ledb_OFF();
L2_task_go((D_task_GC032A_wakup_sample2));
L1_task_Tdelay(D_Tdelay_1s5);
TTSS_step04(D_task_GC032A_wakup_sample2);
D_VSYNCS_open();////后台的中断开始工作
L2_task_go(D_task_GC032A_one_frame);
//////////////////////////////////////////////////////////////////////////////
TTSS_step04(D_task_GC032A_one_frame);
////捕获到一帧数据的开始((来自于后台的中断))
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
/// PrintCam_L0_uart0_uc('V');
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off();
L2_task_go(D_task_GC032A_wait);
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
}
TTSS_step05(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的Line(来自于后台的中断)
if(D_clear != s->line_get)
{DL0_WDT(); ////memo20190217 : 间隔1.15s
//PrintCam_L0_uart0_uc(s->line_get);// L2_line_send();
s->buf2_ok = D_ready;///buf2_ok数据准备好可供算法查询
L2_task_go(D_task_GC032A_sleep);
/// L1_task_Tdelay(D_Tdelay_10ms);
}
TTSS_Task_step(D_task_GC032A_sleep)
///采样结束
L1_GC032A_sleep(D_sleep);
L0_GC032A_standby();
L0_MCLKO_init(D_OFF);
D_cam_led_off();
L2_task_go(D_task_FLOW_PreSend);
////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TTSS_Task_step(D_task_FLOW_PreSend);
D_txd4_wakeup();///上升沿 1ms后433 从sleep到可以发送
/// TS_paer_value.r123.cameraBoardPower = s->t_stamp+0x30;
L0_p_send();
//D_txd4_low();
L2_task_go(D_task_FLOW_send);
// L1_task_Tdelay(D_Tdelay_10ms);
///L1_task_Cdelay(60);//2ms---mcu+433无法接收
TTSS_Task_step(D_task_FLOW_send);
//D_txd4_wakeup();
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6);
L2_task_go(D_task_FLOW_send2);
TTSS_Task_step(D_task_FLOW_send2);
if(D_uart0_free())
{
L2_task_go(D_task_FLOW_send3);///
D_p_send_delay();
}
TTSS_Task_step(D_task_FLOW_send3);
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6);
L2_task_go(D_task_FLOW_send4);
TTSS_Task_step(D_task_FLOW_send4);
if(D_uart0_free())
{
L2_task_go(D_task_FLOW_send5);
}
TTSS_Task_step(D_task_FLOW_send5);
D_txd4_low();///共计耗时15ms
D_cam_AVDD_off();///注意影响发送
L2_task_go(0);
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
#elif(MODE_CAM_FRAME == MODE_CAM)
#elif(MODE_CAM_TEST == MODE_CAM)
#define PrintCam_L0_uart0_uc(x) L0_uart0_uc(x)
#define PrintCam_D_send_us(x) L0_uart0_us(x)
///#define L0_uart0_sendArraylong(a,start,end) L0_uart0_sendArray(a(start))
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
void L2_task_GC032A_handleTest(struct _s_task_GC032A_ *s)
{
TTSS_Task_init()
//#define D_pclk_per_hs 6
// PrintCam_L0_uart0_uc('$');
L2_task_go(D_task_GC032A_init_standby);
TTSS_Task_step(D_task_GC032A_init_standby)
L0_GC032A_standby();
D_cam_led_on();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
// PrintCam_L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_step01(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
L2_task_go(D_task_GC032A_init_AVDD);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
L0_MCLKO_init(D_ON);
L2_task_GC032A_init();
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();
DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
gRccUs03 = 0;
L2_task_go(D_task_GC032A_write_reg);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();
L2_task_go(D_task_GC032A_wakup_sample);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_step03(D_task_GC032A_wakup_sample)
L1_GC032A_sleep(D_wakeup);
///D_ledb_OFF();
L2_task_go((D_task_GC032A_wakup_sample2));
L1_task_Tdelay(D_Tdelay_1s5);
TTSS_step04(D_task_GC032A_wakup_sample2);
D_VSYNCS_open();////后台的中断开始工作
PrintCam_L0_uart0_uc('w');
L2_task_go(D_task_GC032A_one_frame);
//////////////////////////////////////////////////////////////////////////////
TTSS_step04(D_task_GC032A_one_frame);
PrintCam_L0_uart0_uc('.');
////捕获到一帧数据的开始((来自于后台的中断))
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s->vs_ok = D_clear;
PrintCam_L0_uart0_uc('V');
/// D_cam_led_off();
D_HSYNCS_open();
L2_task_go(D_task_GC032A_send2);
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
}
TTSS_Task_step(D_task_GC032A_send2)///----------------------开始一行一行的发送
if(1 == s_task_GC032A.line_ok)
{
s_task_GC032A.line_ok = 0;
///采样结束
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
///PrintCam_D_send_us(DR_pclk_n);
PrintCam_D_send_us(DR_line_n);
L0_uart0_sendArray(&s_task_GC032A.buf[0],200);
L2_task_go(D_task_GC032A_06);
/// L1_task_Tdelay(D_Tdelay_50ms);
}else { }
TTSS_step06(D_task_GC032A_06);
/*********************************************************
TTS_for_add(s_task_GC032A.lines,0,627)///[0]--[199]199
/// s_task_GC032A.buf[s_task_GC032A.lines] = s_task_GC032A.lines;
s_task_GC032A.buf[s_task_GC032A.lines] = 0;
TTS_for_add_end()
**************************************************/
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[200],200);
L2_task_go(D_task_GC032A_07);
}
TTSS_step06(D_task_GC032A_07);
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[400],200);
L2_task_go(D_task_GC032A_08);
}
TTSS_step06(D_task_GC032A_08);
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[600],D_pclk_per_hs-600);/// 628point
// 'fe','fd','fd','fc' 46 44 20 46 43 0d 0a
PrintCam_L0_uart0_uc(0xfd);
PrintCam_L0_uart0_uc(0xfc);
s_task_GC032A.next_line = 1;
L2_task_go(D_task_GC032A_send2);
L1_task_Tdelay(D_Tdelay_10ms);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
void L1_GC032A_sleep(unsigned char onf)
{///FE 15 Fd 33 44//standby
///FE 05 Fd 33 44//wakeup
if(D_sleep == onf)
{
// GC032a_L0_uart0_uc('L');
/// 进入standby:
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00);
Lc_delay_nop(30);
Lc_delay_nop(30);
}else
{
// GC032a_L0_uart0_uc('X');
/// 退出standby:
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff);
}
}
void L2_line_send(void)
{
#if 0
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
// PrintCam_L0_uart0_uc(0xfe);
// PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
/// PrintCam_D_send_us(s_task_GC032A.usSum);
PrintCam_L0_uart0_uc(0x09);
// PrintCam_D_send_us(0x1234); PrintCam_D_send_us(0x5678); PrintCam_D_send_us(0xabcd);
// PrintCam_L0_uart0_uc(0x0d);
// PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40);
PrintCam_L0_uart0_uc(0x09);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40);
PrintCam_L0_uart0_uc(0x09);
PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-21],20);
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
// Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2);
// L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3);
///#ifdef D_debug_add_send
// PrintCam_L0_uart0_uc('P');
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
///#else
/*****
??
10 10 10 10 10 10 10 10 10 10
10 10 10 10 11 11 11 11 11 11
11 11 11 11 11 11 11 11 11 11
11 11
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
CRpaper =04F8-g-offdiff :.
******/
///vU16 i; for(i = 0;i <= D_pclk_per_hs_570; i ++) {s_task_GC032A.buf[i]=i; }
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
L0_uart0_sendArray(s_task_GC032A.buf,200);
L0_uart0_sendArray(&s_task_GC032A.buf[200],200);
L0_uart0_sendArray(&s_task_GC032A.buf[400],(D_pclk_per_hs_570-400));
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
//// PrintCam_D_send_us(s_task_GC032A.down_point);
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
// DR_pdata_n =0;
// PrintCam_D_send_us(0x1234);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
#endif
/* */
}
#if 0
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
L0_GC032A_standby();
D_cam_AVDD_on();
}
//// AX CMD R2 R3 R4
/// Ae 01 01 03 04
void L3_GC032A_fun(U8 *pPara)
{
*pPara = 0;
}
/********
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 3: //Ae 03 03 04 00
//xx 03 R2 R3 xx
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc('l');
Lc_delay_ms(12);
s_task_GC032A.vline_get = p->R2 << 8;
s_task_GC032A.vline_get |= p->R3;
L0_uart0_uchex(p->R2);
Lc_delay_ms(12);
L0_uart0_uchex(p->R3);
Lc_delay_ms(1200);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
break;
default:
break;
};
}
********/
///#else
//// fe 01 reg data 0cx
/// Ac 01 02 03 ocr ---bsp_debug.c
/// U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01: p.cmd p.R2 p.R3 p.ocr
///Ac 00 03 01 00/// ACC_X[13:6]
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01:
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
L0_GC032A_read(p->R2,&i,1);
PrintCam_L0_uart0_uc(i);
break;
//修改摄像头配置参数
case 0x02:
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
/// sysreg FE 02 FE 01 44 //设置当前页面01
L0_GC032A_write(p->R2,p->R3);
PrintCam_L0_uart0_uc(p->R2);
PrintCam_L0_uart0_uc(p->R3);
break;
//启动摄像头进行拍照;
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
s_task_GC032A.line_onf = p->R2;
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 0x05:
///AE 05 01 33 44 //进入 standby
///AE 05 00 33 44 //退出 standby
L1_GC032A_sleep(p->R2);
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 6:///AE 06 22 33 44
D_cam_led_off();
break;
case 7:///AE 07 22 33 44
D_cam_led_on();
break;
/*******************
case 0x00:
L0_GC032A_read(p->R2,val,p->R3);
PrintCam_L0_uart0_uc(p->cmd);
PrintCam_L0_uart0_uc(p->R2);
PrintCam_L0_uart0_uc(p->R3);
PrintCam_L0_uart0_uc('G');
for(i = 0;i < p->R3;i++)
{
PrintCam_L0_uart0_uc(val[i]);
}
break;
//读取摄像头配置参数
case 0x35:
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
PrintCam_L0_uart0_uc(0x31);
break;
case 0x36:
/// 退出standby:
L0_GC032A_work();
PrintCam_L0_uart0_uc(0x30);
break;
****************************/
default:
break;
};
}
#endif
#if 0
254 253
FE FD 02 7F ///639
1A 1B 1B 1B 1B 1B 1A 1C 1B 1B 1B 1A 1A 19 19 1A 19 1A 19 1A 19 1A 19 19 18 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 16 17 16 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 18 18 17 17 17 17 17 16 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 19 19 19 19 19 18 18 19 19 19 18 18 18 1A 19 19 19 19 19 1A 1A 1A 1A 1A 1A 19 19 18 19 19 19 1A 1A 1A 1B 1B 1B 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1D 1E 1C 1C 1C 1D 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1B 1A 1B 1A 1B 1D 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1B 1B 1C 1C 1C 1E 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1B 1C 1C 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1C 1D 1D 1E 1D 1E 1F 1F 1E 1E 1E 1E 1E 1E 1E 1E 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1D 1D 1D 1D 1D 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1D 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1D 1C 1C 1C 1C 1D 1F 1F 1D 1C 1C 1B 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1C 1D 1C 1C 1C 1D 1D 1D 1D 1E 1D 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1E 1E 1E 1D 1D 1D 1D 1C 1D 1C 1C 1C 1C 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1B 1B 1C 1C 1C 1C 1B 1B 1B 1B 1D 1B 1C 1B 1B 1B 1C 1D 1C 1B 19 1A 19 1B 1C 1A 1A 1A 1A 1A 1A 1B 1B 1B 1A 1B 19 1B 1A 1A 1A 1A 1A 19 18 19 19 1A 1A 1A 1A 1A 19 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 19 1A 19 19 19 19 19 19 19 1A 1A 1A 1A 19 19 18 18 18 18 18 18 19 18 18 18 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 17 17 17 18 18 18 18 17 17 17 17 17 16 17 17 18 18 19 19 19 19 19 19 18 18 18 18 18 18 17 17 18 18 17 17 17 17 17 17 19 17 17 17 17 17 17 17 17 17 17 17 17 18 17 17 17 17 17 17 17 17 16 16 17 17 17 17 17 16 16 17 17 17 17 16 16 16 16 16 16 16 17 16 16 16 16 16 16 16 16 16 16 18 19 16 16 16 16 15 16 17 17 16 15 15 16 16 16 15 14 14 15 17 15 15 15 15 16 16 16 16 16 15 16 16 16 15 15 15 15 15
FD FC
253 252
254 253 /639./ 253 252
#endif
#if 0/// memo
//memo20190217 : 间隔1.15s
/*********
[15:37:04.337]收←◆�v 4.337
[15:37:05.487]收←◆�v 5.487 1.15
[15:37:06.637]收←◆�v 6.637 1.15
[15:37:07.787]收←◆�k 7.787 1.15
[15:37:08.947]收←◆�v 8.947 1.16
[15:37:10.097]收←◆�v 10.097 1.15
[15:37:11.247]收←◆�v 11.247 1.15
[15:37:12.397]收←◆�v 12.397 1.15
[15:37:13.547]收←◆�k 13.547 1.15
48 31 61 77 77 77 77 2E 56 77 77 77 33 76 01 D3 56 2E 77 77 77 00
***/
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
// L0_GC032A_standby();
// D_cam_AVDD_on();
}
void L2_line_send(void)
{
// /// vU16 usi;
PrintCam_D_send_us(0x1234);
PrintCam_D_send_us(0x5678);
PrintCam_D_send_us(0xabcd);
#if 0
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
// PrintCam_L0_uart0_uc(0xfe);
// PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
PrintCam_D_send_us(0x1234);
PrintCam_D_send_us(0x5678);
PrintCam_D_send_us(0xabcd);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[0]),2);
PrintCam_L0_uart0_uc(0x09);
/// PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-10],9);
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2);
L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3);
///#ifdef D_debug_add_send
PrintCam_L0_uart0_uc('P');
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
// PrintCam_L0_uart0_uc(0x0d);
// PrintCam_L0_uart0_uc(0x0a);
///#else
[18:41:16.591]ê?????02 FE FD 02 42 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 12 12 12 13 13 14 15 16 16 17 18 18 17 17 16 16 17 19 1C 1F 25 28 2A 2C 2D 2E 2F 30 31 31 32 32 32 32 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 33 34 34 34 34 34 34 34 34 34 34 34 35 35 34 35 35 35 35 35 35 36 35 35 36 36 11 11 11 FD FC
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
L0_uart0_sendArraylong(s_task_GC032A.buf,0,199);
L0_uart0_sendArraylong(s_task_GC032A.buf,200,399);
if(D_pclk_per_hs < 600)
{
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599);
}else
{
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599);
L0_uart0_sendArraylong(s_task_GC032A.buf,600,(D_pclk_per_hs-1));
}
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
//// PrintCam_D_send_us(s_task_GC032A.down_point);
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
// DR_pdata_n =0;
// PrintCam_D_send_us(0x1234);
// 'fe','fd','fd','fc'
PrintCam_L0_uart0_uc(0xfd);
PrintCam_L0_uart0_uc(0xfc);
#endif
/* */
}
#endif