ICETEK-C6713
#include"ICETEK-C6713-A.h" #include<math.h> #define AD_CTL *(unsigned char*)0x90100006 #define AD_DATA_BASE 0x90140000 #define ORDER 2 #define L 1024 #define hL 20 #define AD_CHA0 *(unsigned short int*)(AD_DATA_BASE+0*ORDER) #define AD_CHC0 *(unsigned short int*)(AD_DATA_BASE+1*ORDER) #define AD_CHB0 *(unsigned short int*)(AD_DATA_BASE+2*ORDER) #define AD_CHA1 *(unsigned short int*)(AD_DATA_BASE+4*ORDER) #define AD_CHC1 *(unsigned short int*)(AD_DATA_BASE+5*ORDER) #define AD_CHB1 *(unsigned short int*)(AD_DATA_BASE+6*ORDER)
void interrupt Timer( void ); void initInterrupt(void); unsigned short int a,b,c,d,e,f; short int nChannelA0[L],nChannelA1[L]; short int nAD0[L],nAD1[L],out[L];
main() { // unsigned char dbScanCode;
nPointNumber=0; ADflag=0; init_emif(); // 初始化emif InitCTR(); // 初始化ICETEK-CTR initInterrupt(); while ( 1 ) { if (ADflag==1) ADflag=0; }
} } void interrupt Timer( void ) { int i; short int nWork;
a= AD_CHA0 ; b= AD_CHA1 ; c= AD_CHB0 ; d= AD_CHB1 ; e= AD_CHC0 ; f= AD_CHC1 ; if ( (a&0x8000)&&(b&0x8000) ) // 数据有效性判断 { a<<=4; nWork=a; nWork/=16; // 去除高4位 nChannelA0[nPointNumber]=nWork; b<<=4; nWork=b; nWork/=16; // 去除高4位 nChannelA1[nPointNumber]=nWork; nPointNumber++; if ( nPointNumber>=L ) { for ( i=0;i<L;i++ ) { nAD0=nChannelA0; }
ADflag=1; nPointNumber=0; // 软中断位置
} } AD_CTL = 0x0; // 发送控制脉冲信号,进行下次转换 如果只需A0,A1通道只需送6即可 for (i=0;i<50;i++); AD_CTL = 0x7; // 产生高电平 } void initInterrupt(void) { // 设置中断控制寄存器 CSR&=0xfffffffe; // 关中断 GIE=0 ISTP=0x00000c00; // 重置中断向量表到0C00h IMH=0x08000000; // 指定Timer1产生int15中断 IML=0; ICR=0xff; // 清除等待的中断 IER=0x8003; // 使能int15中断 // 设置定时器产生中断信号的频率 TIMER1PRD=0x0100; // 定时器1的周期=0x1000 TIMER1CTL=0x3c0; // 开始计数 CSR=CSR|1; // 开中断 } void DSP_fir_gen(short x[], short h[], short r[], int nh, int nr) { int i, j, sum; for (j = 0; j < nr; j++) { sum = 0; for (i = 0; i < nh; i++) sum += x[i + j] * h; r[j] = sum >> 15; } }
[em01]
[此贴子已经被作者于2008-1-2 14:50:17编辑过] |