パソコンからDSPボードを制御するライブラリです。
プログラムの実行、データ転送などができます。
必要な定義はdsp21k.h
に書かれています。
したがって、プログラムの先頭付近に
#include "dsp21k.h"
を書いておきます。
パソコン側プログラムでの処理の流れは、以下のようになります。
dsp21k_open()
でDSPボードと接続
dsp21k_reset_bd()
でDSPボードをリセット
dsp21k_cfg_proc()
でDSPを初期化
dsp21k_dl_exe()
でプログラムをDSPに転送
dsp21k_start()
DSPプログラムを実行
dsp21k_reset_bd()
ボードをリセット (しなくても良い)
dsp21k_close()
終了
ヘッダファイルはC:\DSP21K32\inc
にあります。
コンパイラのインクルードファイルディレクトリに
C:\DSP21K32\inc
を加えます。
そのためには、
コンパイラへの引数に-IC:\DSP21K32\include
を追加します。
また、ライブラリはC:\DSP21K32\lib\hil32b.lib
です。
リンク時にライブラリを指定します。
具体的には、file.c
をコンパイルするには、
bcc32 -IC:\DSP21K32\inc file.c C:\DSP21K32\lib\hil32b.lib
を実行します。
とりあえず、「おまじない」だと思って、
上記に概要の処理を順に実行すれば良いでしょう。
dsp21k_open()
の引数processor_num
は
DSPの番号です。
これは、複数のDSPがある場合にどのDSPを処理対象にするのかを示します。
今回はDSPが一個なので、常に0
です。
/* Init processor - verify presence, initialize structure & hardware */ PDSP21K dsp21k_open(int processor_num); /* Close board, free up any memory allocated */ int dsp21k_close(PDSP21K board); /* reset processor */ int dsp21k_reset_bd(PDSP21K board); /* configure processor */ int dsp21k_cfg_proc(PDSP21K board); /* download coff file program */ int dsp21k_dl_exe(PDSP21K board, char *file); /* start processor */ int dsp21k_start(PDSP21K board);
ダウンロードはPC→DSP、アップロードはDSP→PCです。
dsp21k_start()
を実行してから、
dsp21k_get_addr()
で変数のアドレスを取得し、
dsp21k_{ul,dl}_type()
でデータを転送します。
DSP側の変数はグローバル変数でなければなりません。
変数名name
は、DSP用プログラムの変数名を示す文字列です。
Cの場合は、変数名の前に下線「_
」を付ける必要があります。
例えば、DSPのCプログラムが
float data;である場合には、 変数
data
の値を読み出すPC側プログラムは、
addr = dsp21k_get_addr(DSP, "_data"); data = dsp21k_ul_flt(DSP, addr);となります。
SHARC Ez-Kit Liteは最大115200bpsのシリアルポート接続なので、 大量のデータを続けて転送しようとすると失敗します。 それでも、512ワードのfloatデータを毎秒1回程度読み出すことはできます。
/* get address of named variable - prog/data/dram flags will be set */ unsigned long dsp21k_get_addr(PDSP21K board, char *name); /* upload/download int function prototypes */ int dsp21k_ul_int(PDSP21K board, unsigned long dsp_addr); void dsp21k_dl_int(PDSP21K board, unsigned long dsp_addr, int val); void dsp21k_ul_ints(PDSP21K board, unsigned long dsp_addr, unsigned int count, int *val); void dsp21k_dl_ints(PDSP21K board, unsigned long dsp_addr, unsigned int count, int *val); /* upload/download float function prototypes */ float dsp21k_ul_flt(PDSP21K board, unsigned long dsp_addr); void dsp21k_dl_flt(PDSP21K board, unsigned long dsp_addr, float val); void dsp21k_dl_flts(PDSP21K board, unsigned long dsp_addr, unsigned int count, float *val); void dsp21k_ul_flts(PDSP21K board, unsigned long dsp_addr, unsigned int count, float *val);
(作成: 2000年6月13日, 最終更新: 2000年10月31日)