智能车制作
标题:
龙邱CCD移植蓝宙程序
[打印本页]
作者:
飘渺孤鸿~
时间:
2015-4-12 12:26
标题:
龙邱CCD移植蓝宙程序
程序移植后,中断总是只进一次,但标志位有清除过,我不知道是什么原因,请求移植成功的同学帮看看
作者:
飘渺孤鸿~
时间:
2015-4-12 12:27
这是主程序
void main()
{
volatile u8 i;
u8 send_data_cnt = 0;
u8 *pixel_pt;
WatchdogDisable(); //看门狗
VECTableInit();
DisableInterrupts; //禁止总中断
/*********************************************************
初始化程序
*********************************************************/
//自行添加代码
UART_Init(PERIPH_SYS_CLK, 9600, UART1); //初始化UART1,输出脚PTC4,输入脚PTC3,串口频率 9600
// adc_init(ADC1, AD6a) ;
Timer1_Init() ; //初始化PIT1,中断周期为0.2ms
CCD_init() ;
pixel_pt = Pixel;
for(i=0; i<128+10; i++) {
*pixel_pt++ = 0;}
EnableInterrupts; //开总中断
EnableTimer1() ;
/******************************************
执行程序
******************************************/
while(1)
{
if(TIME1flag_20ms == 1)//20ms一次中断
{
TIME1flag_20ms = 0 ;
/* Sampling CCD data */
ImageCapture(Pixel);
/* Calculate Integration Time */
CalculateIntegrationTime();
/* Send data to CCDView every 100ms */
if(++send_data_cnt >= 5)
{
send_data_cnt = 0;
SendImageData(Pixel);
}
}
}
}
作者:
飘渺孤鸿~
时间:
2015-4-12 12:28
中断程序
extern u8 IntegrationTime ;
extern void StartIntegration(void);
extern unsigned char IntegrationTime;
u8 TIME1flag_20ms = 0 ;
void Timer1_isr(void)
{
static unsigned char TimerCnt20ms = 0;
u8 integration_piont;
int i=0;
TimerCnt20ms++;
/* 根据曝光时间计算20ms周期内的曝光点*/
integration_piont = 20 - IntegrationTime;
if(integration_piont >= 2)
{ /* 曝光时间小于2则不进行再曝光 */
if(integration_piont == TimerCnt20ms*0.2)
StartIntegration(); ///曝光开始
}
if(TimerCnt20ms >= 100)
{
TimerCnt20ms = 0;
TIME1flag_20ms = 1;
}
PIT_TFLG1 |= PIT_TFLG_TIF_MASK;//清中断标志位
PIT_MCR=0;
i=1-i;
Gpio_set(PORT_A, 14, i);
}
作者:
泰庆电子
时间:
2015-4-13 08:37
贴这样的代码 别人不好分析的。CCD都是差不多的 最多是带运放 不带 运放。内部都是TSL1401,只要这个例程适合一款CCD,那么引脚只要没设置错误,其他CCD也可以的。
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2