⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imag_c.c

📁 CCS编程环境 使用的是汇编加C的混合编程方法: The programme of the Correlation Algorithm. Using INT2 to get the input s
💻 C
字号:
/********************************************************************************
The programme of the Correlation Algorithm.
Using INT2 to get the input signal.
Array x, in first step, is the input signal produced by programme,
in next step, is the input signal get from A/D,
the length is 128, 32-bit floating point.
Array y, in first step, is the input signal produced by programme,
in next step, is the input signal get from A/D,
the length is 128, 32-bit floating point.
Array cor is the Correlation result, the length is 255, 32-bit floating point. 
*********************************************************************************/
#pragma CODE_SECTION(vect,"vect")
#include "stdio.h"
#include "math.h"
#define pi 3.1415927
#define IMR   *(pmem+0x0000)  
#define IFR   *(pmem+0x0001)  
#define PMST  *(pmem+0x001D)  
#define SWCR  *(pmem+0x002B)  
#define SWWSR *(pmem+0x0028) 
#define AL    *(pmem+0x0008) 
#define CLKMD  0x0058 /* clock mode reg*/
#define Length  128                 /* input array x,y length */
#define Lengthcor  2*Length-1       /* ouput array cor length */
int i,k,j,mode;
double sum, t, temp, xavg;
double x[Length],y[Length];
double cor[Lengthcor];   
int xm;
void Cor_caculation( double x[Length],double y[Length],double cor[Lengthcor]);
unsigned int  *pmem=0;
ioport unsigned char port8008;
int in_x[Length];
int m = 0;
int intnum = 0;
int flag = 0;
void cpu_init()
{
   *(unsigned int*)CLKMD=0x0;         //switch to DIV mode clkout= 1/2 clkin
     while(((*(unsigned int*)CLKMD)&01)!=0);
   *(unsigned int*)CLKMD=0x27ff;      //switch to PLL 
 
 PMST=0x3FA0;
 SWWSR=0x7fff;
 SWCR=0x0000;
 IMR=0;
 IFR=IFR;
} 
interrupt void int2()   
{
 in_x[m] = port8008;
 in_x[m] &= 0x00FF;
 m++;
 intnum = m;
 
 if (intnum == Length)
 {
  intnum = 0;
  
  xavg = 0.0;
  
  for (i=0; i<Length; i++)
  {
   xavg = in_x[i] + xavg;
  }  
  
  xavg = xavg/Length;
  
  for (i=0; i<Length; i++)
  {
   x[i] = 1.0*(in_x[i] - xavg);
   y[i] = x[i];
  }
  
  Cor_caculation(x,y,cor);
  
  m=0;
  flag = 1;
  IMR=0x0000;
 }
}
void Cor_caculation( double x[Length],double y[Length],double cor[Lengthcor])
{
   for(k=0; k<Length; k++)  
   {
      sum=0;
      
      for(j=0; j<=Length-1-k; j++)
      {
         t = x[j+k]*y[j];
         sum = sum+t;
      }
      if(mode==0)
      {
         cor[Length-1-k] = sum/(Length-k);
      }
      else
      {
         cor[Length-1-k] = sum/Length;
      }
   }
   for(k=0; k<=Length-1; k++)  
   {
      sum=0;
      for(j=0; j<=Length-1-k; j++)
      {
         t = x[j]*y[j+k];
         sum = sum+t;
      }
      if(mode==0)
      {
         cor[Length-1+k] = sum/(Length-k);
      }
      else
      {
         cor[Length-1+k] = sum/Length;
      }
   }
}
 
void set_int()    
{
 asm(" ssbx intm");
 IMR=IMR|0x0002;  
 asm(" rsbx intm");  
}
void main(void)
{
 k = 0; sum =0;
    t = 0; temp = 0;
/************************************************* 
 when mode=1, result is biased estimate;
    when mode=0, result is unbiased estimate
*************************************************/                               
   
 mode = 1;
 
 cpu_init();
 for(i=0; i<Length; i++)   /*Initialize*/
    {
           x[i]=0;
           y[i]=0;
           cor[i]=0;
 }
 for (i=Length; i<Lengthcor; i++)
    {
        cor[i] = 0;
    }
 for(i=0; i<Length; i++)  /*Input x,y*/
 {
           x[i] = sin(2*pi*i/(Length-1));
            y[i] = sin(2*pi*i/(Length-1));
    }
 Cor_caculation(x,y,cor);
 
 i++;              /* set breakpoint here */
 set_int();
 for(;;)
 {
  if (flag == 1)
  {
     flag = 0;     /* set breakpoint here */
           IMR=0x0002;
  }
 }
}
void vect()
{
   asm(" .ref _c_int00");/*pseudoinstruction*/
   asm(" .ref _int2");
   asm(" b _c_int00");/* reset */  
   asm(" nop");
   asm(" nop");
   asm(" rete");        
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* int0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" b _int2");     /* int1 */       
   asm(" nop");
   asm(" nop");
   asm(" rete");  /* int2 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* tint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* brint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* bxint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* dmac0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* tint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* int3 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* hpint */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* brint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* bxint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* dmac4 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* dmac5 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -