adspシリーズ adsp324-00a1 1 付属ソフトウェア概要...

97
ADSPシリーズ ADSP324-00A ソフトウェア・ユーザーズ・マニュアル

Upload: others

Post on 10-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

ADSPシリーズ

ADSP324-00A

ソフトウェア・ユーザーズ・マニュアル

Page 2: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS
Page 3: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

目 次

1 付属ソフトウェア概要................................................................. 1

1.1 付属ディスクの詳細 ............................................................ 2

2 モニタ .............................................................................. 5

2.1 概要 .......................................................................... 5

2.2 機能一覧 ...................................................................... 5

2.3 供給形態 ...................................................................... 5

2.4 メモリマップ .................................................................. 5

2.5 コマンド番号一覧表 ............................................................ 6

3 付属コマンド ........................................................................ 6

3.1 概要 .......................................................................... 6

3.2 コマンド詳細 .................................................................. 7

3.2.1 LOAD324.EXE:プログラムダウンローダー...................................... 7

3.2.2 RESET324.EXE:リセットコマンド............................................. 7

3.2.3 HOLD324.EXE:ホールドコマンド.............................................. 8

3.2.4 RUN324.EXE:ブートコマンド................................................. 8

3.2.5 DUMP324.EXE:メモリダンプ.................................................. 9

3.2.6 EDIT324.EXE:メモリエディット.............................................. 9

3.2.7 ROM324.EXE:ROM書き込み................................................ 10

3.2.8 CSTM324.EXE:ユーティリティーカスタマイザ................................. 11

3.2.9 STGEN324.EXE:C30用スタートアップモジュールジェネレータ ................ 12

4 付属ライブラリ ..................................................................... 13

4.1 概要 ......................................................................... 13

4.2 ライブラリの使用方法 ......................................................... 13

4.3 ライブラリ使用上の注意 ....................................................... 14

4.4 ライブラリ関数一覧 ........................................................... 15

4.5 関数使用可能状態一覧表 ....................................................... 17

4.6 関数詳細 ..................................................................... 18

5 BIOS ........................................................................... 52

5.1 概要 ......................................................................... 52

5.2 機能概略 ..................................................................... 52

5.3 使用方法 ..................................................................... 52

5.4 BIOS機能一覧 ............................................................. 52

5.5 BIOS詳細 ................................................................... 56

5.5.1 詳細のフォーマット凡例.................................................... 56

5.5.2 BIOSの詳細 ........................................................... 57

6 プログラム開発手順 ................................................................. 70

6.1 プログラム構成 ............................................................... 70

6.2 開発言語 ..................................................................... 70

6.3 プログラミング ............................................................... 70

6.4 ダウンロード ................................................................. 71

6.5 デバッグと実行 ............................................................... 71

6.6 運用 ......................................................................... 71

Page 4: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

7 プログラム開発と実行例 ............................................................. 72

7.1 概要......................................................................... 72

7.2 開発環境と実行環境 ........................................................... 72

7.2.1 コンパイラのインストール ................................................. 72

7.2.2 付属コマンドのインストール ............................................... 73

7.2.3 付属ライブラリのインストール ............................................. 73

7.2.4 BIOSのインストール ................................................... 73

7.3 プログラミング............................................................... 74

7.3.1 ホストプログラムの記述 ................................................... 74

7.3.2 DSPプログラムの記述 ................................................... 74

7.3.3 サンプルプログラムの説明 ................................................. 74

7.4 DSPプログラムのコンパイル ................................................. 75

7.5 DSPプログラムのアセンブル ................................................. 75

7.6 DSPプログラムのリンク ..................................................... 76

7.7 ホストプログラムのコンパイル ................................................. 77

7.8 ホストプログラムのリンク ..................................................... 77

7.9 プログラムの実行............................................................. 77

8 Q&A............................................................................. 78

Q:付属コマンドを使用したら“ボードが異常です”と表示されたのですが…。.............. 78

Q:ボードが実装してあるのに“ボードが未実装です”と表示されたのですが….............. 78

Q:プログラムが走っているかどうか見る方法はありませんか?............................ 79

Q:スモールモデルだとプログラムが動かないのですが….................................. 80

Q:付属ライブラリが動作しないのですが… ............................................. 82

Q:ボードにプログラムをロードするにはどうすればいいのですか?........................ 82

Q:MS-DOSのバッチコマンドでボードを起動できますか?............................ 83

Q:プログラムをROM化してボード単体で動作させたいのですが…........................ 83

Q:ボードを単体で使用する場合、電源はどのように供給するのですか?.................... 83

Q:モニタは何にどうやって使うのですか? ............................................. 84

Q:メモリは全てRAM!では、DSPはどうやって走るのですか?........................ 84

Q:Cで書いたプログラムはどうやって実行されるのですか?.............................. 85

Q:処理速度に不満があり、さらに高速化をしたいのですが….............................. 86

Q:プログラムをオンチップRAMに載せる方法はありますか?............................ 87

Q:データをオンチップRAMに載せる方法はありますか?................................ 88

Q:オンチップRAMには何を載せたらよいのですか?.................................... 90

Q:キャッシュを効果的に利用する方法はありますか?.................................... 91

Q:C言語とアセンブラ言語の混在はできますか?........................................ 92

Page 5: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

1

1 付属ソフトウェア概要

ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。

①モニタ

付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

P324-20(ソースレベルデバッガ)」とペアでユーザプログラムの実行やユーザーのレジ

スタの管理を行います。

②付属コマンド

ADSP324付属コマンドはMS-DOSのコマンドモードからADSP324をコント

ロールするDOSコマンドです。DSPボードにプログラムをダウンロードしたり、DSPの

実行をコントロールするなどのコマンドが用意されています。キーボードより直接行ったり、

バッチコマンドに組み込むなどの使い方ができます。

③付属ライブラリ

付属ライブラリはホスト上で動作するユーザプログラムからADSP324ボードをコント

ロール(又はアクセス)したり、DSPの実行をコントロールするなどの各種機能を実現する

関数が用意されています。

④BIOS

ADSP324ボード上で動作するユーザプログラムから使用するサブルーチン群です。D

SPボード用のアセンブラまたはC言語によるプログラムから呼び出して使用します。IOの

制御、ホストとの通信などのIOに関するハンドリングのほか、浮動小数点フォーマットのI

EEEとDSP間の変換の機能もサポートしています。

以上のサポートソフトウェアは、付属のディスクに次のようなディレクトリに分けて格納されて

います。

\

Uty

Bios BIOSプログラム

Fftlib FFTライブラリ

Lib C言語用ライブラリ他

Mon モニタプログラム

Sample サンプルプログラム

Umbchk UMBセットアッププログラム

Uty ユーティリティプログラム

Page 6: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

2

1.1 付属ディスクの詳細

ファイルの詳細は次の通りです。(注:サポートソフトウェアのバージョンにより、ファイルの内

容・明細などが異なる場合があります。その場合には、ルートディレクトリにドキュメントファイ

ルが格納されていますので、そちらを参照して下さい。)

サポートソフトウェア バージョン1.00.00

\

UTY

LOAD324.EXE

RESET324.EXE

HOLD324.EXE

RUN324.EXE

DUMP324.EXE

EDIT324.EXE

CSTM324.EXE

STGEN324.EXE

ROM324.EXE

SAMPLE

SIN.C

SIN.LNK

SIN.MAP

USER.CMD

READ.DOC

BIOS

CBIOS324.H

CBIOS324.LIB

USER.CMD

USERB.CMD

SAMPLE

INT3.C

SIO.C

TIM.C

SMPL.C

SMPL.LNK

SMPL.DOC

GEN.BAT

MON

MON324.MAP

MON324.OUT

SOURCE

MON324.ASM

HNDL.INC

BREAK.INC

次ページへ続く

前ページの続き

Page 7: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

3

HOST.INC

MACRO.INC

REG.INC

USHNDL.INC

WORK.INC

MON324.LNK

MON324.CMD

LIB

LIB324L.LIB

LIB324.H

LIB.DOC

READ.DOC

SOURCE

LIB324.C

LIB324.H

LIBGEN.BAT

SAMPLE

ALONE.C

ALONE.OBJ

ALONE.EXE

LIB324.H

HOST.C

HOST.LNK

HOST.OBJ

HOST.EXE

DSP.C

DSP.LNK

DSP.OBJ

DSP.MAP

DSP.OUT

MON324.OUT

USER.CMD

HOSTGEN.BAT

DSPGEN.BAT

SAMPLE.DOC

FFTLIB

RFFT.ASM

CFFT.ASM

IFFT.ASM

RWIN.ASM

CWIN.ASM

WINSETUP.ASM

POWER.ASM

次ページへ続く

前ページの続き

Page 8: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

4

POWER2.ASM

FFT2SUB.ASM

SINTBL.ASM

GLOBAL.ASM

SINGEN.C

MAIN1D.MK

MAIN1D.LNK

MAIN2D.MK

MAIN2D.C

MAIN2D.LNK

FFTLIB.LIB

FFTLIB.H

FFTLIB.DOC

WINDOWS

LIB32X.CPP

LIB32X.H

LIB32X.LIB

UTY32X.EXE

UBMCHK

UMBCHK.DOC

UMBCHK.EXE

Page 9: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

5

2 モニタ

2.1 概要

ADSP324モニタはDSP用のIPL(イニシャル・プログラム・ロダー)を兼ねた基本モ

ニタプログラムです。オプションソフト「ADSP324-20 ソースレベルデバッガ」とペア

でユーザプログラムの実行やユーザレジスタの管理をします。

モニタを単体で使用することはありませんが、モニタを用いればユーザーのプログラムからモニ

タ経由でオンチップRAMをアクセスできます。

また、RUN324.EXEとペアでユーザプログラムの実行を開始するのにも使用します。

2.2 機能一覧

モニタには次の機能があります。

① モニタのリセットとボードの初期化

② ユーザプログラムの実行

③ ユーザプログラムのステップ実行

④ BIOSの実行

⑤ メモリの読み出し

⑥ メモリの書き込み

⑦ メモリのクリア

⑧ メモリの転送

2.3 供給形態

COFFファイルフォーマットの実行形式ファイルで供給されます。LOAD324.EXE またはデバッ

ガでロードして使用します。ファイル名はMON32x.OUTです。

2.4 メモリマップ

ADSP324モニタの使用しているメモリ領域は次のとおりです。ユーザプログラムをリンク

する際にモニタとアドレスが重複しないように注意してください。

アドレス 用 途

000000h~00003Fh 割り込みベクタとトラップベクタ

000040h~000FFFh モニタプログラム領域

200000h~2001FFh モニタ作業領域

200200h~2007FFhホストとの通信領域(BIOS使用時)

または、ユーザー使用可能領域

但し、モニタをロード後は0h番地(リセットベクタ)と20h番地(TRAP0)以外の割り

込み・トラップベクタは書き換えても差し支えありません。

以上のメモリ配置を決定するリンカーコマンドファイルUSER?.CMDが付属ディスク内にあります

のでリンク時にはこれを使用して下さい。

Page 10: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

6

2.5 コマンド番号一覧表

番号 機能名 パラメータ リザルト

0 NOP なし RS1:バージョン番号

1 RESET なし なし

2 GO なし なし

3 STEP なし なし

4 (予約)

5 BIOS CALL なし なし

6 RESET STEP なし なし

7 RESET BREAK なし なし

8 READ MEMORY OP1:アドレス RS1:メモリ値

9 (予約)

10 WRITE MEMORY OP1:アドレス

OP2:書き込み値

なし

11 (予約)

12 FILL MEMORY OP1:先頭アドレス

OP2:長さ

OP3:書き込み値

なし

13 MOVE MEMORY OP1:先頭アドレス

OP2:長さ

OP3:転送先アドレス

なし

14 (予約)

15 (予約)

3 付属コマンド

3.1 概要

ADSP324付属コマンドはMS-DOSのコマンドモードからADSP324をコントロー

ルするDOSコマンドです。DSPボードにプログラムをダウンロードしたり、DSPの実行をコ

ントロールするなどのコマンドが用意されています。(キーボードから直接実行したり、バッチコマ

ンドに組み込むなどの使い方が出来ます。)

以下に用意されているコマンドの一覧を示します。

LOAD324.EXE プログラムのダウンロードをします。

RESET324.EXE ボードをリセットします。

HOLD324.EXE ボードをホールドします。

RUN324.EXE DSPの実行を開始します。

DUMP324.EXE DSPのメモリをダンプ(アップロード)します。

EDIT324.EXE DSPメモリの表示修正をします。

CSTM324.EXE 付属コマンドをカスタマイズします。

ROM324.EXE オプションのROMボードへプログラムを書き込みます。

STGEN324.EXE ブートモジュールを生成します。

Page 11: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

7

3.2 コマンド詳細

3.2.1 LOAD324.EXE:プログラムダウンローダー

*オブジェクトファイルをADSP324にダウンロードします。

書式:A>LOAD324 <file name1> <file_name2 ...> <switch>

ロードできるオブジェクトファイルはCOFFまたはHEXファイルです。ファイル名は 大1

6個まで同時に指定できます。

ファイル名の拡張子は不要です。.OUTまたは.B0~.B3を付加したファイル名を自動的に生成しま

す。

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/g : ロード後、実行を開始します。(デフォルトは停止のままです。)

/b : ロード後、ブートベクタをセットします。

/o : ロードアドレス重複チェックを禁止します。

/r : ロード前にDSPをリセットします。

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

3.2.2 RESET324.EXE:リセットコマンド

*ADSP324をリセットします。

書式:A>RESET324 <switch>

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/a : 全ボード番号(0~15のうち実装されているもの)を指定。

/h : リセット後、ホールド(実行待機)状態にします。

/r : 実装メモリの0クリアを行います。

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

Page 12: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

8

3.2.3 HOLD324.EXE:ホールドコマンド

*ADSP324の実行状態を表示/制御します。

書式:A>HOLD324 <switch>

スイッチを次に示します。

HOLD : ボードを停止状態(HOLD)にします。

RUN : ボードを実行状態にします。

RUN/HOLDいずれの指定もない場合は、現在の状態を表示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/a : 全ボード番号(0~15のうち実装されているもの)を指定します。

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

3.2.4 RUN324.EXE:ブートコマンド

*ADSP324を任意のアドレスから実行開始します。(このコマンドの実行にはユーザプログラ

ムのほか、ADSPモニタのロードが必要です。)

書式:A>RUN324 address <switch>

addressは実行開始番地を16進数で指定します。

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/a : 全ボード番号(0~15のうち実装されているもの)を指定します。

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

Page 13: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

9

3.2.5 DUMP324.EXE:メモリダンプ

*ADSP324のメモリ内容を表示(アップロード)します。

書式:A>DUMP324 top_address data_length <switch>

top_addressは、16進数・10進数・ラベルが使用できます。

data_lengthは、16進数または10進数で指定します。

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/h : インテル・ヘキサ・フォーマットで表示します。

/h:name : インテル・ヘキサ・フォーマットでファイル化します。

/t:name : 拡張Tek・ヘキサ・フォーマットでファイル化します。

ファイル名に拡張子は不要です。自動的に.B0~.B3を付加します。

/e : データをIEEE単精度浮動小数形式で表示します。

/f : データをTI単精度浮動小数形式で表示します。

/b : データをバイト単位で表示します。

/d : データを10進数で表示します。

/@:file : ラベルを検索するマップファイル(.map)を指定します。

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

3.2.6 EDIT324.EXE:メモリエディット

*ADSP324のメモリを表示、手入力による編集をします。

書式:A>EDIT324 <address> <switch>

addressは16進数で指定します。省略も可能です。

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/c : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/s:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/i:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

Page 14: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

10

3.2.7 ROM324.EXE:ROM書き込み

*ユーザプログラムをROMへ書き込みます。

書式1:A>ROM324 xxx.out <switch>

書式2:A>ROM324 @resp_file

xxx.out ...COFFファイル

resp_file ...レスポンスファイル

COFFファイルの拡張子は省略可能です。省略した場合は.outになります。レスポンスファイ

ルは引き数とスイッチをファイルから与えることができます。COFFファイル名の拡張子部分

が.romのファイルを作業ファイルとして使用しますのでxxx.romがカレントにある場合は注意して

下さい。

スイッチを次に示します。

/0~/15 : ボード番号を指定します。(デフォルトは0)

/k : 作業ファイルとして作成されるxxx.romファイルを保存します。

/l : 作業ファイルxxx.romをROMに書き込みます。

この時、入力COFFファイルの指定は無視されます。

.romファイルはROM書き込みイメージそのものなので、処理時間が短

縮されます。

/cn : キャッシュの制御を行います。(n=0で無効、n=1で有効です。)

デフォルトは/c1(有効)です。

/s:ssss : スタック領域をエントリします。デフォルトは809800hです。

/d:ssss : DINT処理ルーチンをエントリします。

/x:ssss : SIO送信ルーチンをエントリします。

/r:ssss : SIO受信ルーチンをエントリします。

/pn:ssss : トラップ(0~31)処理ルーチンをエントリします。

/tn:ssss : タイマ0/1割り込み処理ルーチンをエントリします。

/in:ssss : 外部割り込み(0~3)処理ルーチンをエントリします。

/ct : セグメント、I/Oアドレスのデフォルトをカスタマイズします。

/se:XXXX : セグメントアドレス指定(出荷時のデフォルトはE000)

/io:XXXX : I/Oアドレス指定(出荷時のデフォルトは0300)

xxxxは16進数4桁で指定して下さい。ssssは16進数または処理ルーチンのラベルです。

全ての割り込みエントリのデフォルトは、スタートアップのダミーベクタを示しています。(内部

は空)

Page 15: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

11

3.2.8 CSTM324.EXE:ユーティリティーカスタマイザ

*ADSP324ユーティリティをカスタマイズします。カスタマイズする目的はADSP324-

00ボードのI/Oアドレスとメモリ・ベースアドレスの設定を変更した場合、各コマンドのデ

フォルトをこれに合わせて変更します。

書式:A>CSTM324 uty_name <switch>

uty_name 特定の付属コマンドをカスタマイズする場合はこの引き数を指定します。

全コマンドをカスタマイズする場合にはこの引き数は省略し、次の/aスイッチを指定

します。

スイッチを次に示します。

/a : ADSP324付属ユーティリティをカスタマイズします。

/k : セグメント、I/Oアドレスのキー入力による指定。

/s:XXXX : セグメントアドレスのスイッチによる指定。

/i:XXXX : I/Oアドレスのスイッチによる指定。

但し、/kと/s,/iは同時に指定できません。

Page 16: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

12

3.2.9 STGEN324.EXE:C30用スタートアップモジュールジェネレータ

*リンカーの出力したマップファイルの情報を基にロードモジュール用のスタートアップモジュー

ル(COFFファイル)を出力します。

書式1:A>STGEN324 xxx.MAP ooo <switch>

書式2:A>STGEN324 @resp_file

xxx.MAP...リンカーマップファイル

ooo ...COFFファイル(省略可能)

resp_file ...レスポンスファイル

マップファイルの拡張子は省略可能です。省略時は上記拡張子が採用されます。

COFFファイルの拡張子は不要です。自動的に.OUTが付加されます。

COFFファイル名省略時のファイル名は、START.OUTが採用されます。

レスポンスファイルは引数とスイッチをファイルから与えることができます。書式1の方法と併

用が可能です。

スイッチを次に示します。

/cn : キャッシュの制御を行います。(n=0で無効、n=1で有効です。)

デフォルトは/c1(有効)です。

/s:nnnn : 確保するスタック領域をエントリします。デフォルトは809800hです。

/d:nnnn : DINT処理ルーチンをエントリします。

/x:nnnn : SIO送信ルーチンをエントリします。

/r:nnnn : SIO受信ルーチンをエントリします。

/pn:nnnn : トラップ(0~31)処理ルーチンをエントリします。

/tn:nnnn : タイマ0/1割り込み処理ルーチンをエントリします。

/in:nnnn : 外部割り込み(0~3)処理ルーチンをエントリします。

nnnnは16進数または処理ルーチンのラベルです。

全ての割り込みエントリのデフォルトは、スタートアップのダミーベクタを示しています。(内部

は空)

Page 17: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

13

4 付属ライブラリ

4.1 概要

付属ライブラリはホスト上で動作するユーザプログラムからADSP324ボードをコントロー

ルしたり、アクセスしたい場合に使用する関数ライブラリです。DSPボードにプログラムをダウ

ンロードしたり、DSPの実行をコントロールする機能など各種機能の関数が用意されています。

○ 初期化関数

○ ボード関連関数

○ ボード制御関数

○ ダウン/アップロード関数

○ 特殊制御関数

○ 通信関数

○ オフライン関数

付属ライブラリはC言語(MS-C)によるバージョンが用意されています。

4.2 ライブラリの使用方法

付属ライブラリは次の要素から構成されています。

○ インクルードファイル

○ ライブラリ・モジュール

○ ソースファイル(C)

インクルードファイルはユーザプログラムにてインクルードして下さい。関数のプロトタイプ宣

言のほか、データの構造体、定義定数などが宣言されています。

ライブラリ・モジュールはラージモデルで作成されています。リンカーでリンクする際に一緒に

リンクして下さい。

ソールファイルは改変してユーザプログラムの一部として使用頂いて結構です。(但し、改変され

た関数については動作の保証は致しかねます。)

Page 18: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

14

4.3 ライブラリ使用上の注意

ライブラリをより効果的かつ的確に使用して頂くためには注意すべき点がいくつかあります。以

下に記しますので、プログラミングの際のご参考にして下さい。

【1】このライブラリには、ライブラリの初期化関数があります。(A324_libinit( ))ほかのどの関

数の実行よりも先にこの初期化関数を実行する必要があります。これを行わないとライブラリ

が正しく動作しないほか、思わぬ動作をする場合がありますので注意して下さい。

【2】ADSP324ボードはホストから見た場合、マルチボード構成になります。従ってライブラ

リもそれに対応しています。

ホストからボードをアクセスする場合の基本的な手順は、①アクセスする対象のボードを選択

する ②ボードをアクセスする といった手順になります。

ところが、ボードを1枚しか使用しない場合には対象ボードの選択は初めに1回のみ行えばよ

く、毎回行う必要はありません。

そこで、ライブラリの使いやすさとオーバーヘッドの低減を考慮し、ボードをアクセスする関

数にはA:対象ボードを選択してからアクセスするタイプ、B:対象ボードを選択せず(現在

選択されているボードに対して)アクセスするタイプの2種類があります。また、対象ボード

の台数・アクセスするボードを切り換えるタイミングなどユーザプログラムの構造に応じて、

適当なタイプを選択して使用して下さい。

○ボードが1台の場合

初期化時に対象ボード番号を選択し、以後上記Bタイプの関数を使用する。

○ボードが複数の場合で、全ボードを平均的にアクセスする場合

初期化後、上記Aタイプの関数を使用する。

○ボードが複数で、特定のボードにアクセスが集中する場合

ボードごとの手続きを関数化し、関数の初めに対象ボードを選択します。関数内ではBタイ

プの関数を使用します。

*なおA/Bの関数の名称は、ほぼ同名でAタイプの関数名の先頭に _ を付けた名称がBタイ

プの関数の名称となります。

【3】ボードの状態には停止(ホールド)状態と実行(ラン)状態があります。ライブラリにはこの

状態について、①停止状態でのみ実行可能なもの ②実効状態でのみ実行可能なもの ③どち

らでも実行可能なもの の3種類があります。各関数の説明または使用可能状態一覧表を参照

の上、注意して使用して下さい。ボードの2つの状態はコントロールする関数がありますので、

状態を適時コントロールしながら使用します。

Page 19: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

15

4.4 ライブラリ関数一覧

○初期化関数

int A324_libinit(UI,UI); 関数ライブラリの初期化

○ボード関連関数

int A324_valid(UI); ボード実装確認

void A324_bdsel(UI); ボード選択

void A324_bdinit(UI); ボード初期化

void A324_bnksel(UI,UL); メモリバンク選択

○ボード制御関数

int A324_hold(UI); ボード停止

int A324_run(UI); ボード実行開始

int A324_start(UI,UL); ユーザプログラム実行開始

int A324_startm(UI,C *); ユーザプログラム実行開始

int A324_boot(UI,UL); 実行開始番地設定

void A324_reset(UI); ボードリセット

void A324_holdstus(UI); 実行停止確認

○ダウン/アップロード関数

int A324_putmem(UI,UL,UL); メモリからのダウンロード

void A324_getmem(UI,UL,UL); メモリへのアップロード

int A324_loadc(UI,C *); COFFファイルのダウンロード

int A324_loadm(UI,UL,UL,UL *); メモリからのダウンロード

int A324_savec(UI,UL,UL,UL,C *); COFFファイルへのアップロード

int A324_savem(UI,UL,UL,UL *); メモリへのアップロード

○特殊制御関数

int A324_ini0(UI); DSPボードへの割り込み発生

int A324_moniter(UI,A324_mon_prm *); モニタコマンド実行

int A324_bios(UI,A324_bios_prm *); DSP-BIOS実行

○通信関数

void A324_hinit(UI); 関数初期化

int A324_htxst(UI); 送信ステータス確認

int A324_htfr(UI,UL); コード送信

int A324_htfrdt(UI,UL,UI,C *); データ送信

int A324_hwit(UI); 送信相手完了確認

int A324_hrxst(UI); 受信ステータス確認

int A324_hrcv(UI,UL *); コード受信

int A324_hrcvdt(UI,UL *,UI *,C *); データ受信

void A324_hrdy(UI,I); 受信完了報告

Page 20: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

16

○オフライン関数

int A324_symbolm(C *,C *,UL *); マップからのシンボル取り出し

int A324_symbolc(C *,C *,UL *); COFFからのシンボル取り出し

int A324_entrym(C *,C *,UL *); マップからのエントリ取り出し

int A324_entryc(C *,UL *); COFFからのエントリ取り出し

C : char

I : int

UI : unsigned int

UL : unsigned long

Page 21: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

17

4.5 関数使用可能状態一覧表

【凡例】 ○:使用可能

×:使用不可能

→◎:使用可能かつ実行後この状態に移行する。

△:実行可能だが、本来はこの状態で実行すべき関数ではありません。

関数名 関数の機能 停止状態 実行状態

A324_bdinit( ) ボード初期化 ○ ○

A324_bdsel( ) ボード選択 ○ ○

A324_bios( ) DSP-BIOS実行 × ○

A324_bnksel( ) メモリバンク選択 ○ △

A324_boot( ) 実行開始番地設定 ○ ×

A324_entryc( ) COFFからのエントリ取り出し ○ ○

A324_entrym( ) マップからのエントリ取り出し ○ ○

A324_getmem( ) メモリへのアップロード ○ △

A324_hinit( ) 関数初期化 ○ ○

A324_hold( ) ホールド停止 →◎ ○

A324_holdstus( ) 実行停止確認 ○ ○

A324_hrxst( ) 受信ステータス確認 × ○

A324_hrcv( ) コード受信 × ○

A324_hrcvdt( ) データ受信 × ○

A324_hrdy( ) 受信完了報告 × ○

A324_htfr( ) コード送信 × ○

A324_htfrdt( ) データ送信 × ○

A324_htxst( ) 送信ステータス確認 × ○

A324_hwit( ) 送信相手完了確認 × ○

A324_int0( ) DSPボードへ割り込み発生 ○ ○

A324_libinit( ) 関数ライブラリの初期化 ○ ○

A324_loadc( ) COFFファイルのダウンロード ○ ×

A324_loadm( ) メモリからのダウンロード ○ ×

A324_moniter( ) モニタコマンド実行 × ○

A324_putmem( ) メモリからのダウンロード ○ △

A324_reset( ) ボードリセット ○ ○

A324_run( ) ボード実行開始 ○ →◎

A324_savec( ) COFFファイルへアップロード ○ ×

A324_savem( ) メモリへのアップロード ○ ×

A324_start( ) ユーザプログラム実行開始 × ○

A324_startm( ) ユーザプログラム実行開始 × ○

A324_symbolc( ) COFFからのシンボル取り出し ○ ○

A324_symbolm( ) マップからのシンボル取り出し ○ ○

A324_valid( ) ボード実装確認 ○ ○

Page 22: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

18

4.6 関数詳細

関数名 ボード初期化

記述 void A324_bdinit(board); /* 任意ボード */

void _A324_bdinit( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 ADSP324ボードをリセットし、初期化状態に保持します。

ボードリセット関数 A324_reset( )との違いは、リセット関数はリセット後ボードは実行を

開始するのに対し、初期化関数はリセット後、停止したままの状態を保持しています。電源の

投入後、まだ一度もプログラムをロードしていない場合、DSPのメモリは不定になっていま

す。この状態でボードを実行させるとDSPの暴走により以後ボードのコントロール(ホール

ドなど)が出来なくなる場合があります。電源投入後、初めてボードをアクセスする場合には、

まずこの関数を実行します。

戻り値 ありません。

参考 A324_reset( ),A324_hold( )

使用例 A324_bdinit( ); /* 初期化 */

A324_hold( ); /* ホールドします。 */

Page 23: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

19

関数名 ボード選択

記述 void A324_bdsel(board); /* 任意ボード */

void _A324_bdsel( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 アクセスの対象となるボードを選択します。

ボード指定機能の付いていない関数を使用するのに先立ち、対象ボードを決定します。

戻り値 ありません。

使用例 ボード番号0~3に同じプログラムをロードして起動する例です。

(注:エラー処理は省略してあります。)

関数 func_1( ) と func_2( ) は同じ処理をしますが、func_2( )のほうがオーバーヘッドが

小さく、また、func_2( )のほうが直感的で分りやすいでしょう。

func_1( )

{

unsigned int bn; /* ボード番号 */

for( bn = 0 ; bn < 4 ; ++bn){

{

A324_bdsel(bn); /* ボードを選択する */

_A324_hold( ); /* 現在のボードに対して */

_A324_loadc(“TEST”);

_A324_reset( );

_A324_run( );

}

}

func_2( )

{

unsigned int bn; /* ボード番号 */

for( bn = 0 ; bn < 4 ; ++bn){

{

A324_hold(bn); /* 各関数毎に指定 */

A324_loadc(bn,”TEST”);

A324_reset(bn);

A324_run(bn);

}

}

Page 24: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

20

関数名 DSP-BIOSの実行

記述 void A324_bios(board,prms); /* 任意ボード */

void _A324_bios(prms); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

A324_bios_prm *prms; /* BIOS引数と戻り値 */

説明 ADSP324のモニタに組み込まれたBIOSとモニタ経由でホストから実行します。

BIOSへ渡す機能番号と引数は構造体で渡します。

構造体はインクルードファイルに定義されています。モニタを使用してBIOSを実行

しますので、この関数を実行する時にはADSP324は次の状態にセットアップします。

1) BIOSの組み込まれているモニタをロードする。

2) ボードをリセットする。

3) ボードを実行状態にする。

戻り値 0 (NO_ERROR) 実行完了しました。

1 (ERROR) モニタをハンドリングができません。

参考 A324_monitor( )

使用例

#define BNO 0 /* ボード番号 */

#include “lib324.h”

A324_bios_prm prms;

/* まずここでモニタをロードします。 */

/* 詳細は A324_loadc( ) を参照してください。 */

A324_reset(BNO);

A324_run(BNO); /* エラー処理省略 */

/* パラメータセットアップ */

prms.RO = 75 /* IEEEからTI浮動小数へ */

prms.R2 = 0x2004001; /* アドレス */

prms.R3 = 100; /* 長さ */

if(A324_bios(BNO,&prms))

printf(“BIOS(monitor) exec error\n”);

else

printf(“function complete\n”);

Page 25: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

21

関数名 メモリバンク選択

記述 void A324_bnksel(board,address);/* 任意ボード */

void _A324_bnksel(address); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long address; /* メモリアドレス */

説明 停止モードで、DSPの外部メモリをアクセスする場合のアドレスをボードに対して設定しま

す。DSPを停止した状態で使用してください。

戻り値 ありません。

使用例 DSPの外部メモリをホストが直接アクセスします。

#include <dos.h>

#include <stdio.h>

#define A324_offset(ad) (ad & 0xfff)

unsigned long _far *ptr;

unsigned long Address,offset,data;

ptr =(long _far *)((unsigned long)ADSP_SEG * 0x10000L);

Address = 0x12345; /* メモリアドレス */

A324_bdsel(BN0); /* 対象ボードを選択する */

_A324_hold( ); /* 停止モードにする */

_A324_bnksel(Address); /* メモリバンクを選択 */

offset = A324_offset(Address) /* オフセットを計算 */

data = *(ptr + offset); /* データを取得 */

Page 26: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

22

関数名 実行開始番地設定

記述 int A324_boot(board,address); /* 任意ボード */

int _A324_boot(address); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long address; /* メモリアドレス */

説明 DSPボードのリセットベクタを設定し、実行を開始します。次回からはリセットのみで再起

動できます。

この関数を用いてDSPを任意の番地から実行させることができます。実行させるのにモニタ

を使用しないでリセットと同時に実行を開始します。但し、DSPの初期化などをユーザプロ

グラムが行う必要があり、とくにプライマリ・バス制御レジスタの初期化はメモリアクセスの

ウェイト数を決定する重要なレジスタで、必ず初期化が必要です。従って、その点を考慮した

プログラムに対してのみ使用してください。Cで記述したプログラムの場合にはmain( )の

初の部分でその初期化をすることも可能です。

戻り値 0 (NO_ERROR) 正常に終了しました。

-1(ERROR) 異常が発生しました。原因は次のいずれかです。

1) ボードの停止実行状態の切り替えができない。

2) ボードのメモリにデータが書き込めない。

使用例

#define BN0 0

unsigned long adrs;

adrs = BOOT_ADRS;

A324_boot(BN0,adrs);

Page 27: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

23

関数名 COFFファイルからのエントリ取り出し

記述 int A324_entryc(name,entry);

引数 char *name; /* COFFファイル名 */

unsigned long entry; /* エントリ番地 */

説明 COFFフォーマットのオブジェクトファイルから起動番地を取得します。COFFファイル

にはオブジェクトコードの他にプログラムの実行開始番地情報も格納されています。これを取

り出し、モニタに与えることによりCOFFファイルを正確に起動できます。

マップファイルからも同様にエントリ番地が取り出せます。

戻り値 0 (NO_ERROR) 正常に終了しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1)ファイルが見つからない。

2) ファイルが異常である。

3) ファイルはCOFFファイルではない。

参考 A324_entrym( )

使用例

char *name;

unsigned long adrs;

name = ”TEST.OUT”;

if(A324_entryc(name,&adrs))

printf(”entry get error\n”);

else

printf(”entry address is %08lX\n”,adrs);

Page 28: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

24

関数名 マップからのエントリ取り出し

記述 int A324_entrym(file_name,entry_name,entry);

引数 char *file_name; /* ファイル名 */

char *entry_name; /* エントリシンボル名 */

unsigned long entry; /* エントリ番地 */

説明 DSPプログラムのマップファイルから起動番地を取得します。SDPのプログラム開発時に

リンカーが出力したマップファイルを取り込み、エントリポイントのシンボルとアドレスを取

得します。

COFFファイルからも同様にエントリ番地が取り出せます。

戻り値 0 (NO_ERROR) 正常に終了しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1)ファイルが見つからない。

2)ファイルが異常である。

3)ファイルはマップファイルではない。

参考 A324_entryc( )

使用例

char *file_name; /* ファイル名 */

char entry_name[120]; /* エントリシンボル名 */

unsigned long adrs; /* エントリアドレス */

file_name = ”TEST.MAP”;

if(A324_entrym(file_name,entry_name,&adrs))

printf(”entry get error\n”);

else{

printf(”entry symbol[%s]\n”,entry_name);

printf(”entry address %08lX\n”,adrs);

Page 29: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

25

関数名 DSPメモリからアップロード

記述 void A324_getmem(board,adrs,buff); /* 任意ボード */

void _A324_getmem(adrs,buff); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long adrs; /* メモリのアドレス */

unsigned long *buff; /* メモリバッファ */

説明 DSPの外部メモリからホストへのメモリへデータをアップロードします。データ長は1ワー

ドです。

戻り値 ありません。

参考 A324_putmem( )

使用例

#include <malloc.h>

#define BN0 0

#define LEN 100

unsigned long *buff,*ptr;

unsigned long adrs;

int c;

if(buff = (unsigned long *)malloc(sizeof(long)*LEN))= = NULL){

printf(”no more memory.\n”);

exit(1);

A324_bdsel(BN0);

for(ptr = buff,c = 0;c < LEN;++c)

_A324_getmem(adrs++,ptr++);

Page 30: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

26

関数名 関数初期化

記述 void A324_hinit(board); /* 任意ボード */

void _A324_hinit( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 対DSP通信関数の初期化をします。

DSPプログラムとオンラインで通信をする場合、 初にこの関数にて初期化する必要があり

ます。

戻り値 ありません。

参考 A324_hrv( ),A324_hrcvdt( ),A324_htfr( ),A324_htfrdt( )

使用例

#define BN0 0

A324_hinit(BN0);

Page 31: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

27

関数名 ボード停止

記述 int A324_hold(board); /* 任意ボード */

int _A324_hold( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPボードを停止状態にします。

DSPの外部メモリを直接ホストからアクセスする場合にこの機能を使用します。DSP自体

はホールド機能により一旦停止されるのみで、後に実行状態にすることにより実行を継続でき

ます。

戻り値 0 (NO_ERROR) 正常に終了しました。

-1(ERROR) ボードが異常です。

参考 A324_run( ),A324_holdstus( )

使用例

if(A324_hold(BN0))

printf(”board hold error.\n”);

else

printf(”board hold.\n”);

Page 32: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

28

関数名 実行停止確認

記述 int A324_holdstus(board); /* 任意ボード */

int _A324_holdstus( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 ボードの停止状態を取得します。

ボードがホールドしているか、または実行しているかをテストし結果を返します。A324_run

( )、A324_hold( )により正しく制御された後にこの関数を実行した場合はそれぞれ停止・

実行状態が回答されます。

停止・実行状態が A324_run( )、A324_hold( )関数または同等の機能の関数を使用せず、

DSPが勝手に状態を遷移することはありません。従って、シーケンシャルなプログラムの場

合には特にこの関数を使用する必要はありません。この関数の用途は未知のボード状態を取得

したい時などです。

戻り値 1(TRUE) 停止しています。

0(FALSE) 実行しています。

参考 A324_hold( ),A324_run( )

使用例

#define BN0 0

unsigned int bn;

if(A324_holdstus(bn))

printf(”board number %d is HOLDing\n”,bn);

else

printf(”board number %d is RUNing\n”,bn);

Page 33: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

29

関数名 受信ステータス確認

記述 int A324_hrxst(board); /* 任意ボード */

int _A324_hrxst( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPがホストへのデータ送信を開始しているかを確認します。

ホストとDSP間のハンドリングはCPUでソフト的に行っています。ホスト側が受信関数を

実行しない場合、DSP側の送信処理は完了しません。ランダムなタイミングでDSPからホ

ストへデータの送信が行われる場合、この関数でDSPの送信開始をしていた場合は受信処理

を実行し、そうでない場合は別の処理を行ってもかまいません。

戻り値 0 DSPは送信を開始していません。

0以外 DSPは送信を開始しています。

参考 A324_hrcv( ),A324_hrcvdt( )

使用例

#define BN0 0

A324_hinit(BN0);

if(A324_hrcv(BN0))

A324_hrcv(BN0,code);

else

/*…*/

Page 34: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

30

関数名 コード受信

記述 int A324_hrcv(board,code); /* 任意ボード */

int _A324_hrcv(code); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPから1ワードのコードを受信します。

DSPからホストへ渡すデータが1ワードの場合、この関数を使用します。機能的には

A324_hrcvdt( )関数のデータ長が0の場合と同じですが、あらかじめデータ長が0とわかっ

ている場合にはこの関数の方がオーバーヘッドが小さくなります。

受信処理中にソフトタイマでタイムアップを監視する機能とCTRL+Cによる中断を検出

する機能があります。ソース上に定数になっていて任意による変更が可能です。それぞれ次の

定数定義を変更してください。

CTRL_C_LOOP 1でCTRL+Cの検出をします。

出荷時には1になっています。

ENDLESS_LOOP 1でハンドリングを完了するまで関数を終了しません。

出荷時には0になっています。

戻り値 0(NO_ERROR) 正常に受信しました。

-1(ERROR) 受信中にタイムアップしました。

DSPが送信を開始していないか、または停止しています。

参考 A324_hrcvdt( )

使用例

unsigned long code;

if(A324_hrcv(BN0,&code))

printf(”recieve error\n”);

else

printf(”receive %08lx\n”,code);

Page 35: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

31

関数名 データ受信

記述 int A324_hrcvdt(board,code,len,data); /* 任意ボード */

int _A324_hrcvdt(code,len,data); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long *code; /* コード受取り */

unsigned int *len; /* データ長受取り */

unsigned long *data; /* データ受取バッファ */

説明 DSPから1ワードのコードと任意の長さのデータを受信します。

DSPからホストへ渡すデータが複数ワードの場合この関数を使用します。データは1ワード

4バイトのデータ、すなわちlongまたはfloatに限られます。DSPのワード幅が4

バイトであり、DSPのワード数が転送データ長の単位になります。

データ長はDSP側が送信をする時点で指定します。データ長はMAX1700ワードです。

データ受取バッファは予め充分な長さを確保しておく必要があります。

受信処理中にソフトタイマでタイムアップを監視する機能とCTRL+Cによる中断を検出

する機能があります。ソース上に定数になっていて、任意に変更が可能です。それぞれ次の定

数定義を変更してください。

CTRL_C_DETECT 1でCTRL+Cの検出をします。

出荷時には1になっています。

ENDLESS_LOOP 1でハンドリングを完了するまで関数を終了しません。

出荷時には0になっています。

戻り値 0(NO_ERROR) 正常に受信しました。

-1(ERROR) 受信中にタイムアップしました。

DSPが送信を開始していないか、または停止しています。

参考 A324_hrcv( )

使用例

unsigned long code;

unsigned int len;

float data[1700];

if(A324_hrcvdt(BN0,&code,&len,(unsigned long*)data))

printf(”recieve error\n”);

else

printf(”receive code %08lx\n”,code);

printf(”receive %d datas\n”,len);

Page 36: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

32

関数名 受信完了報告

記述 void A324_hrdy(board,stus); /* 任意ボード */

void _A324_hrdy(stus); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

int stus;

説明 DSPからデータ(またはコード)を受信したら、次にこの完了報告をします。これによりD

SPはホストが処理を完了したことを検出できます。

戻り値 ありません。

参考 A324_hrxst( ),A324_hrcv( ),A324_hrcvdt( )

使用例

#define BN0 0

unsigned long code;

int st;

A324_hrcv(BN0,&code);

A324_hrdy(BN0)

Page 37: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

33

関数名 コード送信

記述 int A324_htfr(board,code); /* 任意ボード */

int _A324_htfr(code); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long code; /* 送信コード */

説明 DSPへ1ワードのコードを送信します。

ホストからDSPへ渡すデータが1ワードの場合この関数を使用します。機能的には

A324_tfrvdt( )関数のデータ長が0の場合と同じですが、予めデータ長が0とわかっている

場合にはこの関数の方がオーバーヘッドが小さくなります。

送信処理中にソフトタイマでタイムアップを監視する機能とCTRL+Cによる中断を検出

する機能があります。ソース上に定数になっており任意に変更が可能です。それぞれ次の定数

定義を変更してください。

CTRL_C_DETECT 1でCTRL+Cの検出をします。

出荷時には1になっています。

ENDLESS_LOOP 1でハンドリングを完了するまで関数を終了しません。

出荷時には0になっています。

戻り値 0(NO_ERROR) 正常に送信しました。

-1(ERROR) 送信中にタイムアップしました。

DSPが受信を開始してなないかまたは停止しています。

参考 A324_htfrdt( )

使用例

#define BN0 0

unsigned long code;

code = 0x1234l;

if(A324_htfr(BN0,code))

printf(”transfer error\n”);

else

printf(”transfer complete\n”);

Page 38: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

34

関数名 データ送信

記述 int A324_htfrdt(board,code,len,data); /* 任意ボード */

int _A324_htfrdt(code,len,data); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long code; /* 送信コード */

unsigned int len; /* 送信データ長 */

unsigned long *data; /* 送信データーバッファ */

説明 DSPへ1ワードのコードと任意の長さのデータを送信します。

ホストからDSPへ渡すデータが複数ワードの場合この関数を使用します。データは1ワード

4バイトのデータ、即ちlongまたはfloatに限られます。DSPのワード幅が4バイ

トであり、DSPのワード数が転送データ長の単位になります。データ長はホスト側が送信を

する時点で指定します。データ長はMAX1700ワードです。DSP側のデータ受取バッフ

ァは充分な長さが必要です。

送信処理中にソフトタイマでタイムアップを監視する機能とCTRL+Cによる中断を検出

する機能があります。ソース上に定数になっており、任意に変更が可能です。それぞれ次の定

数定義を変更してください。

CTRL_C_DETECT 1でCTRL+Cの検出をします。

出荷時には1になっています。

ENDLESS_LOOP 1でハンドリングを完了するまで関数を終了しません。

出荷時には0になっています。

戻り値 0(NO_ERROR) 正常に送信しました。

-1(ERROR) 送信中にタイムアップしました。

DSPが受信を開始してなないかまたは停止しています。

参考 A324_htfr( )

使用例

#define BN0 0

unsigned long code;

unsigned long data[1700];

unsigned int len;

len = 100;

for(c = 0;c < 100;++c)

data[c]= c;

code = 0x1234l;

if(A324_htfrdt(BN0,code,len,data))

printf(”transfer error\n”);

else

printf(”transfer complete\n”);

Page 39: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

35

関数名 送信ステータス確認

記述 int A324_htxst(board); /* 任意ボード */

int _A324_htxst( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPへのデータ送信のステータスを取得します。

DSPとのデータ授受は双方向性の同一領域を介して行っています。先に送ったデータをまだ

DSPが取り出しを完了していない場合は、ホストは次のデータの送信を開始することはでき

ません。そのため送信に先だって、この関数を使用して通信バッファが空であることを確認し

ます。

戻り値 0 DSPへの送信を開始できます。

(DSPが受信完了報告を行った場合、または次のデータの受

信を開始している場合。)

0以外 DSPへの送信を開始できません。

参考 A324_htfr( ),A324_htfrdt( )

使用例

Page 40: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

36

関数名 送信相手完了確認

記述 int A324_hwit(board); /* 任意ボード */

int _A324_hwit( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPへのデータの送信後、DSPが受信の後処理を完了したかどうかのタイミングを同期す

る目的で使用します。例えば、DSP側がデータ受信後、なんらかの処理を行いホストはその

完了を待機してから次の処理を開始する場合などに使用します。

この関数はシーケンシャルにデータを送信するだけの場合には特に実行する必要はありませ

ん。

戻り値 0 DSPは送信処理を完了しました。

(DSPが受信完了報告を行った場合、または次のデータの受信

を開始している場合。)

0以外 DSPは送信後の処理中です。

参考 A324_htfr( ),A324_tfrdt( )

使用例

#define BN0 0

unsigned long code;

unsigned long data[1700];

unsigned int len;

if(A324_htfrdt(BN0,code,len,data))

exit(1);

for(;;)

if( !A324_hwit(BN0))break;

printf(”DSP”s receive porccess complete\n”);

Page 41: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

37

関数名 DSPボードへ割り込み発生

記述 int A324_int0(board); /* 任意ボード */

int _A324_int0( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 ホストからDSPに対して割り込みを発生します。ホストからDSPへの同期に利用できます。

ハード的なINT0割り込みです。

ADSP324-20(デバッガ)はこの機能を使用していますので、この関数を使用する場

合のユーザプログラムのデバッグは行えません。ホストとDSP間の同期が、リアルタイムで

かつ速度が要求される場合を除いて極力A324_hxxxx関数を使用してください。

戻り値 0(NO_ERROR) 常に0

使用例

#define BN0 0

A324_int0(BN0)

Page 42: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

38

関数名 関数ライブラリ初期化

記述 int A324_libinit(seg,io);

引数 unsigned int seg; /* メモリアドレス */

unsigned int io; /* IOポートアドレス */

説明 ライブラリの初期化とボードの実装確認をします。

本ライブラリを使用するのに先だって、必ず実行してください。

メモリアドレスとIOポートアドレスはボードのディップスイッチの設定により変更できま

す。ハードウェア・ユーザーズマニュアルを参照のうえ、ボードの設定と同一にしてください。

io :DSW102,103の設定

seg :DSW101の設定

segに与えるアドレスはアドレス値の際、下位14ビットを除いた10ビット分を与えます。

ボードの工場出荷時設定の場合DSWの設定は0E0000hに設定されていますから、se

gには0E000hを与えます。

戻り値 0(NO_ERROR) 正常終了しました。

-1(ERROR) 異常終了しました。有効なボードが1枚も検出できませんでし

た。(注1)

使用例

#define seg 0xe000 /* メモリアドレス */

#define IO 0xe300 /* IOドレス */

if(A324_libinit(SEG,IO))

printf(”no avtive board detect\n”);

exit(1);

else

{ printf(”init complete\n”);}

(注1) 異常終了する原因として次のような事が考えられます。

① ボードのIOアドレス設定(DSW102,DSW103)と引数ioが一致していない。

② ボードのメモリベース設定(DSW101)と引数segが一致していない。

③ ボードのIOまたはメモリとほかのボードとが重複している。

④ IO拡張ラックに接続した場合に、ラックのメモリ領域に関するディップスイッチの設定

が正しくなされていない。

Page 43: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

39

関数名 COFFファイルのダウンロード

記述 int A324_loadc(board,name); /* 任意ボード */

int _A324_loadc(name); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

char name; /* ファイル名 */

説明 COFFフォーマットのオブジェクトファイルをDSPの外部メモリにダウンロードします。

ロード可能なファイルはリンカーが出力した実行形式のモジュールです。ロード可能な領域は

DSPの外部メモリ(0番地からメモリの実装されている範囲)です。

但し、既にロードされている領域への重複したロードの検出は行いません。モニタがすでにロ

ードされている場合など、ロードするアドレスには充分注意してください。

戻り値 0(NO_ERROR) 正常にロードが完了しました。

-1(ERROR) ロード異常です。原因は次のいずれかです。

1) ファイルが見つからない。

2) ファイルはCOFFファイルではない。

3) ファイルが異常。

4) メモリ書き込みの異常。

参考 A324_loadm( ),A324_savec( )

使用例

#define BN0 0

char *coff_name;

coff_name = ”TEST.OUT;”

if(A324_loadc(BN0,coff_name))

printf(”load error\n”);

exit(1);

else

printf(”load complete\n”);

Page 44: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

40

関数名 メモリからのダウンロード

記述 int A324_loadm(board,adrs,len,code); /* 任意ボード */

int _A324_loadm(adrs,len,code); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long adrs; /* ロードアドレス */

unsigned long len; /* データ長 */

unsigned long *code; /* データーバッファ */

説明 ホストのメモリに蓄えられたデータなどをDSPの外部メモリにダウンロードします。ロード

するデータ長はDSPから見たワード数を指定します。ロードするデータの型はfloatま

たはlongです。

ロード可能な領域はDSPの外部メモリ(0番地からメモリの実装されている範囲)です。但

し、すでにロードされている領域への重複したロードの検出は行いません。モニタがすでにロ

ードされている場合など、ロードするアドレスには充分注意してください。

戻り値 0(NO_ERROR) 正常にロードが完了しました。

-1(ERROR) ロード異常です。メモリに正しく書き込めません。

参考 A324_loadc( )

使用例

#define BN0 0

#define LEN 1024

unsigned long adrs;

unsigned long len;

float data[LEN];

len = LEN;

adrs = 0x2000;

if(A324_loadm(BN0,adrs,len,(unsigned long*)data))

printf(”load error\n”);

exit(1);

else

printf(”load complete\n”);

Page 45: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

41

関数名 モニタコマンド実行

記述 int A324_moniter(board,prms); /* 任意ボード */

int _A324_moniter(prms); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

A324_mon_prm *prms; /* モニタ引数・戻り値 */

説明 モニタとハンドリングをし、モニタコマンドを実行します。

モニタを使用したユーザプログラムの起動はこの処理を使用しています。

モニタチップメモリのアクセスはこの関数を使用します。

モニタへの引数・戻り値は構造体で与えます。引数構造体はヘッダファイルに定義してありま

す。コマンド番号も同じく構造体に定義されています。

戻り値 0(NO_ERROR) 正常に終了しました。

-1(ERROR) 異常終了しました。モニタとのハンドリングができません。

原因は次のいずれかです。

1) モニタがロードしていない。

2) モニタが破壊されている。

3) ボードが停止している。

使用例 オンチップメモリの読み出しをします。

#include ”lib324.h”

#define BN0 0

unsigned long adrs;

unsigned long value;

A324_mon_prm prms; /* モニタ引数・戻り値 */

prms.code = MC_READ; /* メモリ読みだし */

prms.prm1 = 0x809800; /* アドレス */

if(A324_moniter(BN0,&prms)

printf(”moniter error\n”);

exit(1);

printf(”address : %81x\n”,prms.prm1);

printf(”data : %81x\n”,prms.res1);/* 読みだした値 /*

Page 46: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

42

関数名 DSPメモリへのダウンロード

記述 int A324_putmem(board,adrs,data); /* 任意ボード */

int _A324_putmem(adrs,data); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long adrs; /* メモリのアドレス */

unsigned long data; /* メモリデータ */

説明 ホストのメモリからDSPの外部メモリへデータをダウンロードします。データ長は1ワード

です。

戻り値 0(NO_ERROR) 正常終了しました。

-1(ERROR) ベリファイエラーです。

参考 A324_getmem( )

使用例

#define BN0 0

#define LEN 100

unsigned long buff[LEN],*ptr;

unsigned long adrs;

int c;

A324_bdsel(BN0);

for(ptr = buff,c = 0;c < LEN;++c)

_A324_putmem(adrs++,*ptr++);

Page 47: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

43

関数名 ボードリセット

記述 void A324_reset(board); /* 任意ボード */

void _A324_reset( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 ADSP324をリセットします。

ホールドの制御は行っていません。停止状態でリセットした場合はリセット後も停止状態を保

持しています。また、実行状態でリセットされた場合にはリセットベクタ(0番地)の指標す

るアドレスから実行を開始します。

リセットされたかどうかの確認は直接的には行えません。

戻り値 ありません。

使用例

#define BN0 0

A324_reset(BN0);

Page 48: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

44

関数名 ボード実行開始

記述 int A324_run(board); /* 任意ボード */

int _A324_run( ); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

説明 DSPボードを実行状態にします。

戻り値 0(NO_ERROR) 実行開始しました。

-1(ERROR) ボードの異常です。

参考 A324_hold,A324_holdstus( )

使用例

#define BN0 0

if(A324_run(BN0))

printf(”board error\n”);

else

printf(”board running\n”);

Page 49: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

45

関数名 COFFファイルへのアップロード

記述 int A324_savec(bd,ad,size,entry,name); /* 任意ボード */

int _A324_savec(ad,size,entry,name); /* 現在ボード */

引数 unsigned int bd; /* ボード番号 */

unsigned long ad; /* 先頭番地 */

unsigned long size; /* ワードサイズ */

unsigned long entry; /* スタート番地 */

char *name; /* ファイル名 */

説明 DSPの外部メモリをCOFFファイルに格納します。

格納時に必要に応じてプログラムのスタート番地を指示できます。プログラムだけでなく、デ

ータ領域もセーブできます。

格納したファイルはダウンロード関数A324_loadc( )などでロードできます。

戻り値 0(NO_ERROR) 正常終了しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1) ファイル名不正でファイルがオープンできない。

2) 同名ファイルがあり、かつリードオンリーでファイルが

オープンできない。

3) ディスクの空き領域が不足している。

参考 A324_savem( ),A324_loadc( )

使用例

#define BN0 0

unsigned long adrs; /* 先頭番地 */

unsigned long size; /* ワードサイズ */

unsigned long entry; /* スタート番地 */

char *name; /* ファイル名 */

adrs = 0x400;

size = 0x200;

entry = 0; /* 不要なら0を指定 */

name = ”RESULT.OUT”;

if(A324_savec(BN0,adrs,size,entry,name))

printf(”COFF file write error\n”);

else

printf(”COFF file write complete\n”);

Page 50: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

46

関数名 メモリへのアップロード

記述 int A324_savem(board,adrs,size,buff); /* 任意ボード */

int _A324_savem(adrs,size,buff); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long adrs; /* 先頭番地 */

unsigned int size; /* ワードサイズ */

unsigned long *buff; /* データーバッファ */

説明 DSPの外部メモリのデータなどをホストのメモリにアップロードします。

アップロードするデータ長はDSPから見たワード数を指定します。

アップするデータ型はfloatまたはlongです。

アップロード可能な領域はDSPの外部メモリ(0番地からメモリの実装されている範囲)で

す。

戻り値 0(NO_ERROR) 常に0。

参考 A324_loadm( ),A324_savec( )

使用例

#define BN0 0

#define LEN 100

unsigned long adrs;

unsigned long buff[LEN];

unsigned int len;

len = LEN;

adrs = 0x2000;

A324_savem(BN0,adrs,len,buff);

Page 51: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

47

関数名 ユーザプログラム実行開始 (#1)

記述 int A324_start(board,adrs); /* 任意ボード */

int _A324_start(adrs); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

unsigned long adrs;

説明 DSPボードのモニタとハンドリングをしてユーザプログラムを起動します。

ユーザプログラムのほか、モニタがロードしてあり、ボードが実行状態でないと起動できませ

ん。

戻り値 0(NO_ERROR) 正常終了しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1) ボードが停止している。

2) モニタがロードしていない。

3) ボードの異常。

参考 A324_entryc( )

使用例

#define BN0 0

unsigned long entry;

char *user;

user = ”USER.OUT”;

A324_bdsel(BN0);

_A324_bdinit( );

_A324_hold( );

_A324_loadc(”MON324.OUT”); /* モニタは必要 */

_A324_loadc(user);

_A324_reset( );

_A324_run( ); /* ここではモニタが走る */

A324_entryc(user,&entry);

if(_A324_start(entry))

printf(”start error\n”);

else

printf(”start user program\n”);

Page 52: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

48

関数名 ユーザプログラム実行開始 (#2)

記述 int A324_startm(board,name); /* 任意ボード */

int _A324_startm(name); /* 現在ボード */

引数 unsigned int board; /* ボード番号 */

char *name; /* ファイル名 */

説明 DSPプログラムのリンカーが出力したマップファイルから、プログラムの起動番地の取得と

ユーザプログラムの実行を一括して行います。

この関数はA324_entrym( )とA324_start( )を実行しています。

本関数は、ADSP320-00のライブラリとの互換を保つために用意されたものです。同

様の機能がA324_entryc( )とA324_start( )で行えます。ロードするプログラムは通常C

OFFファイルですし、COFFファイルには実行開始番地が含まれています。一方、マップ

ファイルは必ずしもCOFFファイルとペアになっているという保証はありません。したがっ

て、安全の為に出来ればA324_entryc( )を使用してください。

戻り値 0(NO_ERROR) 正常終了しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1) ボードが停止している。

2) モニタがロードしていない。

3) ボードの異常。

4) マップファイルが見つからない。

5) マップファイルの異常。

参考 A324_entrym( ),A324_start( )

使用例

#define BN0 0

unsigned long entry;

A324_bdsel(BN0);

_A324_bdinit( );

_A324_hold( );

_A324_loadc(”MON324.OUT”); /* モニタは必要 */

_A324_loadc(”USER.OUT”);

_A324_reset( );

_A324_run( ); /* ここではモニタが走る */

if(_A324_startm(”USER.MAP”))

printf(”start error\n”);

else

printf(”start user program\n”);

Page 53: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

49

関数名 COFFからのシンボル取り出し

記述 int A324_symbolc(file_name,sym_name,value);

引数 char *file_name; /* COFFファイル名 */

char *sym_name; /* シンボル名 */

unsigned long *value; /* 取得した値 */

説明 DSPプログラムのCOFFファイルから変数などのアドレス情報を取得します。DSPプロ

グラムの開発時にリンカーが出力したCOFFファイルを取り込み、変数名を指標にしてアド

レス情報を取得します。プログラム開発時などでアドレスが流動的な場合に有用です。

取り出しの可能なシンボルはグローバル宣言のある変数、関数に限ります。

C言語の場合は大域変数でクラスがstaticでないものおよび、staticでない関数です。

C言語のシンボルはソースで定義した名称の先頭に _ が付いたシンボルになります。

戻り値 0(NO_ERROR) 正常に検出しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1) ファイルが見つからない。

2) ファイルが異常である。

3) ファイルはCOFFファイルではない。

参考 A324_symbolm( ),A324_entryc,A324_entrym( )

使用例

#define BN0 0

unsigned long value; /* 値バッファ */

unsigned long adrs; /* アドレス */

char *sym_name; /* シンボル名 */

char *coff_name; /* COFFファイル名 */

coff_name = ”TEST.OUT”;

sym_name = ”_value”;

if(A324_symbolc(coff_name,sym_name,&adrs))

printf(”symbol get error\n”);

exit(1);

A324_getmem(BN0,adrs,&value)

printf(”symbol %s\n”,sym_name);

printf(”address %81x\n”,adrs);

printf(”value %81x\n”,value);

Page 54: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

50

関数名 マップからのシンボル取り出し

記述 int A324_symbolm(file_name,sym_name,value);

引数 char *file_name; /* マップファイル名 */

char *sym_name; /* シンボル名 */

unsigned long *value; /* 取得した値 */

説明 DSPプログラムのマップファイルから変数などのアドレス情報を取得します。DSPプログ

ラムの開発時にリンカーが出力したマップファイルを取り込み、変数名を指標にしてアドレス

情報を取得します。プログラム開発時などでアドレスが流動的な場合に有用です。

取り出しの可能なシンボルはグローバル宣言のある変数、関数に限ります。

C言語の場合は大域変数でクラスがstaticでないものおよび、staticでない関数です。

C言語のシンボルはソースで定義した名称の先頭に _ が付いたシンボルになります。

戻り値 0(NO_ERROR) 正常に検出しました。

-1(ERROR) 異常終了しました。原因は次のいずれかです。

1)ファイルが見つからない。

2)ファイルが異常である。

3)ファイルはマップファイルではない。

参考 A324_symbolc( ),A324_entryc,A324_entrym( )

使用例

#define BN0 0

unsigned long value; /* 値バッファ */

unsigned long adrs; /* アドレス */

char *sym_name; /* シンボル名 */

char *map_name; /* マップファイル名 */

map_name = ”TEST.MAP”;

sym_name = ”_value”;

if(A324_symbolm(map_name,sym_name,&adrs))

printf(”symbol get error\n”);

exit(1);

A324_getmem(BN0,adrs,&value)

printf(”symbol %s\n”,sym_name);

printf(”address %81x\n”,adrs);

printf(”value %81x\n”,value);

Page 55: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

51

関数名 ボード実装確認

記述 int A324_valid(board);

引数 unsigned int board; /* ボード番号 */

説明 指定されたボード番号のボードが実装されているかどうかを取得します。ボードが実装されて

いるかどうかはライブラリ初期化関数が確認をし、変数に保存されています。この関数はその

変数の値を返します。

戻り値 1(TRUE) ボードは実装されています。

0(FALSE) ボードは実装されていません。

使用例 実装されているボードを全てリセットします。

#define BD_MAX 16 /* ボードMAX */

int bn;

for(bn = 0;bn < BD_MAX;++bn)

if(A324_valid(bn))

A324_reset(bn);

Page 56: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

52

5 BIOS

5.1 概要

ADSP324ボード上で動作するユーザプログラムから使用するサブルーチン群です。DSP

ボード用のアセンブラまたはC言語によるプログラムから呼び出して使用します。

IOの制御、ホストとの通信、DSPボード間での通信、ADとDAの制御などIOに関するハ

ンドリングのほか、浮動小数点フォーマットのIEEEとDSP間の変換の機能もサポートしてい

ます。

5.2 機能概略

BIOSには大別して次のような機能が用意されています。

① タイマー割り込み管理

② 外部割り込み管理

③ ボード間シリアル通信

④ 対ホスト間パラレル通信

⑤ 浮動小数フォーマット変換(IEEEとDSP間)

5.3 使用方法

(1)コーリングシーケンス

アセンブラからの呼び出し例

LDI 10,R0 ;機能番号

LDI 5,R1 ;引き数

CALL _BIOS ;BIOS呼び出し

C言語からの呼び出し例

#include ”cbios324.h”

unsigned CREGS inregs,outregs;

inregs.i.R0 = 10; /* 機能番号 */

inregs.i.R1 = 5; /* 引き数 */

cbios(&inregs,&outregs);

(2)リンクの方法

リンクはリンカーコマンドファイルに次の行を追加します。

cbios324.lib

{例}tst.cとリンクする場合

-c

tst.obj

cbios324.lib

5.4 BIOS機能一覧

Page 57: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

53

① BIOS初期化

機能番号 機能名

0 BIOSバージョン番号取得

1 BIOS初期化

② IOポート入出力

機能番号 機能名

2~6 システム予約

③ シリアル入出力

機能番号 機能名

7 SIO初期化

8 入力開始

9 入力ステータス取得

10 データ入力

11 入力データーバッファ設定

12 入力データーバッファクリア

13 (未使用)

14 出力開始

15 出力ステータス取得

16 (未使用)

17 出力データーバッファ設定

18 出力データーバッファクリア

④ タイマー割り込み

機能番号 機能名

19 タイマー初期化

20 (未使用)

21 タイマー割り込みエントリ番地設定

22 タイマー割り込み制御

⑤ 外部割り込み

機能番号 機能名

23 外部割り込みエントリ番地設定

24 外部割り込み制御

⑥ 対ホスト間割り込み

機能番号 機能名

Page 58: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

54

25 システム予約

⑦ A/D入力

機能番号 機能名

26~34 システム予約

⑧ D/A出力

機能番号 機能名

35~40 システム予約

⑨ A/D+D/A

機能番号 機能名

41~47 システム予約

⑩ 対ホスト間通信

機能番号 機能名

48 通信初期化

49 通信ステータスの取得

50 1ワードコードの送信

51 複数データの送信

52 相手処理完了待機

53 受信ステータスの取得

54 1ワードコードの受信

55 複数データの受信

56 受信処理完了報告

⑪ 対前段DSP間通信

機能番号 機能名

57~65 システム予約

⑫ 対後段DSP間通信

機能番号 機能名

66~74 システム予約

⑬ 浮動小数フォーマット変換

機能番号 機能名

75 IEEEからTIへ変換

Page 59: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

55

76 TIからIEEEへ変換

Page 60: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

56

5.5 BIOS詳細

5.5.1 詳細のフォーマット凡例

機能番号 ** 機能名称:詳細フォーマット凡例

ここではBIOS詳細説明の一般的な入出力仕様とコーリングシーケン

スについて説明しています。

入力パラメータ

R0 :機能番号を設定します。

R1 :必要に応じて引数を設定します。

R2 :必要に応じて引数を設定します。

R3 :必要に応じて引数を設定します。

出力パラメータ

R0 :保存されます。

R1 :結果を返す場合以外は保存されます。

R2 :結果を返す場合以外は保存されます。

R3 :結果を返す場合以外は保存されます。

備考 1)特に指定しない限りレジスタは全て保存されます。

2)引数は基本的には次の要領でBIOSに渡します。

①3ワード以内であればレジスタR1~R3で渡す。

②それより多い場合は引数構造体にセットしそのアドレスをレジス

タで渡す。

③R0には必ず機能番号を設定します。冗長さを避けるため、かく説明

ではレジスタ”R0”については逐一表示してありません。

Page 61: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

57

5.5.2 BIOSの詳細

機能番号 0 機能名称:BIOSバージョン番号の取得

機能説明 BIOSのバージョン番号の取得とBIOSの常駐の確認をします。バー

ション番号は16進数4桁で、V.MM.Eを示しています。Vはバージ

ョン番号、MMは同一バージョン内でのモディファイ番号、Eは同一モデ

ィファイ内のリリース番号です。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :バージョン番号(V.MM.E)

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 1 機能名称:BIOS初期化

機能説明 BIOSが使用している作業領域を初期化します。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 2~6 機能名称:システム予約

機能説明 BIOS1.02.0ではシステム予約になっています。

Page 62: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

58

機能番号 7 機能名称:SIO初期化

機能説明 SIOによる通信の為の初期化をします。

入力パラメータ R1 :SIOの通信モード(0/1)

R2 :SIOの通信速度コード(0~13)

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

備 考 SIOの通信モード

0 : 未定義(動作は保証されません。)

1 : 固定長バッファを用いる。

SIOの通信速度コード表

コード 速度(BPS)

0 10 M(禁止)

1 5 M

2 2.5M

3 1 M

4 625 K

5 500 K

6 200 K

7 100 K

8 50 K

9 20 K

10 10 K

11 5 K

12 2 K

13 1 K

Page 63: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

59

機能番号 8 機能名称:入力開始

機能説明 SIOの入力を開始します。

機能番号7の設定条件による受信が開始します。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

備 考 入力開始処理はデータの受信バッファのクリアと受信割り込みの許可処

理がまず行われます。その後、SIOのハードウェアにより1ワード受信

が完了するごとに割り込みが発生し、この割り込みにて残るデータを1ワ

ードずつ次々と受信します。従って、メインルーチンで割り込みを禁止(S

TのGIE=0)にすると受信ができません。

----- * ----- * ----- * -----* -----

機能番号 9 機能名称:入力ステータス取得

機能説明 SIOの入力のステータスを取得します。

SIOによりデータが受信完了したかどうかが、これにより確認できます。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :-

R3 :-

出力パラメータ R1 :0=受信は完了していない

0以外=受信したワード数

R2 :-

R3 :-

Page 64: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

60

機能番号 10 機能名称:データ入力

機能説明 受信したデータのバッファからデータを取り出します。ユーザー設定のバ

ッファを使用している場合は、この機能を使用せず、直接その領域をアク

セスしてもかまいません。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :データ読み出しバッファ

R3 :-

出力パラメータ R1 :有効なデータ数

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 11 機能名称:入力データーバッファ設定

機能説明 ユーザー設定のデーターバッファを設定します。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :データーバッファアドレス

R3 :バッファの長さ(ワード数)

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 12 機能名称:入力データーバッファクリア

機能説明 エラーの発生などでSIOのデータを途中でクリアする場合に使用しま

す。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 13 機能名称:(未使用)

機能説明

機能番号 14 機能名称:出力開始

Page 65: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

61

機能説明 データを通信バッファにセットし送信を開始します。

この機能を実行する前に機能番号7のSIOの初期化が必要です。また、

データを繰り返し送る場合は機能番号15を使用して、先に送信したデー

タの送信が完了しているかどうかを確認しなければいけません。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :送信データアドレス

R3 :有効データ長

出力パラメータ R1 :-

R2 :-

R3 :-

備 考 出力開始処理はデータの送信バッファへのセットと先頭の1ワードの送

信がまず行われます。その後、SIOのハードウェアにより1ワード送信

が完了するごとに割り込みが発生し、この割り込みにて残るデータを1ワ

ードずつ次々と送信します。従って、メインルーチンで割り込みを禁止(S

TのGIE=0)にすると送信ができません。

----- * ----- * ----- * -----* -----

機能番号 15 機能名称:出力ステータス取得

機能説明 機能番号14で開始した送信が完了したかどうかをこの機能で確認しま

す。

送信が完了していない間は次の送信は起動してはいけません。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :-

R3 :-

出力パラメータ R1 :0=送信は完了している。

0以外=送信は完了していない。

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 16 機能名称:(未使用)

機能説明

Page 66: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

62

機能番号 17 機能名称:出力データーバッファ

機能説明 ユーザーが確保した出力データーバッファを今後データ出力バッファと

して使用します。BIOSの持つバッファは128ワードですからそれ以

上長いバッファを使用したい場合この機能でバッファを変更します。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :バッファアドレス

R3 :バッファの長さ

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 18 機能名称:出力データーバッファクリア

機能説明 SIOの送信を中断してバッファをクリアします。

通信相手がダウンしている場合以外、通常はこの機能を使用することはあ

りません。

入力パラメータ R1 :SIOチャンネル(0/1)[0に固定]

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 19 機能名称:タイマー初期化

機能説明 オンチップタイマーを使用して一定周期ごとにある処理を行いたい場合

のタイマーの初期化をします。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 20 機能名称:(未使用)

機能説明

Page 67: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

63

機能番号 21 機能名称:タイマー割り込みエントリ番地設定

機能説明 タイマー割り込みエントリ番地を設定します。

入力パラメータ R1 :タイマー番号(0/1)

R2 :処理手続きアドレス

R3 :インターバル時間[μsec]

出力パラメータ R1 :-

R2 :-

R3 :-

備考 タイマーのチャンネルのうち、#0(TIM0)はA/Dの自動取り込み

に使用します。A/Dとの共用はできません。A/Dを接続しない場合に

のみ、TIM0、TIM1供に使用できます。

処理手続きは割り込み処理ですので、次の事項を守って記述してください。

①手続きの終了はRETI命令で終了してください。

②手続き開始時点の全てのレジスタの値を保存してください。

C言語の場合は関数名を、特殊な予約名c_intnn( )とすることでこの条

件に合うコードが生成されます。(nnは01から99)

----- * ----- * ----- * -----* -----

機能番号 22 機能名称:タイマー割り込み制御

機能説明 タイマーの割り込みを禁止・許可します。

入力パラメータ R1 :タイマー番号(0/1)

R2 :0=割り込み禁止

1=割り込み許可

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

備考 タイマーのチャンネルのうち、#0(TIM0)はA/Dの自動取り込み

に使用します。A/Dとの共用はできません。

A/Dを接続している場合に、TIM0を停止するとA/Dの自動取り込

みが停止してしまいます。

Page 68: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

64

機能番号 23 機能名称:外部割り込みエントリ番地設定

機能説明 外部割り込み(INT3)が発生した時の処理を設定します。

入力パラメータ R1 :-

R2 :割り込み処理手続きアドレス

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

備考 外部割り込みINT3はA/D+D/Aボードではトリガーの検出に使

用します。

処理手続きは割り込み処理ですので、次の事項を守って記述してください。

①手続きの終了はRETI命令で終了してください。

②手続き開始時点の全てのレジスタの値を保存してください。

C言語の場合は関数名を、特殊な予約名c_intnn( )とすることでこの条

件に合うコードが生成されます。(nnは01から99)

----- * ----- * ----- * -----* -----

機能番号 24 機能名称:外部割り込み制御

機能説明 外部割り込みを禁止・許可します。

入力パラメータ R1 :-

R2 :0=割り込み禁止

1=割り込み許可

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 25 機能名称:システム予約

機能説明 BIOS1.02.0ではシステム予約になっています。

----- * ----- * ----- * -----* -----

機能番号 26~47 機能名称:システム予約

機能説明 BIOS1.02.0ではシステム予約になっています。

Page 69: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

65

機能番号 48 機能名称:通信初期化(対ホスト)

機能説明 対ホスト通信の初期化をします。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 49 機能名称:通信のステータスの取得(対ホスト)

機能説明 対ホスト通信のステータスを取得します。これで送信・受信両方の状態が

取得できます。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :0=通信領域は空

1=送信データをまだ相手が読みだしていない。

2=通信領域には有効な受信データが入っている。

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 50 機能名称:1ワードコードの送信(対ホスト)

機能説明 対ホスト通信を使って1ワードのコードをホストに送信します。

送信を開始する前に機能番号49で通信領域が空であることの確認を必

ず行ってください。

入力パラメータ R1 :送信コード

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

Page 70: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

66

機能番号 51 機能名称:複数データの送信(対ホスト)

機能説明 対ホスト通信を使って1ワードのコードと複数のデータをホストに送信

します。送信を開始する前に機能番号49で通信領域が空であることの確

認を必ず行ってください。

送信データは1次元配列に格納されているものとし、その先頭番地を与え

ます。

1度に通信可能なデータ長は 大1700ワードです。

入力パラメータ R1 :送信コード

R2 :送信データアドレス

R3 :送信データ長

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 52 機能名称:相手処理完了待機(対ホスト)

機能説明 対ホスト通信を使ってデータをホストに送信した後、ホスト側の引き続き

行われる処理の完了を待機する必要がある場合はこの機能を使用します。

この機能は相手側が「完了報告」を行ったかどうかを検出するものです。

相手が「完了報告」を行うまでこの機能は終了しません。

相手がデータを読みだしたかどうかを知るには「通信ステータスの取得」

を使用します。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

Page 71: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

67

機能番号 53 機能名称:受信ステータスの取得(対ホスト)

機能説明 この機能は機能番号49と同じです。ADSP320のBIOSと互換を

とるため用意されているものです。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :0=通信領域は空

1=送信データをまだ相手が読みだしていない。

2=通信領域には有効な受信データが入っている。

----- * ----- * ----- * -----* -----

機能番号 54 機能名称:1ワードコードの受信(対ホスト)

機能説明 対ホスト通信から1ワードのコードをホストから受信します。

受信を開始する前に機能番号49(53)で通信領域に有効データがある

ことを確認してから行ってください。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :受信コード

R2 :-

R3 :0

----- * ----- * ----- * -----* -----

機能番号 55 機能名称:複数データの受信(対ホスト)

機能説明 対ホスト通信から1ワードのコード及び複数データをホストから受信し

ます。データ受取領域は充分な長さのものを予め用意し、そのアドレスを

与えます。有効なデータ数はレジスタR3に返ってきます。

受信を開始する前に機能番号49(53)で通信領域に有効データがある

ことを確認してから行ってください。

1度に通信可能なデータ長は 大1700ワードです。

入力パラメータ R1 :-

R2 :データ受取アドレス

R3 :-

出力パラメータ R1 :受信コード

R2 :-

R3 :受信データ長

機能番号 56 機能名称:受信処理完了報告(対ホスト)

機能説明 対ホスト通信を使ってデータをホストから受信した後、引き続く処理の完

Page 72: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

68

了をホストに通知したい場合にこの機能を使用します。

この機能は相手側が「相手終了待機」を行っている場合に待機を完了させ

ます。

入力パラメータ R1 :-

R2 :-

R3 :-

出力パラメータ R1 :-

R2 :-

R3 :-

----- * ----- * ----- * -----* -----

機能番号 57~74 機能名称:システム予約

機能説明 BIOS1.02.0ではシステム予約になっています。

----- * ----- * ----- * -----* -----

機能番号 75 機能名称:IEEEからTIへ変換

機能説明 IEEE754フォーマットの単精度浮動小数をTIフォーマットの単

精度浮動小数に変換します。ホストからデータをもらってDSPで計算す

る場合に必要です。

データは1次元の配列に格納されているものとし、そのアドレスと長さを

指定します。

入力パラメータ R1 :-

R2 :TI浮動小数のデータアドレス

R3 :データ配列の長さ(ワード数)

出力パラメータ R1 :-

R2 :-

R3 :-

Page 73: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

69

機能番号 76 機能名称:TIからIEEEへ変換

機能説明 TIフォーマットの単精度浮動小数をIEEE754フォーマットの単

精度浮動小数に変換します。DSPで計算した結果をホストへ渡す場合に

必要です。

データは1次元の配列に格納されているものとし、そのアドレスと長さを

指定します。

入力パラメータ R1 :-

R2 :TI浮動小数のデータアドレス

R3 :データ配列の長さ(ワード数)

出力パラメータ R1 :-

R2 :-

R3 :-

Page 74: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

70

6 プログラム開発手順

6.1 プログラム構成

ADSP324-00の利用方法として次の2通りの方法が考えられます。

①DSPボード単体で動作する高速プロセッサ的な使用。

②ホストの処理の一部をDSPボードで代行するアクセラレータ的な使用。

①…例えばDSPに直接接続されたADからデータを取り込み、DSP内部で演算を行った後DA

から出力する、といった使用方法でデジタルフィルタ、デジタル制御などのアプリケーション

に相当します。

②…マンマシン・インタフェースやディスク・ドライブとのインタフェースをホストが処理し、時

間のかかる計算量の多い処理をDSPが代行するといった使用方法でニューラルネットワー

クシミュレーター、振動解析、グラフィック処理などのアプリケーションに相当します。

まず、これらのうちのどの使い方をするかにより、ユーザーの記述すべきプログラムが明確にな

ります。

①ではDSPボード用の単一なプログラムを作成します。

②ではホストとDSPの両方のプログラムを作成します。

6.2 開発言語

ホスト側プログラムが必要な場合はホスト用のCコンパイラが必要です。付属ライブラリは19

98年6月現在 MS-C Ver.7、MS-VC Ver1.0、MS-VC Ver4.2、

Ver5.x 及び MS-VBVer4.x、5.x に対応していますが、ライブラリのソー

スコードが添付されていますので他のコンパイラへの移植は可能です。

本マニュアルで説明しているライブラリについては MS-C Ver7.0 のライブラリに

対して説明されています。MS-VC Ver1.0のライブラリについては関数名が A324 から

A32Xに変わるのみの違いです。

また MS-VC Ver4.x以降及び、MS-VBのライブラリについては32ビットボー

ドコントロールライブラリを参照してください。

DSP側プログラムはTI社からCコンパイラ(ANSI準拠)及びアセンブラが供給されてい

ます。

6.3 プログラミング

プログラミングは通常のプログラム同様、汎用のエディタでソースコードを記述し、DSP用の

言語ツールで実行ファイルを作成します。

DSP側プログラムはクロス環境で作成されます。即ち、DSP用の言語ツールはホストのMS

-DOS上で動作し、ディスク上のソースコードに対して処理をし、オブジェクトコードを同じく

ディスク上に出力します。

リンカーの出力した実行形式のオブジェクトも同様です。このオブジェクトはもちろんMS-D

OSでは実行できません。従ってファイルの拡張子もMS-DOSの実行ファイルとは異なってい

ます。

Page 75: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

71

6.4 ダウンロード

ディスク上に作成されたDSP用実行ファイルは次のいずれかの方法でDSPボードにダウンロ

ードします。

①付属コマンドのダウンロードコマンドを使用し、ディスクからボードにロードする。

②ダウンロードの機能関数をホスト側のユーザ・ユーティリティに組み込み、ユーザーのユーティ

リティを実行することによりダウンロードする。

③弊社製デバッガADSP324-20を起動し、LOADコマンドでロードする。

④オプションROMボードにROM324を使用してROMに書き込み、DSPをROMモードで

使用する。

6.5 デバッグと実行

DSP側プログラムのデバッグには別売ソフトADSP324-20が必要です。プログラムの

途中経過やその時のレジスタの閲覧、ステップ実行などのデバッグ作業はこのデバッガを用いて行

います。この時、3.4で説明したプログラムのダウンロード方法は、1~3のいずれかです。

デバッガを用いたデバッグはROMモードでは行えませんので、RAM上でデバッグし、デバッ

グ完了後ROM化することになります。

6.6 運用

デバッガでデバッグの完了したプログラムは6.4の①②④のいずれかの方法でダウンロードす

るわけですが、この時、付属コマンドのブートモジュール・ジェネレーターを使用して、起動用モ

ジュール(スタートアップルーチン)を作成し、これと一緒にロードします。これはデバッガを使

用中にモニタが行っているDSP自身の初期化とユーザプログラムの開始を起動用モジュールに行

わせる為です。デバッグ完了後の運用時にはユーザプログラムとその起動用モジュールをペアでロ

ードするわけです。ロード後はボードのリセットにより自動的に実行を開始します。

ROMモードの場合にはパワオンと同時にユーザプログラムを実行します。

Page 76: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

72

7 プログラム開発と実行例

7.1 概要

この章ではADSP324-00Aを実際に使用し、サンプルプログラムを用いてプログラムの

開発から実行までを具体的に説明します。

デバッグの作業については説明いたしませんが、デバッガを使用せずに行える簡単な動作確認の

方法とデバッガを使用する場合に利用できるアセンブルリストの作成方法について説明します。使

用言語はC言語でTI社製のコンパイラを使用します。今回使用したバージョンはANCI標準の

Version4.5です。

アセンブラでの開発については特に触れませんが、アセンブルの方法の説明がしてあります。ま

た、アセンブルを完了し、リンク以後の操作はCコンパイラドライバを使用せず直接リンカーを起

動した場合と同じですから参考にしてください。

DSPの初期化からプログラムの実行の方法は色々な方法が用意されていますが、この説明では

ホスト上のユーザプログラムと実行をする場合についてのみ説明しています。そのほかの方法はQ

&Aなどを参考にしてください。

7.2 開発環境と実行環境

7.2.1 コンパイラのインストール

Cコンパイラのインストールは次の要領で行います。

CL30.EXEなどの実行ファイルはディレクトリに収納し、環境変数PATHを通します。

例えば C:¥C30¥TIC というディレクトリを作成してその中に収納し、次のように

PATHを設定します。(注1)

PATH=C:\C30\TIC

また、ライブラリファイルを検索するための環境変数であるC_DIRも同様に設定する必要がありま

す。

SET C_DIR=C:\C30\TIC

C_DIRという環境変数はコンパイラがインクルードファイルを捜す場合のデフォルトディレク

トリと、リンカーがライブラリを捜す場合のデフォルトディレクトリになります。

例えば、プログラムで#include<math.h>とした場合、math.hはC_DIRが指標するディレクトリ

内の C:\C30\TIC\MATH.H が取り込まれます。またリンカーコマンドファイルの-1スイッチで

-1rts.libと指定するとC:\C30\TIC\RTS.LIBをライブラリとしてリンクします。

(注1) PATH 変数の設定の詳細はお手持ちのMS-DOSのマニュアルを参照の上、必要な PATH

は全て設定してください。

Page 77: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

73

7.2.2 付属コマンドのインストール

付属ディスク“Support Soft Ware”のUTYに収納されているユーティリティはMS-DOSから

ADSP324-00Aボードをコントロールするツール類です。ボードの実行開始や状態の表示

などに使用します。これらはいつでも使用できるようにPATHの通ったディレクトリに収納します。

例えばC:\C30\UTYに収納し、次のようにPATHを設定します。(注1)

PATH=C:\C30\UTY\UTY

(注1)PATH 変数の設定の詳細はお手持ちのMS-DOSのマニュアルを参照の上、必要な PATH

は全て設定してください。

7.2.3 付属ライブラリのインストール

付属ライブラリはMS-Cでホストプログラムにリンクします。適当なディレクトリに格納し、

リンク時に参照可能にします。

ここではC:\C700\LIB\に格納し、リンカー・レスポンスファイルで指定する方法を採用していま

す。

7.2.4 BIOSのインストール

付属ディスク“Support Soft Ware”のBIOSに収納されているBIOSはCコンパイラの付属

ライブラリ(RTS.LIBなど)と同じディレクトリに収納してください。

ここではDIR=C:\C30\UTY\BIOSに収納します。BIOSのリンクはリンカーコマンドファイルに

‐L で指定を追加するかまたはオブジェクトファイルのリストを記述したレスポンスファイルに指

定を追加します。ここではレスポンスファイルで指定しています。

Page 78: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

74

7.3 プログラミング

7.3.1 ホストプログラムの記述

ホストのプログラムとしては、ソースプログラムのほかリンク時に使用するリンカー・レスポン

スファイルを作成します。付属ディスクの\SAMPLE の中に収納されていますので参考にしてくださ

い。

●ソースプログラム HOST.C

●リンカー・レスポンスファイル HOST.LNK

7.3.2 DSPプログラムの記述

DSPのプログラムとしてはソースプログラムのほかにリンクに使用するリンカー・レスポンス

ファイルとリンカーコマンドファイルが必要です。レスポンスファイルとコマンドファイルはいず

れもリンカーに対して種々の指示をファイルから与えるものです。この2つのファイルを1つにま

とめる事も出来ますが、2つ用意する意義はレスポンスファイルで各プログラム毎に内容が異なる

オブジェクトファイル名などを指定し、コマンドファイルでプログラムに依存しない項目、ライブ

ラリの指定などをする、といった使い分けをするとよいでしょう。付属のディスクの\SAMPLE の中

に収納されていますので参考にしてください。

●ソースプログラム DSP.C

●コマンドファイル USER.CMD

●レスポンスファイル DSP.LNK

7.3.3 サンプルプログラムの説明

サンプルプログラムは次の処理を行います。

1. DSPアクセスのためのライブラリ初期化とDSPの初期化をします。

2. MON324.OUTとDSP.OUTをロードし、MON324を使用してDSP.OU

Tを実行開始します。

3. テストデータの作成のため、データ配列の長さLと初期値をコンソールから読み込みます。

4. 2個の長さLの1次元配列を初期値でクリアします。

5. 時間測定のため、システム時間を取得します。

6. この2個のデータをDSPプログラムとのハンドリングによりDSPに渡します。

7. DSPはこの2個の配列を1次元ベクトルと見てベクトルの内積を求め、結果をホストに返

却します。

8. ホストはシステム時間を取得し、先の時間との差から所要時間を求め表示します。

9. DSPから受け取った値を表示します。

実際のプログラムは3項から9項がループになっています。また、計算そのものは速すぎてシス

テム時間では測定が出来ませんので、同じ計算を指定回数繰り返し計算し、そのトータル時間を表

示するようにしています。

Page 79: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

75

7.4 DSPプログラムのコンパイル

DSPのプログラムのコンパイルには2通りの方法があります。1つはコンパイラ・ドライバ

CL30.EXEを使用する方法です。この方法は一般的で、UNIXライクな方法ですし、ホストのMS

-Cなどの処理系と同様な使い方ができます。2つめはコンパイラ・ドライバを使用せず、バッチ

ファイルを使用します。コンパイラは幾つかのフェーズ別に実行プログラムが分かれていますので

バッチファイルで自動的に実行します。

コンパイルは次のように行います。

まず、ソースファイルの入っているディレクトリに移動します。DSP.C ではインクルードファイ

ルCBIOS324.Hを取り込みますのでDIRコマンドでインクルードファイルCBIOS324.Hがあるか確認

してください。もしも無い場合は付属ディスクの\BIOS からコピーします。次にコンパイラを起動

します。

CL30 DSP.C

とすると、コンパイラのプロンプトに続いて処理された関数が順次表示されます。エラーメッセー

ジが無ければ完了です。コンパイラ・ドライバは 終的にアセンブラまで起動し、その結果カレン

トディレクトリにオブジェクトファイルDSP.OBJが残ります。

DSP.OBJ の基となるアセンブラソース DSP.ASM が途中で生成されていますが、ドライバにより消

去されます。これをディスクに残すには次のいずれかの方法で起動します。

CL30 – K DSP.C

CL30 – S DSP.C

前者は単にアセンブラソースファイルを残します。

後者はさらにCのソースプログラムとの対応をコメントとして挿入します。

7.5 DSPプログラムのアセンブル

コンパイラ・ドライバCL30でコンパイルした場合はアセンブル作業まで自動的に行われ、ユーザ

ーが特にアセンブラを起動する必要はありません。しかし、アセンブラソースによるプログラムと

混在する場合、アセンブラプログラムはユーザーがアセンブルしなければなりません。また、後ペ

ージで説明するデバッグ用の情報としてアセンブルリストを作成する場合にも必要です。

アセンブラの起動は次のように行います。

ASM30 DSP

ASM30 DSP – L

いずれもオブジェクトファイルDSP.OBJをディスク上に残します。

前者は単にDSP.ASMというプログラムのアセンブルのみを行います。

後者はアセンブル後にアセンブルリストを出力します。

Page 80: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

76

7.6 DSPプログラムのリンク

プログラムのリンクの仕方にはリンカーLNK30.EXE を起動してリンクする方法と、コンパイラ・

ドライバCL30.EXEにスイッチ指定でリンクまでさせる方法の2通りあります。ここでは前者の方法

を説明します。後者はコンパイラのマニュアルを参照してください。

リンカーには2種類の動作モードがあり、オブジェクトファイルやコマンドファイルをリンカー

の出力するプロンプトに対して入力してゆく方法と、それらを一旦ファイルにしておき(レスポン

スファイル)、起動時にそのファイル名を指定する方法とがあります。ここでは、レスポンスファイ

ルによる方法を説明します。

リンカーに与えるファイルとして、2つのファイルを用意します。レスポンスファイル(DSP.LNK)

と、コマンドファイル(USER.CMD)です。レスポンス・ファイルにはユーザプログラムのファイル

名や必要に応じてリンクするライブラリの名称などを記述します。サンプルのDSP.LNKは次の内容

になっています。

(/*…*/の部分はCと同じくコメントです。)

-o dsp.out

-m dsp.map

dsp.obj

c:\c30\uty\bios\sbios324.lib

user.cmd

意味は2行目より順に、

2.実行ファイルの名称をdsp.outとする。

3.マップファイルをdsp.mapという名称で出力する。

4.オブジェクトはdsp.objをリンクする。

5.b:\biosにあるcbios324.libを結合する。

6.コマンドファイルはuser.cmdを使用する。

となります。この例ではオブジェクトは1個だけですが、複数の場合には4の項目を1行に1個ず

つ、必要なだけファイル名を列挙します。

コマンドファイルはユーザプログラムをリンクする際のメモリマップなどの緒元を定義してあり

ます。これは標準的なものが付属ディスクのディレクトリ\BIOS の中にあるので、コピーして使用

してください。ファイルの用意ができたら、リンカーを次の様に起動します。

LNK30 DSP.LNK

まず、これにより起動されたリンカーは DSP.LNK の内容とその中で指示されたコマンドファイル

USER.CMDの指示に従ってリンクを行い、その結果、ディスクにDSP.OUTとDSP.MAPを出力します。

DSP.OUT はCOFF(コッフ)ファイルと呼ばれ、実行可能なファイルです。ただし、実行可能

とは言っても、MS-DOSで実行可能では無いため、拡張子を.OUTとしています。

DSP.MAP はリンクした結果、スタート番地やラベルなどがメモリのどこに結合されたか出力され

ます。エディタでその内容を確認できます。このファイルは付属コマンドのSTGEN324.EXEや付属ラ

イブラリ中の一部の関数で利用するほか、プログラムの高速化の作業などをする場合に参照します

ので、常に作成するように心がけてください。

Page 81: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

77

7.7 ホストプログラムのコンパイル

ホストのプログラムではインクルードファイル LIB324.H を取り組んでいますのでカレントディ

レクトリにあるか確認します。無い場合には付属ディスクのディレクトリ\LIBからコピーします。

コンパイルは次の様にします。

cl – c – AL host.c

これによりhost.cはラージモデルでコンパイル作業のみを行います。ユーザプログラムによって、

オプションスイッチは必要に応じて付加してください。

7.8 ホストプログラムのリンク

ホストプログラムのリンクはレスポンスファイルを使用して行います。ホスト用のレスポンスフ

ァイルはhost.lnkです。この中でライブラリc:\c30\uty\lib\lib324l.libをリンクするように指

示されていますから、ライブラリがあるか確認します。もし無い場合は、2.3でインストールし

たライブラリ名をフルパスで指定するようレスポンスファイルの内容を変更します。

[email protected]

これによりカレントディレクトリにhost.exeが作成されます。

7.9 プログラムの実行

実行の前にカレントディレクトリにmon324.outがあるか確認をしてください。無ければ付属ディ

スクのディレクトリ\MON からコピーします。これは host.exe がプログラムの中で dsp.out と

mon324.outをロードしているからです。

プログラムの起動と操作は次の様にします。 下線部分を入力します。

A:\>host

ベクトルの内積を求める。

0 : Do proc other : EXIT to DOS (0/1) ? 0

data length (1 ˉ 1700) ? 1024

loop times? 10000

first value ? 1

recieve status = 0

recieve 1 data ( s )

rslt [ 0 ] = 1024.000000

3秒

0 : add other : EXIT to DOS (0/1) ? 1

A : \ > dsp

Page 82: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

78

8 Q&A

ここでは「ADSP324-00A」ボード、並びにオプションボードなどについてユーザーが

持つ疑問や、陥りやすいトラブルなどのうちのいくつかをQ&A形式にまとめました。

Q:付属コマンドを使用したら“ボードが異常です”と表示されたのですが…。

A:ADSP324-00Aボードは場合により一見して異常状態におちいる場合がありますが、本質

的な異常ではありません。簡単に復旧できます。

ADSP324-00AボードにはDSPをホールドしてDSPの外部メモリをHOSTから直接

アクセス可能にする“ホールドモード”と呼ばれるモードがあり、これはHOSTからI/Oへ信

号をOUTすることにより行います。ボードへのプログラムのダウンロードはこの機能を使用して

います。

一方、ADSP324-00Aが搭載しているDSPの「TMS320C31」には自身のホール

ドをコントロールする機能があります。プライマリ・バス・コントロール(PBC)レジスタと呼

ばれるレジスタにある値を書くことによりホールドを禁止することができます。この機能は本来D

SPが優先度の高い、ある処理をリアルタイムに行っている際に外部からのホールドにより処理を

妨げられるのを防ぐための機能です。

ここで、もしDSPが暴走などにより誤ってホールド禁止状態になっているとHOSTからコント

ロールできませんので“ボードが異常”となります。付属コマンドではホールドがコントロールで

きない場合にボード異常としているからです。

この場合RESET324コマンドでDSPをリセットすることよりDSPのコントロールを取り

戻すことができます。もし電源を入れたままの状態で今まで一度もプログラムをロードしていない

とか、ロードしたプログラムは実行させると暴走する可能性のある場合はコマンドはRESET3

24 /HとしてADSP324-00Aボードを停止状態のままにしてください。

Q:ボードが実装してあるのに“ボードが未実装です”と表示されたのですが…

A:ボードの実装が正しく認識されていません。設定を正しく行って下さい。

付属コマンドはボードの実装確認を16台のボードを切り替え、それぞれに対しユニークな値を書

き込み、再度ボードを切り替えて書き込んだ値が読めるかどうか、ボードが切り替えできたかどう

かでボードの実装を判断しています。

従って次のような場合にはボードの実装が正しく認識できません。

① I/Oボードベースアドレスの設定がボードと付属コマンドで違う。

② メモリ・ベースアドレスの設定がボードと付属コマンドで違う。

③ DSPのメモリ領域に別のメモリが実装され、領域が重複している。

④ DSPのメモリが読み書きできない。

①と②の場合はボードのディップスイッチ(DSW101,102,103など)の設定を変更し、付属ソフトを

そのまま使用した場合などに発生します。付属コマンドの設定をディップスイッチの設定に合わせ

て変更してください。変更はCSTM324.EXEを使用します。

③の場合は例えばEMSメモリやグラフィック関係のイメージメモリボードなどと共存している場

合に発生します。ADSP324以外のボードを一旦全て取り外して起動してみてください。もし

重複している場合はどちらかを設定変更するか、同時には使用しないようにします。

④の場合は具体的にはADSP324-00AボードをIO増設ラックに実装し、IO増設ラック

の電源を投入していないとか、IO増設ラックに実装するメモリの領域を設定するディップスイッ

チが正しく設定していないなどの場合にもこの症状が現れる場合があります。

Page 83: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

79

Q:プログラムが走っているかどうか見る方法はありませんか?

A:デュアルポートメモリを利用すればリアルタイムで確認できます。

HOSTとADSP324の間はデュアルポートメモリで接続されています。ラン・モードではこ

の領域をHOSTとDSPの両方から同時にアクセスができます。

この領域を使用して任意の時期に任意の値を授受できます。

次のプログラム例をご覧下さい。DSPがデュアルポートメモリの値を次々と更新し、HOSTで

はそれをコンソールに次々と表示します。(HOSTのプログラムはラージモデルでコンパイルし

てください。)

/* PC9801 program */

#define SEG 0xe000

#define OFF 0x400

#define PTR (SEG*0x100001+OFF*4)

main( )

long *ptr;

ptr = (long*)PTR;

for(;;)

{ printf(”%081x\r”,*ptr);}

/* DSP program */

#define BASE 0x200000

#define OFF 0x400

#define ADRS (BASE+OFF)

main( )

long *ptr;

ptr = (long*)ADRS;

for(;;)

{ *ptr += 1; }

このことを利用し、プログラムのメインループの中で必ず通る所で値を更新したり、プログラムの

流れに従って1,2,3・・などのようにあらかじめ定めた値を設定するなど色々と応用してくだ

さい。

但し、この領域はBIOSと付属のライブラリのデータ送受信の機能で使用しています。送受信機

能を使用する場合にはこの使い方はできません。

Page 84: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

80

Q:スモールモデルだとプログラムが動かないのですが…

A:ビッグモデルでは動作したプログラムがスモールモデルでは動作しない場合があります。

スモールモデルだと動かない原因の殆どはプログラムのデータ領域が64Kワードを超過している

か、超過していなくても64Kワードのページ境界をまたいで配置されている場合です。TMS3

20C30用Cコンパイラのスモールモデルでプログラムを正しく動作させるには次の項目を確認

して下さい。(まず準備として、リンカーでプログラムをリンクする際にマップファイルを出力して

おきます。)

①セクション・アロケーション・マップ(SECTION ALLOCATION MAP)を参照し、.bss セクション

がどこに配置されているかを見る。

②.bssセクションの長さが64Kワード以下で、かつページ境界(64Kワード境界)をまたいで

いないか確認します。いずれもOKなら問題ありません。

次の例は64Kワード以下ですが、ページ境界をまたいでいます。

section page origin length input sections

.bss 0 0000FF00 00000283 UNINITIALIZED

③.bssセクションが64Kワード以上の場合はスモールモデルでは(ごく一部の特殊な場合を除い

て)正しく動作しません。ビッグモデルでコンパイルしてください。

なお、この時リンクするランタイムライブラリもビックモデル用ライブラリを使用します。但し

ADSP324のBIOSはビックモデルに対応していますから変更の必要はありません。

④.bss セクションが64Kワード未満でもページ境界をまたいでいる場合は上記③の様にビッグ

モデルにする方法以外に配置を移動して1ページ内に納める方法が考えられます。

配置の移動はリンカーのコマンドファイルを変更します。変更の要点は2点で、メモリマップを

決定するMEMORYを変更してちょうどページ境界からで、メモリ領域を定義することと、セクショ

ンのメモリへの配置を決定する SECTIONS を変更して.bss セクションをそこにリンクするように

変更しました。この状態でリンクを行えば、プログラム変更などで、もし.bssセクションが64

Kワードを超過すると、リンカーがエラーを出しますからスモールモデルでの限界に対してのチ

ェックも兼ねています。

(注:変更前のRAM領域が0xFF00番地から始まっているのは説明のため、わざと中途半

端な番地に配置したものです。)

Page 85: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

81

《変更前》

/* SPECIFY THE SYSTEM MEMORY MAP */

‐C

‐lrts30.lib

MEMORY

{

VECS : org = 0x000000 len = 0x00040 /* vector area */

MON : org = 0x000040 len = 0x003c0 /* monitor area */

RAM : org = 0x00ff00 len = 0x20100 /* user RAM area */

RAM0 : org = 0x809800 len = 0x400 /* on‐chip RAM BLOCK 0 */

RAM1 : org = 0x809c00 len = 0x400 /* on‐chip RAM BLOCK 1 */

}

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

SECTIONS

{

.text : { } > RAM /* CODE */

.cinit : { } > RAM /* INITIALIZATION TABLES */

.const : { } > RAM /* CONSTANT DATAS */

.rtse : { } > RAM /* EXTENDED RUN‐TIME SUPPORT LIBRARY */

.stack : { } > RAM /* SYSTEM STACK */

.bss : { } > RAM /* GLOBAL & STATIC VARS */

.data : { } > RAM /* DEFAULT DATA SECTION */

.sysmem : { } > RAM /* DYNAMIC MEMORY‐DELETE IF NOT USED */

}

《変更後》

/* SPECIFY THE SYSTEM MEMORY MAP */

MEMORY

{

VECS : org = 0x000000 len = 0x00040 /* vector area */

MON : org = 0x000040 len = 0x003c0 /* monitor area */

RAM : org = 0x001000 len = 0xf000 /* user RAM area */

RAM0 : org = 0x809800 len = 0x400 /* on‐chip RAM BLOCK 0 */

RAM1 : org = 0x809c00 len = 0x400 /* on‐chip RAM BLOCK 1 */

}

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

SECTIONS

{

:

}

Page 86: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

82

Q:付属ライブラリが動作しないのですが…

A:付属ライブラリが正しく動作しない原因としてはさまざまな場合があります。次にいくつかのケー

スを示します。原因となり得る全ての要因は網羅していませんが、デバッグを行う上での重要な参

考になると思われます。

● ライブラリのメモリモデルとメインプログラムのメモリモデルが異なっていませんか。

● ライブラリの初期化関数に与える引数segとioがボードの設定と違っていませんか。

● ボードのIOかメモリが、HOST本体または他の増設ボードのIOもしくはメモリと重複し

ていませんか。

● ボードの状態(ノーマル/ホールドモード)が、そのライブラリ関数の使用可能な状態に設定

されていますか。(→4.5関数使用可能状態一覧表を参照)

● DSPで扱うメモリのデータは全て32ビットです。ホストから見た場合4バイトまたはlo

ngで1ワードとなります。データ長、ほかアドレスの計算は間違っていませんか。

● DSPで扱う浮動小数はホストのデータとフォーマットが違います。ホストとDSP間で浮動

小数データを渡す場合は変換が必要です。また、DSPでは float も double も同じ32ビッ

ト浮動小数(つまりfloat)として扱われます。

Q:ボードにプログラムをロードするにはどうすればいいのですか?

A:ボードにプログラムをロードする方法は、大別して次の2通りあります。

①付属コマンドのLOAD324を使用する。

LOAD324はリンカーの出力したCOFF実行ファイルまたはHEXファイルをADSP32

4-00Aボードにロードします。MS-DOSのコマンドですのでバッチコマンドに組み込んだ

り、ユーザプログラムからチャイルド起動したりできます。

②付属ライブラリのダウンロード関数を利用する。

付属ライブラリにはダウンロード関数が用意されています。HOST側のプログラムに組み込んで

使用します。ダウンロードできるファイルはリンカーの出力したCOFFファイル、またはHEX

ファイルです。ファイル名を指定し、ディスクファイルからADSP324に直接ダウンロードを

します。

Page 87: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

83

Q:MS-DOSのバッチコマンドでボードを起動できますか?

A:ADSP324-00AにはMS-DOSから直接ボードをコントロールしたりする専用のコマン

ドが付属しています。それをバッチコマンドに組み込めば良いのです。

ボードのリセット、プログラムのダウンロード、実行、など基本的なコマンドが揃っています。詳

しくは「Q:ボードにプログラムをロードするにはどうすればいいのですか?」を参照してくださ

い。

Q:プログラムをROM化してボード単体で動作させたいのですが…

A:プログラムをROM化するには次の点に注意が必要です。

①付属コマンドのROM324を使用してROM化してください。

②ROM化可能な領域は1000h番地から60Kワードです。

60Kワードを越える場合はROM化ができません。マップファイルを参照して.text と.cinit

の両領域のほか、0番地のベクタとスタートアップモジュールのワード数の合計が60Kワード

に入るかどうか確認します。ff00h番地からffff番地にはスタートアップ・プログラム

が入りますから、ユーザプログラムが1000h番地からfeffh番地に入ればよいことにな

ります。

③ROM化動作中DSPは、マイクロコンピュータ・モードで動作します。割り込みベクタやトラ

ップベクタはRAM1ブロックの 後尾に位置しますので注意してください。

④データ・テーブルなどは外部から与えることができませんので、.text などの領域(ROM化さ

れる領域)にリンクするか、またはプログラム自身で計算して作成するなどの方法をとる必要が

あります。(注1)

ただし、Cで記述した初期化つきの変数はCのスタートアップルーチンが初期化しますのでユー

ザプログラムで特に改めて初期化する必要はありません。

⑤デバッガを使用してのデバッグ作業はROMに変更すると行えなくなります。

この場合は完全にデバッグが完了するまではRAMのままで動作させておき、その後ROMに変

更してください。

注1)リンカーのコマンドファイルには、ボード付属のROM.CMDを使用してください。

Q:ボードを単体で使用する場合、電源はどのように供給するのですか?

A:ADSP324-00AボードはHOSTのIO拡張スロットから5V電源の供給を受けています。

従ってHOSTから切り放して使用する場合にはHOSTに代わって5V電源を供給する必要があ

ります。できれば、IO拡張ラックなどの電源を実装したラック形状のものに実装したまま、ラッ

クごとHOSTからの切り放しをしてください。

どうしてもボードのみで(裸の状態で)使用したい場合には、電源の供給は基板エッジコネクタか

ら直接行います。このコネクタはボードには付属していませんから、ユーザサイドで別途手配をし

てください。

Page 88: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

84

Q:モニタは何にどうやって使うのですか?

A:ADSP324-00Aのモニタではユーザーによる利用は、

① メモリの書き込み

② メモリの読み出し

③ メモリフィル

④ メモリ転送

⑤ プログラムの実行

などが比較的簡単に利用できます。

①~④項のメモリの読み書きはオンチップメモリに対しても利用できます。ホールドモードを利用

したメモリの読み書きではDSPの外部メモリしかアクセスできませんが、モニタを利用すればオ

ンチップメモリもアクセスできる事になります。

⑤のプログラム実行はGOコマンドのみが比較的簡単に利用できます。

ユーザプログラムの実行開始番地をレジスタ構造体のPCに設定し実行開始をしますが、この手順

は付属ライブラリの A324_start( )と同じですから、ライブラリ関数を利用した方が便利で、モ

ニタの実行機能をユーザーが直接使用する必要はないと思われます。

それ以外の機能でSTEPのBREAKに関するものは、機能を利用するうえで該当するアドレスのプログ

ラムを逆にアセンブルする必要があり、利用はかなり大変ですからマニュアルには機能として記載

はしてありますが、利用をするのは難しいと思われます。

ステップ実行、ブレイクポイントなどは別売りのデバッガをご利用ください。

Q:メモリは全てRAM!では、DSPはどうやって走るのですか?

A:ADSP324にはROM化されたIPLはありません。

出荷時にはリセットベクタを含むメモリ領域が全てRAMになっています。

この領域は電源投入直後にはRAMの内容が不定ですから、DSPを実行させると暴走をする可能

性がありますので、リセットコマンドを使用してDSPをリセットすると同時に停止状態に設定し

ます。

次にモニタまたはスタートアップモジュールとユーザプログラムをロードコマンドでロードします。

つまり、MS-DOS上のロードコマンド(または付属ライブラリのロード関数)がIPLの代行

をする訳です。ADSP324-00AはDSPを停止状態にすることにより、DSPの外部メモ

リをHOSTから直接アクセス出来る機構を備えており、それを利用してプログラムをロードしま

す。ここまではDSPは全く走りません。

ロードが完了するとDSPは実行可能ですので、ロードコマンドのスイッチ/g、またはホールド

コマンドでDSPの停止状態を解除します。DSPは先にリセットされていますから停止状態の解

除と供にリセットベクタの指標する番地から実行を開始します。

Page 89: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

85

Q:Cで書いたプログラムはどうやって実行されるのですか?

A:Cで記述したプログラムの実行開始は通常コンパイラに付属のランタイムライブラリの中にあるス

タートアップルーチン_c_int00 から開始するようにコードが生成されます。(リンカーコマンドフ

ァイルに-cを指定)

その実際の番地はプログラム領域の先頭ではありません。

一方、DSPはリセットされると0番地のベクタ情報が指標する番地に分岐します。そこで0番地

(リセットベクタ)は_c_int00へ分岐するように書かれていなければいけません。

ADSP324では実際には0番地から_c_int00 へ至るまでの間にDSPのバスの初期化やレジ

スタの初期化の処理が必要です。これらの処理は、デバッガを使用している場合はモニタが、その

以外の場合はSTGEN324が生成したスタートアップモジュールが行っています。要約すると

次のフローの順でmainに到達します。

リセット

リセットベクタ リセット時の実行開始番地

モニタ または スタートアップモジュール DSPのバスとレジスタ初期化

_c_int00 Cの変数・静定数の初期化と

スタックなどの設定

main ユーザプログラム実行開始

Page 90: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

86

Q:処理速度に不満があり、さらに高速化をしたいのですが…

A:プログラムの根本的な改造をする事なく、簡単に高速化する方法があります。ここでその方法をい

くつかご紹介します。

① プログラムをオンチップRAMに載せる。

② データをオンチップRAMに載せる。

③ アライン命令でキャッシュを効果的に機能させる。

④ プログラムをアセンブラで記述する。

①と②の方法はプログラムを改造することなく高速化する一番簡単な方法です。

オンチップRAMはノーウェイトでアクセスできるうえ、2つの領域に分かれていてその両方また

は片方と外部メモリを同時にアクセスできる機構(ハーバード・アーキテクチャー)を備えていま

す。この機構と、DSP自身の持つパイプライン処理機能により、プログラムとデータを同時にア

クセスが可能となり、プログラムをオンチップメモリに載せればウェイトの面でもプログラムとデ

ータの同時アクセスの面でも高速化が望めます。

プログラムとデータの両方を外部メモリに配置した場合と比較して約1.2倍~1.5倍の速度が

得られます。

③のアライン命令はキャッシュをより効果的に利用する方法で、アセンブラソースの時点で.ALIGN

という疑似命令を用い、プログラムの配置を操作してキャッシュのヒット率を意図的に向上させる

ものです。C言語でプログラムした場合でも利用できます。

プログラムの動作が32ワードまたは64ワード以下の短い範囲で局所的なループを幾つも構成し

ているような構造の場合に効果的な反面、アライン命令によりアドレスを調整するためにNOP命

令や分岐命令が強制的に挿入されるため、プログラムの全領域を広く、くまなく平均的に実行する

場合には逆効果が現れる場合もあります。

長いルーチンには適用せず、サブルーチン単位で実施するか、繰り返し回数の多い部分にのみ適用

するとよいでしょう。

④のプログラムをアセンブラで記述する方法はDSPに限らず一般に高級言語が有する特性です。

この方法は決して簡単な方法とは言えませんが、確実でかつ効率的な方法です。その効果はコンパ

イラの効率、アセンブラの持つ命令体型、プログラムしようとしている処理の内容などにより、ア

センブラと高級言語との差はまちまちですが、TMS320C30の一般的な場合、Cとアセンブ

ラの速度比は2倍~5倍程度です。

特殊な場合として、320C30の特殊な命令群(パラレル命令や特殊なアドレッシングなど)を

効果的に使用し、 も 適化した場合で約10倍です。

TI社製のCではCのプログラムとアセンブラプログラムのリンクが可能なほか、Cのソース上に

アセンブラを直接記述するインライン・アセンブラが可能です。引数、戻り値、及びレジスタの保

存に関する約束さえ守れば同一ファイルにCとアセンブラを混在させることができます。

以上の各方法の具体的詳細は次のQ以降で説明します。

Page 91: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

87

Q:プログラムをオンチップRAMに載せる方法はありますか?

A:プログラムをオンチップRAMに載せることができます。この方法の実施手順はプログラムが小さ

い場合とそうでない場合の2つのケースに分かれます。

まず1番目はプログラムが比較的小さく、1Kワード(または2Kワード)に入ってしまう場合で

す。この場合にはリンカーコマンドファイルのSECTIONSを変更し、.text(=プログラム領域)の

配置先を変更します。

次の例は.textをオンチップRAM1に、スタック領域.stackをオンチップRAM0にそれぞれ配

置した例です。

MEMORY

{

VECS : org = 0x000000 len = 0x00040 /* vector area */

MON : org = 0x000040 len = 0x00fc0 /* monitor area */

RAM : org = 0x01000 len = 0x3f00 /* user RAM area */

RAM0 : org = 0x809800 len = 0x400 /* on‐chip RAM BLOCK 0 */

RAM1 : org = 0x809x00 len = 0x400 /* on‐chip RAM BLOCK 1 */

}

SECTIONS

{

.text : { } > RAM1 /* CODE */

.cinit : { } > RAM /* INITIALIZATION tables */

.stack : { } > RAM0 /* SYSTEM STACK */

.bss : { } > RAM /* GLOBAL & STATIC VARS */

sysmem { } > RAM /* DYNAMIC MEMORY‐DELETE IF NOT USED */

}

2番目のケースはプログラムが大きくて1Kワードを超過している場合です。

この場合には、少し厄介ですがプログラムを分割する必要があります。

分割と配置の変更は次の手順で行います。

a)プログラムのソースを分割します。分割の指針は も実行頻度の高い処理関数を独立したソー

スファイルにします。このファイル内の関数を 終的にオンチップRAMに落としますから、

目算でプログラムの長さが1Kワード以下になるようにします。もとのソースの行数とマップ

ファイルの.textの長さから算定するとよいでしょう。

b)このファイルの先頭に次の行を追加したうえで通常通りコンパイルします。

asm(” .sect RAM_TEXT”);

これはこのファイル内のプログラムコードを通常の.textセクションでなく、RAM_TEXTという

セクションに収納することを指示する役割を果たします。ここでRAM_TEXTとは適当に決めた名

称です。

c)リンカーコマンドファイルを次の様に変更したうえでリンクします。

次の例の場合.text セクションをROMという領域にリンクし、RAM_TEXT セクションを RAM1

という領域にリンクします。RAM_TEXTセクションとは、言うまでもなく上記b)で定義したセ

クション名です。

Page 92: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

88

配置変更はこれで完了ですが、一応念のためリンカーが出力したマップファイルを参照し、セクシ

ョン配置情報(SECTION ALLOCATION MAP)や、シンボル情報(GLOBAL SYMBOLS)を確認して配置

がオンチップRAMに正しく結合できたか確認します。

Q:データをオンチップRAMに載せる方法はありますか?

A:データをオンチップRAMに載せることができます。この方法の実施手順にはいくつかの場合があ

ります。

まず、データ領域である.bss領域が小さく、1Kワード以下の場合です。この場合が一番簡単です。

この場合にはリンカーコマンドファイルの SECTIONS を変更して、.bss の領域をRAM0かRAM

1に結合します。領域の容量の確認方法と結合領域の変更方法はプログラムの場合と同じですから

「Q:プログラムをオンチップRAMに載せる方法はありますか?」を参考にしてください。

次に.bss領域が大きく、1Kワードを超過する場合には少し厄介です。

データ領域はプログラム領域の場合のように簡単にはセクションの分割ができません。コンパイラ

が割り付ける変数領域は全て明示的に.bss に割り付けられることによります。(プログラムの場合

にはコンパイラが出力するプログラム領域.text への割り付けがデフォルト・セクションであり明

示されていない事を利用し、先頭に.sect 命令を挿入することによりファイル内の全コードを目的

とするセクションに割り付けられました。)

ひとつの方法としてはC言語のソース上でその変数を外部参照(extern)に変更することに

より領域の確保はコンパイラに任せず、実際の領域確保をユーザーがアセンブラ命令を用いて行う

事とし、この時に.bssとは別のセクション内に確保する方法です。次の例を見てみましょう。変数

bb[100]をOCRAM_DTというセクションを設けてその中に確保しています。

Page 93: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

89

0001 int aa[100] ;

0002 externint bb[100] ;

0003

0004 asm( “_bb .usect OCRAM_DT,100” ) ;

0005 asm( “ .global _bb” ) ;

0006

0007 main( )

0008 {

0009 int c ;

0010 for ( c = 0 ; c < 100 ; c++ ){

0012 aa[ c ] = bb[ c ] ;

0013 }

0014 {

1行目のaa[100]はコンパイラにより.bssに割り付けられる通常の変数です。

2行目のbb[100]はコンパイラにとっては変数名の定義のみとなります。

このbbという変数の実体は4行目で定義されており、意味は[OCRAM_DTという名称のセクション

内に_bbとういう名称で、100ワードの領域を確保しなさい]ということです。

これで.bssとは異なるセクションに領域が割り当てられました。

5行目は別のCプログラムからも参照できるよう、この変数に大域変数の宣言をします。これで後

はプログラムをオンチップRAMに割り付けた場合と同様リンカーコマンドファイルで OCRAM_DT

セクションをオンチップ領域に割り当てます。

この方法の問題点・注意点として、次のことがあげられます。

① アセンブラ中の変数名はCの変数名の前に′′を付ける。

② 確保するワード数などにCの定数(#defineなど)が使用できない。

③ 初期化付きの変数の場合は別の方法を用いなければいけない。

後に、.bss領域が大きく1Kワードを超過する場合のもう一つの方法として、ソースレベルでの

改造が必要ですが小細工を必要としない方法として、ポインターを使用してオンチップRAM領域

を使用する方法です。

そのひとつは.sysmemセクションをオンチップRAMに配置しておき、malloc関数で領域を

確保する場合と、もうひとつはユーザーが直接ポインターを設定する場合です。

この方法は、ポインターを使用し間接参照をする性質上、単一の変数や大域変数配列の任意の要素

を直接アクセスする場合などは効果がありません。

そのほか、それぞれの特徴としてはmalloc関数の場合は移植性が高く、ある事情で.sysmemセクシ

ョンを外部メモリに配置変更が生じても変更は簡単で、リンカーコマンドファイルを変更するだけ

で良い反面、メモリ管理のオーバーヘッドのためオンチップRAM領域をユーザーがフルに使用す

ることができません。また、ユーザーが直接ポインターを設定する場合には、変数の番地に任意の

番地を割り付けられる反面、リンカーコマンドファイルも含めて、ほかの変数やプログラムなどの

領域と重複しないように充分注意する必要があります。

Page 94: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

90

Q:オンチップRAMには何を載せたらよいのですか?

A:一義的に決めることはできません。アプリケーションやプログラミングの内容により、適宜使い分

ける必要があります。

オンチップRAMの領域は1Kワード×2ブロックと、アプリケーションによっては決して広いと

は言えない場合があります。プログラム領域もデータ領域も載せたいし、スタックも、動的領域

(mallocによる領域)も… と、あれもこれもでは全ての希望が叶うようにはゆきません。そこで

いずれかを選択しますが、その時の指針として何を優先するかが問題となります。これといった決

定的な指針はありませんが、基本的な考え方としては「 もアクセス頻度の高い領域を優先する」

ことになります。アクセス頻度の判定をするためのいくつかのヒントを次に挙げますので参考にし

てください。

①C言語のプログラムでは局所変数、関数呼び出し、引数の受渡しにスタック領域を使用します。

従って多くの局所変数を使用していたり、多くの引数を伴った関数呼び出しを頻繁に行うような

場合はスタック領域(.stackセクション)を優先します。

②malloc関数により動的に割り付けた領域は、.sysmemセクションに割り付けられます。malloc関

数により確保した領域を頻繁にアクセスする場合は.sysmemセクションを優先します。

③大域変数とstaticな局所変数は.bssセクションに割り付けられます。これらの領域を頻繁

にアクセスする場合は.bssセクションを優先します。

④プログラムのループが長く(64ワードより長く)、キャッシュの効果が期待できない場合は上記

(①~③)のうちいずれか1つに次いで、プログラム領域(.textセクション)を優先します。

⑤プログラムに対してキャッシュが効果的に機能するように対策した場合など、アセンブラでRP

TS命令を多用している場合は上記(①~③)を優先し、プログラム領域(.text セクション)

は外部メモリに配置します。

Page 95: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

91

Q:キャッシュを効果的に利用する方法はありますか?

A:キャッシュは使用していても必ず充分な効果を発揮しているとは限りません。充分な効果を確実に

引き出すにはユーザーによる手助けが必要な場合があります。

ADSP324-00Aのモニタまたはブートモジュールはユーザプログラムを起動する際にキャ

ッシュをイネーブルにしています。従って条件さえ整えばキャッシュは機能します。

しかし、TMS320C30のキャッシュにはその構造上、プログラムの条件により効果的に機能

する場合とそうでない場合があります。いわゆるキャッシュのヒット率という問題です。 キャ

ッシュがヒットしなければキャッシュの効果は現れません。

このヒット率を向上させるためには次の2点の条件が必要です。(注1)

① プログラムのループの長さが64または32ワード以上であること。

② ループの位置が32ワード境界から始まっていること。

この②の条件を満たすため、アセンブラには専用の疑似命令が用意されています。.align疑似命令

です。この疑似命令のすぐ後に続く命令はリンカーが配置を決定する時点で、32ワード境界の先

頭に配置されることが保証されています。直前の命令が境界の途中の場合には、リンカーが自動的

にNOP(無実行)命令またはBU(無条件分岐)命令を挿入しアドレスの補正が行われます。

次の例は、この命令を利用しCプログラムのループをキャッシュが有効に機能するようにしたもの

です。

fill( dt,len,cnst )

int *dt;

int len,cnst;

asm(” .slign”);

while( len--){ *dt++ = cnst;}

ループを構成する文の直前にインライン・アセンブラ機能を使用して.align疑似命令を挿入しまし

た。この例はあくまで方法を説明する為に簡単な例を挙げたもので、この例ではループが充分短い

(32ワード以下)為、.align命令無しでもキャッシュは効果的に機能しています。

参考までに関数呼び出しの無い単純なループの場合のループを構成する命令のワード数(注2)と

キャッシュの機能との関係は次の通りとなります。

32ワード以下 : 必ず機能します。

32~63ワード: 上記方法で必ず機能します。それ以外では機能しない場合があります。

64ワード以上 : キャッシュはミスを繰り返し、効果を発揮しません。

(注1) TMS320C30にはキャッシュをフリーズする機能があるため、この2条件が絶対的な

ものではありません。しかし一般的なプログラムで特にキャッシュを意識せずに記述したプ

ログラムの場合には必要な条件です。

(注2) パイプラインによる命令の先取りも含めたワード数

Page 96: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

92

Q:C言語とアセンブラ言語の混在はできますか?

A:TI社製のCコンパイラでは次の2通りの混在が可能です。

① アセンブラによるソースファイルを作成し、リンカーで結合する。

② Cのソース上にインライン・アセンブラ命令でアセンブラソースを記述する。

インライン・アセンブラによる記述は小規模なアセンブラルーチンを記述するには大変重宝する方

法で、例えばSTレジスタのGIEをアクティブにするほか、割込み制御レジスタを操作するなど

のちょっとした処理には有効です。

次の例はインライン・アセンブラを使用したマクロの例です。

#defineeint( ) asm(” or02000h,st”)/*GIE enable */

#defineeint( ) asm(” and 02000h,st”)/*GIE enable */

#definealign( ) asm(” .align”)/* .ALIGN */

こういったマクロを用いれば殆どC言語の感覚でコーディングができます。

もう少し大きい規模のアセンブラルーチンを記述するには、Cで記述したある関数の中身をすっか

りアセンブラで記述します。Cコンパイラが生成したプログラムのレジスタの使い方が予測しづら

いなどの理由から、Cとアセンブラのステートメントを完全に混在させるのには限界があるからで

す。

次の例は、IFレジスタをクリアすると供に、クリア直前の値を返す関数の例です。

getIFreg( )

asm(” ldi if,r0”);

asm(” ldi 0,if”);

Cのソースとは別にアセンブラソースを記述する方法はアセンブラステートメントの規模が大きい

場合に適当です。

Cのインライン・アセンブラはアセンブラより記述性が低く、大きなプログラムを記述するには適

しません。その場合には直接アセンブラソースファイルを記述します。Cプログラムの関数及び大

域変数と、アセンブラのサブルーチン及び大域変数とは、Cで記述した名称の先頭に ’_’ が付

いた名称がアセンブラの名称に対応する事を除けば、全く同じものとして取り扱えます。

関数呼び出しの場合には引数の受け渡し規則と、レジスタの保存に関する約束がありますのでそれ

に従ってサブルーチンを記述します。同様にCの関数で保存されないレジスタをわきまえていれば

アセンブラからC関数の呼び出しもできます。

大域変数は ’_’ の有無だけ注意すればCとアセンブラの間で同一の変数を参照できます。

注意点は ①アセンブラ側で定義した関数と大域変数には.global宣言を付加すること。

②変数領域はCとアセンブラのどちらで定義するかを明確にすること。

です。Cで定義した場合にはアセンブラ側は.refで参照し、アセンブラで定義した場合にはC側は

externとなります。

リンクはCとアセンブラのオブジェクトは全く区別なくリンクが可能です。

Page 97: ADSPシリーズ ADSP324-00A1 1 付属ソフトウェア概要 ADSP324-00Aに付属しているサポートソフトウェアは次の通りです。 ①モニタ 付属ライブラリとペアでユーザプログラムの起動をするほか、オプションのソフト「ADS

中部電機株式会社 〒440-0004 愛知県豊橋市忠興3丁目2-8

TEL <0532>61-9566

FAX <0532>63-1081

URL : 0H1Hhttp://www.chubu-el.co.jp

E-mail : [email protected]

ADSP324-00A

ソフトウェア・ユーザーズ・マニュアル

2004. 1 第5版発行

・本マニュアルの内容は製品の改良のため予告無しに

変更される事がありますので、ご了承下さい。