📄 convolve.c
字号:
#include <stdio.h>
#include <volume.h>
/* Watchdog (WD) registers*/
unsigned int *WDCNTR = (unsigned int *)0x7023; /* WD Counter register */
unsigned int *WDKEY = (unsigned int *)0x7025; /* WD Key register*/
unsigned int *WDCR = (unsigned int *)0x7029; /* WD Control register*/
/* Global declarations */
int inp1_buffer[BUFSIZE];
int inp2_buffer[BUFSIZE]; /* processing data buffers */
int out1_buffer[BUFSIZE];
int out2_buffer[BUFSIZE];
int out3_buffer[BUFSIZE];
int out4_buffer[BUFSIZE*2];
int size = BUFSIZE;
int ain = MINGAIN;
int zhy=0;
int sk=64; /*sk代表所开的bufsize的大小,需修改它.输入文件sine.dat为32点,sine11.dat,
sin22.dat,sin33.dat,sin44.dat为64点的输入波形.*/
/* volume control variable */
unsigned int processingLoad = 1; /* processing routine load value */
/* Functions */
/*extern void load(unsigned int loadValue);*/
static int processing1(int *output1, int *output2);
static int processing2(int *output2, int *output3);
static int processing3(int *input1,int *output2,int *output4);
static int processing4(int *input2, int *output1);
static void dataIO1(void);
static void dataIO2(void);
int *input1 = &inp1_buffer[0];
int *input2 = &inp2_buffer[0];
int *output1 = &out1_buffer[0];
int *output2 = &out2_buffer[0];
int *output3 = &out3_buffer[0];
int *output4 = &out4_buffer[0];
/*
* ======== main ========
*/
void main()
{
int *input1 = &inp1_buffer[0];
int *input2 = &inp2_buffer[0];
int *output1 = &out1_buffer[0];
int *output2 = &out2_buffer[0];
int *output3 = &out3_buffer[0];
int *output4 = &out4_buffer[0];
asm(" setc INTM");
asm(" clrc SXM");
asm(" clrc OVM");
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
//*SCSR1=0x81fe; /* 40MHz */
puts("volume example started\n");
/* loop forever */
/*while(TRUE)
{ */
/*
* Read input data using a probe-point connected to a host file.
* Write output data to a graph connected through a probe-point.
*/
dataIO1();
dataIO2();
/* apply gain */
processing4(input2,output1);
processing1(output1, output2);
/*processing2(output2, output3); */
processing3(input1,output2,output4) ;
/*} */
}
/*
* ======== processing ========
*
* FUNCTION: apply signal processing transform to input signal.
*
* PARAMETERS: address of input and output buffers.
*
* RETURN VALUE: TRUE.
*/
static int processing4(int *input2,int *output1)
{ int m=sk;
for(;m>=0;m--)
{
*output1++ = (*input2++) * ain;
}
for(;(size-m)>0;m++)
{output1[m]=0;
}
/*load(processingLoad);*/
/*return(TRUE);*/
}
static int processing1(int *output1,int *output2)
{
int m=sk-1;
for(;m>0;m--)
{
*output2++ = *output1++ * ain;
}
/* additional processing load */
/*load(processingLoad); */
/*return(TRUE); */
}
static int processing2(int *output2, int *output3)
{ int n=zhy,m;
size=64;
for(;n<64;n++)
{ *output3++ = output2[n];
m=*output3;
}
/* for (;n>0;n--)
{ *output3++ = 0;
} */
/*load(processingLoad); */
return(TRUE);
}
static int processing3(int *input1,int *output2,int *output4)
{ int m=sk;
int y=zhy;
int z,x,w,i,f,g;
for(;(m-y)>0;)
{i=y;
x=0;
z=0;
f=y;
for(;i>=0;i--)
{g=input1[z]*output2[f];
x=x+g;
z++;
f--;
}
*output4++ = x;
y++;
}
m=sk;
y=sk-1;
w=m-zhy-1;
for(;m>0;m--)
{
y--;
i=y;
z=sk-1;
x=0;
f=sk-y;
for(;i>0;i--,z--,f++)
{g=input1[z]*output2[f];
x=x+g;
}
out4_buffer[w]=x;
w++;
}
/* return(TRUE);*/
}
/*
* ======== dataIO ========
*
* FUNCTION: read input signal and write processed output signal.
*
* PARAMETERS: none.
*
* RETURN VALUE: none.
*/
static void dataIO1()
{
/* do data I/O */
return;
}
static void dataIO2()
{
/* do data I/O */
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -