高级会员
- 积分
- 919
- 威望
- 487
- 贡献
- 284
- 兑换币
- 0
- 注册时间
- 2009-11-4
- 在线时间
- 74 小时
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
void ccd_init(void);
void pll_init(void); ///倍频
void IC_init(void);
void IRQ_init(void);
void ad_init(void);
unsigned char ad_i,ad_j; //ad模块计数器
int ad_p,ad_q; //
unsigned char ima[65][60]; //图像存储区,每行采集到60个点,一共有65行
unsigned char ima_m=0, line_i=0,ima_num=62; //图像标志 从第二幅图像开始计算第一个中点值 ; 一副图像采集完标志 第几幅图像计数器
///////////////////////////////////////////////////////
void pll_init(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR=3;
REFDV=1; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;
_asm(nop); //BUS CLOCK=32M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
void IRQ_init()
{
INTCR_IRQE=1; //下降沿触发,0的话就是电平触
//下降沿触发或低电平触发,否则要用反相器)
INTCR_IRQEN=1; //初始化开启(ENABLE)
}
void IC_init(void){
TIOS=0X00; //输入捕捉
TSCR1=0X80; //定时器开始工作
TSCR2=0X07; //禁止定时器溢出中断,仅仅提供数据.2分频
TCTL3=0X02; //仅捕捉下降沿
TIE=0X10; //输入捕捉中断使能
TFLG1=0X10; //定时器中断标志寄存器2自动清零,对应于输入捕捉4口1;
}
void ad_init(void){
asm sei ;
ATD0CTL2=0XC0; //启动AD 自动清标志位 外部触发禁止
ATD0CTL3=0X08; //结果存放在ATDDR0 转换序列为1 右对齐
ATD0CTL4=0X87; //128分频 采样时间二倍采样周期
ATD0CTL5=0XA4; //单通道转换 连续转换 通道4
ATD0DIEN=0X00; //禁止数字输入
asm cli;
}
void main(void) {
/* put your own code here */
DDRB=0XFF;
PORTB=0X0F;
IC_init();
IRQ_init();
pll_init();
ad_init();
EnableInterrupts;
for(;;)
{
_FEED_COP();
}
/* wait forever */
/* please make sure that you never leave this function */
}
#pragma CODE_SEG NON_BANKED
void interrupt 6 line_int(void)
{
ATD0CTL2_ASCIE=0; //ad转化完成后,不进行中断
if((++ad_p)>23) //行中断了24次,废弃前面的行中断
{
ad_q++; //行中断计数器
}
if(ad_q%3==1)
{ //之后,每隔三个行中断,进行一次AD转化
ad_j=0;
ad_i++;
ATD0CTL2_ASCIE=1; //开中断
}
}
void interrupt 12 row_int(void){ //场中断
TFLG1_C4F=1; //清中断标志位
ad_i=0; //行重新开始
ad_q=0;
ad_p=0;
ima_m++; //变成了新的一副图片
}
void interrupt 22 ad_int(void){ // AD转化好了之后,产生中断,将转化好的存起来
while(ATD0CTL2_ASCIF==0);
ima[ad_i][ad_j]=ATD0DR0L; //存储结果
ad_j++; //列数加1
}
#pragma CODE_SEG DEFAULT |
|