/***********************************************************************/
/* */
/* FILE :fir_BPF_60.c */
/* DATE :Fri, May 20, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.0). */
/* */
/***********************************************************************/

//実験の為に、Q7、Q10, Q14の係数を操作しています。


#include <asmmacro.h>

#include "start.h" 

int fir[60]={
//Q7
0,0,0,0,
0,0,0,0,
0,0,0,1,
1,-1,0,-1,
-2,2,2,-1,
1,-4,-6,6,
2,4,13,-23,
-30,35,35,-30,
-23,13,4,2,
6,-6,-4,1,
-1,2,2,-2,
-1,0,-1,1,
1,0,0,0,
0,0,0,0,
0,0,0,0 

//Q10
/*0,0,0,0, 
0,0,1,-2,
-1,1,-2,4,
6,-6,-2,-5,
-12,18,16,-7,
12,-33,-47,47,
19,32,102,-180,
-243,282,282,-243,
-180,102,32,19,
47,-47,-33,12,
-7,16,18,-12,
-5,-2,-6,6, 
4,-2,1,-1,
-2,1,0,0,
0,0,0,0 */
/*
//Q12
0,0,-1,1, 
0,1,4,-6, 
-5,2,-7,17, 
23,-24,-6,-19, 
-49,74,63,-27, 
48,-134,-186,187, 
78,127,407,-722, 
973,1128,1128,-973, 
-722,407,127,78 , 
187,-186,-134,48 , 
-27,63,74,-49, 
-19,-6,-24,23 , 
17,-7,2,-5, 
-6,4,1,0 ,
1,-1,0,0*/

//Q14 BPF
/*1,-2,-3,4, 
0,6,16,-25,
-20,9,-28,68, 
91,-95,-25,-75,
-197,294,253,-109,
191,-535,-746,749,
311,508,1627,-2888, 
-3892,4513,4513,-3892,
-2888,1627,508,311,
749,-746,-535,191,
-109,253,294,-197,
-75,-25,-95,91,
68,-28,9,-20,
-25,16,6,0,
4,-3,-2,1*/
};

int data[120]={0};

unsigned char i; 
long total;

void set_timerC(void);
void set_AD8(void);

void main(void)
{
i=0; 

set_CLK20();

set_LED();

set_timerC();

set_AD8();

asm("FSET I"); //割り込み許可

tcc00 = 1; //タイマCカウント制御開始ビットのセット
adst=1; //AD変換開始
while(1)
{
/* while(adst==1);

data[119-i] = data[59-i] = ad;

total=rmpa_w(0, 60, fir, data+59-i); 

if (++i==60)i=0;

total=total>>8;

tm0=(char)total;

adst=1; */
}

}

void set_timerC(void)
{

pd3_4=1; //P3_4をタイマCの出力に設定
p3_4=1; //初期値=1


tcc00=0;

tcc01=0; //タイマCカウントソース f1
tcc02=0;

tcc12=1; //タイマC カウンタリロード選択ビット 1

tcc13=1; //コンペア0選択ビット アウトプット=1

tcc14=0; //コンペア0一致で出力を L に設定
tcc15=1; 

tcc16=1; //コンペア1一致で出力を H にする
tcc17=1;

tcout4=1; //コンペア出力を  CMP1_1に設定

tm0=0; //カウンタ 初期値
tm1=256;

ilvl0_cmp1ic =1; // コンペア1割り込み優先レベル(レベル1)
ir_cmp1ic = 0; // コンペア1割り込み要求フラグクリア

}

void set_AD8(void)
{
pd1_0 =0; //p1_0 読み出しモード AN8
p1_0 =0; //初期値=0

ch2 =1; //AN8
ch1 =0;
ch0 =0;

md =0; //単発モード
adgsel0 =1; //Port1グループ選択
adcap =0; //ADSTビットで開始
cks0 =1; //f2を選択 cks1=0にする

bits =0; //8bit
// bits =1; //10bit
cks1 =0;
vcut =1; //Vref接続

smp =1; //サンプルホールドあり
}

#pragma interrupt comp1_int (vect=16)

void comp1_int(void)
{
while(adst==1); 

data[119-i] = data[59-i] = ad;

total=rmpa_w(0, 60, fir, data+59-i); 

total=total>>7;

tm0=(char)total;

if (++i==60)i=0;

adst=1; 

}