Quantcast
Channel: JA1QVM
Viewing all articles
Browse latest Browse all 161

33FJ64GP802/FIRフィルタ・・・その3

$
0
0
いよいよ DSP命令の大本命 mac命令を動かそうと云う大仕事です。
その macを下に書いて置きます。

mac W4*W5,A,[W8]+=2,W4・・・今回はYメモリを使わないので短いです。

mac命令を動かすに当たり基本的設定があります。
まず Aアキュムレータを「空」にして、W4,W5,W8に数値を入れなくては・・・
あ、その前に・・・(昔クレジーキャッツの谷啓さんが此のフレーズを使って、其の後「ガチョ~ン」でしたっけ?)サンプリングしたデータを拾う所からやって見ます。

ADCのトリガ機能を使う為に、タイマ3の割込みを使います。

void __attribute__((interrupt, no_auto_psv)) _T3Interrupt(void){・・・タイマ3の割込み命令です。 此れもアセンブラで書きたいですが、解らないので [C]で書いてます

asm("bclr 0x0084,#8");・・・割込みフラグを[0]にする命令で、前回より速いので此方を使用

asm("mov 0x0300,W0");・・・ADCの結果が割込み毎に 0x0300に入るので其れをW0にコピー

asm("mov W0,[W8++]");・・・W8(0x0810からスタートした Xリングメモリ)の何処か?に W0の内容をコピーして、其の後 W8+2 
此の時 2加算された W8で指定されたアドレスはリングメモリ内で一番古いデータが入っている事になります
 
asm("mov #0x1600,W2");・・・#0x1600(16進数で係数 k0~k10が格納されている先頭アドレス数)を W2にコピー

asm("clr A,[W8]+=2,W4");・・・DSP命令:Aアキュムレータを空にして、W8で指定されたアドレス内容を W4にコピーします。 其の後 W8+2
尚、本来この命令の後に Yメモリに関して Xメモリと同じ内容が続きますが、今回は Yメモリを使わないので省略しました

asm("mov [W2++],W5");・・・W2で指定(0x1600)されたアドレス内容(k0)を W5にコピーして、其の後 W2+2

一応此処までで mac命令を動かす役者が揃いました。

asm("do #9,loop");・・・[C]で云えば for~nextの様な命令で、#(数値)+1回の繰り返しを次の loop:*****間までやります。 今回は 11tapなので [11-1=#10]で良い様な気がしますが、微妙な問題が有り [#9]です
尚、間の命令数は最低でも2個必要で1個の場合は [repeat]命令を使います

asm("mac W4*W5,A,[W8]+=2,W4");・・・DSP命令:やっと本命の登場です
リングメモリ(ディレイライン)で拾ったデータ/W4と [W2]の係数データ/W5を掛け算(積)して、[A]に格納します。 予め Aに数値が入っていれば、其れに加算します
そして [W8]の内容を W4にコピー(上書)して、其の後 W8+2

asm("loop:mov [W2++],W5");・・・[do***]命令のお終いの部分です
命令自体は W2で指定されたアドレス内容(kn)を W5にコピーして、其の後 W2+2
尚、[do #9,loop~loop***]の間を今回は #9+1=10回繰り返し演算をします
「何故 11回にしないのだ!」は、次を見れば納得かと・・・

asm("mac W4*W5,A");・・・DSP命令:W8が行き過ぎるので単独の積和演算だけです。 tap数が少ないと行き過ぎた事が結果として解りますが、多いと意外と気が付かず S/N比の悪化に悩みます

asm("sac A,W1");・・・DSP命令:Aアキュムレータに格納された積和演算結果の上部 16bitを W1にコピー

asm("mov W1,DAC1LDAT");・・・W1のデジタル値をアナログに変換して左出力

出来上がると簡単なようですが、途中でメゲて投げ出しそうになりました。
・・・3ヶ月は遊べましたが・・・
今回のプログラムを走らせた結果の測定データ下に貼って置きます。
イメージ 1

11tap/LPFですからコンナものでしょう。
でも tap数を増やすと、素晴らしい特性のフィルタに豹変します。
もっと巧い方法が有ると思いますが、同じ様な事を研究してる人に参考になれば幸いです。
因みに最大 tap数はサンプリング周波数にもよりますが、1000tap/20kHz 近く行きます。
充分実用レベルですね。

by    JA1QVM

Viewing all articles
Browse latest Browse all 161

Trending Articles