SH7047Fで、 AD_DAスループログラム等

1.AD_DAスループログラムを作ってみました。(C言語で)

プログラムは、ここです。

MATH

MATH

サンプリング周波数は、C言語で書いても、125KHzでした。

すんなり、出来た訳ではありません。

AD変換器等、外部周辺機器は、デフォルトでは、動作しないように、なっているのです。

MST.CR2.BIT._AD0=0;

これを入れないと、AD変換器が動作しません! (もっと、ハードウェアマニュアルを、しっかり読まんと、あかんわ...)

これを、理解するのに、3,4日、もやもやして居りました...

まあ、良しです。

2.問題発生!

AD0の割り込みを使ってみようとすると、

Htermが、うまく動作しませんでした。

AD0の割り込みを指定しているのに、

Htermでは、「A/D1 interruput occur!」と出て、A/D0のインタラプトにならないのです。

それではと、A/D1のインタラプトに、プログラムを書いても、動作しないのです...

ヴェクターアドレスも、

こう言う関数を設定して

#pragma inline_asm(setVect)

void setVect(unsigned x,unsigned* y )

{

mov.l r5,@r4

}

[HEW3のインラインアセンブラでは、最初の変数から、順番に

自動的に、R4からR5,R6と、割り当てられるので、便利です。]

INT_AD1のアドレスを設定してるのですが...

a =0x224+0xFFFFD160;

setVect(a,(void*)INT_ADI1);

何故か、動きません...

3.GCC developer liteで行こう

割り込みプログラムは、GCC developer lite の場合、楽です。

各ヘッダーファイルに、割り込みの原型が書いてありますから

その名前の通りの関数に、割り込みプログラムを書くと

それだけて、割り込みできます、楽チンやわあ。

勿論。7047Fの場合は

1.割り込みコントローラ(INTC)を設定する。

割り込みコントローラ(INTC)は、割り込み要因の優先順位を判定し、CPU への割り込み要求を制御します。

GCCのSHの場合は

割り込みマスク処理関数 SetSRReg が、定義済みですので

SetSRReg(0);

等に、設定します。

私は、この事に気付かないで、自前で、簡易的に作りましたけど...

void set_imask(char x )

{

asm("mov.b %0,r4\n"

"ldc r4,sr"::"m"(x) );

}

を作っておいて

set_imask(0); //割り込みビットマスクを0に設定しておく。AD0割り込みPriority=12(0xC)

\lbrack GCCのH8の場合は

EI(割り込み許可)、DI(割り込み禁止)が定義済みです。]

2.割り込みコントローラに設定した値より大きい値(1〜H'F)を、

該当する、インタラプトプライオリティレジスタA、D〜I、K

(IPRA、IPRD〜IPRI、IPRK)に設定します。

A/D変換なら、IPRG15〜IPRG12の4ビットに1〜H'Fの値を設定します。

A/D変換の場合なら

INTC.IPRG.BIT._AD01=0xC;//AD0 priority=12

これで割り込めます。

4.んっ! GCC developer Lite のGDBエミュレーションが動かん...

漸化式のsin波の発生で、DACへ送る値が0〜1024の範囲に入るか?

の確認のために

以下のプログラムを書いてみましたが

MATH

SH2のエミュレーションをGDBデバッガで、調べてみようとしましたが

MATH

OKを押し,RUNを押し

MATH

$\func{Si}$mulatorを選択すると

MATH

エラーが出ます。

ここで、挫けては、いけません!

GDBのメニューから、FileOpenを選び

MATH

「はい」を選び

MATH

当該のexeファイルを開くのです。

そして、RUNしましょう。

MATH

何と!、動きよるのです...

後は、ステップ等を選ぶと、他のウィンドも連動して値が変わります、バンザイ!

MATH

エミュレーションしか、GDBの使い方は、解りませぬが...

 

5.漸化式方式で、ツートーンジェネレータができる?

 この漸化式方式で、2波同時に出力してみました。

単に、続けて出力しただけです。

負荷は50Ωです。

1KHzと3KHz(設定値)の2波を出力してみましたが、結構きれいです。(フィルタも、何も通さない割には...)

 

設定の周波数(1,3KHZ)より、かなり下がっていますが

C言語ではなくて、

アセンブリ言語で書けば、たぶん、設定周波数に近いものに、なるでしょう。

 

H15.12.10

This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.