智能车制作

标题: 模拟摄像头图像采集程序 [打印本页]

作者: w157573257    时间: 2011-3-30 21:42
标题: 模拟摄像头图像采集程序
CCD采集程序如下
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
unsigned char pic[70][80];
unsigned int hang;
unsigned int changwan;
unsigned int point;
unsigned char *p;
void allinit(void)
{   
    CLKSEL=0X00;    //disengage PLL to system
    PLLCTL_PLLON=1;   //turn on PLL
    SYNR =0xc0 | 0x05;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;
    _asm(nop);          //BUS CLOCK=48M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
////////////////////////////////////////////
  
    ATD0CTL1=0x00;//8位精度
    ATD0CTL2=0x40;//禁止外部触发,标志位快速清零,中断禁止
    ATD0CTL3=0x88;//右对齐无符号.转换序列长度为1,No FIFO模式,Freeze模式下继续转换?
    ATD0CTL4=0x00;//4AD采样周期,ATDClock=[BusClock*0.5]/[PRS+1]  ;
    ATD0CTL5=0x20;//特殊通道禁止,单通道采样,扫描模式连续采样,ch AN0
    ATD0DIEN=0x00;//禁止数字输入
     
/////////////////////////////////////////

   TIOS=0x0B;                   //PT0-3 通道设置为输出比较,PT4-7 通道设置为输入捕捉
   TIE=0;                          //初始时屏蔽所有通道的中断
   TSCR2=0x04;                     //溢出中断禁止,计时器频率由总线频率16分频得到==3.125MHz
   TCTL3=0x40;                     //检测上升沿  7通道
   TSCR1=0x80;                     //启动ECT模块及计数器                                                           
   IRQCR=0;                        //关闭行同步中断(IRQ
  ///////////////////////////////////////////
   SCI0CR1 = 0X00;
   SCI0CR2 = 0X0c;
   SCI0BDH = 0x01; //busclk  8MHz,19200bps,SCI0BDL=0x1a
   SCI0BDL = 0x38; //SCI0BDL=busclk/(16*目标波特率)
  /////////////////////////////////////////
  
   DDRM = 0x00;            //场中断打开
   
  
}
//发送一个字
void scisend1(unsigned char i)
{   
    for(;;)
  
    if((SCI0SR1 & 0X80) != 0)   //发送数据寄存器空
    {
      SCI0DRL=i;
      
       break;
    }
}
//main函数
void main(void)
{
allinit();
  
  hang=0;                          //一场中行计数清零
changwan=0;                          //清除场采集结束标志
                                 //场中断开()?
  for(;;)
  {  
  hang=0;                          //一场中行计数清零
  changwan=0;                          //清除场采集结束标志
   
  while((PTM&0x01)!=0);             //等待场同步信号到来 ?
   DDRM = 0XFF;                             //关闭场中断()?
  TC0=TCNT+0x0c48;                   //等待场消隐结束定时 ?
  TFLG1=0xFF;                        //清楚计数完成标志   ?
  TIE=0x01;                          //开启TC0 中断(interrupt 8)
   
  while(changwan==0);
  DisableInterrupts;
  //下面处理或发送 ,最后开启场中断。
  // 图像到底怎么存储
  //  最后要不要把手地址复原 ,场中断要zenyan判断?
   
    p=p-5600;               //图像首地址前一个地址
    if(p<p+5600)                  
    scisend1(*(p++));
   
    DDRM =0X00;             //开启场中断
   
  }
}

////////////////////////////
#pragma CODE_SEG __NEAR_SEG NON_BANKED   
// Vector 8 Interrupt:Timer0
interrupt 8 void timer0(void)   
{
scisend1(4);
  TIE=0;                              //关闭定时器局部中断
  IRQCR=0x40;                         //开启行同步中断(interrupt 6)
   
}
// Vector  Interrupt:start get a line
interrupt 6 void line_start(void)   
{
  IRQCR=0;                             //关闭行中断   
  if(hang==70)
  {
    changwan=1;                          //场结束标志位
  }
  else
  {
    point=0;                         //一行中点计数清零   
    TC1=TCNT+0x001D;                   //等待行消隐结束定时 ?
    TFLG1=0xFF;                        //清除计数完成标志
    TIE=0x02;                          //开启TC1 局部中断(interrupt 9)
  }
}   
// Vector 9 Interrupt:Timer1
interrupt 9 void timer1(void)   
{
   
  TIE=0;                            //关闭定时器局部中断
  p=&(pic[hang][0]);
  
   
  while(point!=80)  
  {
    while(!ATD0STAT0_SCF);           //  ?
    *p=ATD0DR0L;
    p++;
    point++;
  }
  hang++;
  
  TC1=TCNT+0x001D;   //  ?
  TFLG1=0xFF;       //清除计时完成标志
  TIE=0x04;         //开启TC2局部中断(interrupt 10)
   
}
// Vector 10 Interrupt:Timer2
interrupt 10 void timer2(void)   
{
  TIE=0;           //关闭定时器局部中断
  IRQCR=0x40;      //开启行同步中断(interrupt 6)
}
#pragma CODE_SEG DEFAULT
///系统是如何到达你指定的中断的呢?

程序有点问题 好像进入不了子程序。哪位高手给看看 。帮改改
作者: w157573257    时间: 2011-3-30 21:51
场是pm0  行是IRQ  还用了 作为输出的ECT模块的0~3口
作者: 纠结    时间: 2011-3-30 22:22

作者: lslk89    时间: 2011-4-4 23:47
学习了
作者: 我的未来不是梦    时间: 2011-4-5 20:12
学习····
作者: 吴必富1    时间: 2011-4-5 23:38
哦哦
作者: yulilfo    时间: 2011-4-6 16:50
学习
作者: yulilfo    时间: 2011-4-6 16:50
学习
作者: 在陌上    时间: 2011-4-9 13:12
看看
作者: pjxd3    时间: 2011-7-17 16:44
3Q
作者: wenzi    时间: 2011-7-21 14:43

作者: wacsysys    时间: 2012-4-28 19:30
顶一个
作者: 开心果219407    时间: 2012-11-7 22:04
路过
作者: hubing__1234    时间: 2012-11-21 19:23
学习。




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2