/***********************************************************************/
/* */
/* FILE :SSB_Q14_80taps.c */
/* DATE :Sun, Aug 21, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.0). */
/* */
/***********************************************************************/


#include <asmmacro.h> 
#include "start.h" 

unsigned char i; 
int data[160]={0};

long total;
int data_ad;

void set_timerC(void);
void set_AD10(void);

int fir[80]={

/*; ----------------------------------------------------------
; Band(1) Low:0.00000 High:0.04980 R= -53.33804
; Band(2) Low:0.07560 High:0.22420 R= 0.3662305
; Band(3) Low:0.25000 High:0.50000 R= -53.33804
;Q14 80taps  300-2800Hz --------------------------------------*/


14,-3,31,78,
51,-87,-199,-134,
29,70,-22,-20,
143,227,87,-45,
47,141,-54,-327,
-273,-22,-61,-330,
-238,278,502,167,
27,546,869,173,
-696,-450,192,-718,
-2803,-2843,778,4860,
4860,778,-2843,-2803,
-718,192,-450,-696,
173,869,546,27,
167,502,278,-238,
-330,-61,-22,-273,
-327,-54,141,47,
-45,87,227,143,
-20,-22,70,29,
-134,-199,-87,51,
78,31,-3,14


};


void main(void)
{
i=0;

set_CLK20();

set_LED();

set_timerC();

set_AD10();

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

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

}

void set_timerC(void)
{

pd3_5=1; //P3_5をタイマCの出力に設定
p3_5=1; //初期値=1


tcc00=0;

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

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

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

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

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

tcout5=1; //コンペア出力を  CMP1_2に設定


tm0=0; //カウンタ 初期値
tm1=1300; //大体、このあたりが、よさそう....

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

}

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

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

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

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

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

#pragma interrupt comp1_int (vect=16)


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

data_ad =(ad & 0x03ff) - 0x202;

if( (i/2)%2 ) data_ad =-data_ad; 

data[159-i] = data[79-i] = data_ad;

total=rmpa_w(0, 80, fir, data+79-i);


total=total>>14;

tm0=(int)(total+ 0x202); //13 cycles

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

adst=1; 

}