adsp324-00a

Similar documents
型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1


AquesTalk プログラミングガイド

ADSP674-00/00H

UIOUSBCOM.DLLコマンドリファレンス

AquesTalk Win Manual

CONTEC DIOプロバイダ ユーザーズガイド

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

AquesTalk for WinCE プログラミングガイド

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

DPC-0401

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

他のOSをお使いになる方へ

PowerPoint プレゼンテーション

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

プロセス間通信

AP-RZA-1A シリアルFlashROMの書き込み方法

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

BPC-0821 Help for Windows

AN178 USB仮想シリアルドライバ インストールガイド

1. はじめに 本書は スプリット演算器 MFS2 用コンフィギュレータソフトウェア の取扱方法 操作手順 注意事項などを説明したものです Windows の操作や用語を理解している方を前提にしています Windows の操作や用語については それぞれのマニュアルを参照してください 1.1. MFS

Microsoft Word - USB2-PCI…V…−†[…Y_04†iWinNt40_PDFŠp†j.doc

gengo1-11

ファイル操作-バイナリファイル

ADSP324-00A

PowerTyper マイクロコードダウンロード手順

Microsoft PowerPoint - 11.pptx


Prog1_10th

SecureLock Manager Liteの使いかた

MS104-SH2 USBドライバ(仮想COMポートドライバ)の不具合について

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

仮想 COM ポートドライバーインストールマニュアル 仮想 COM ポートドライバーをパソコンにインストールすることにより FTDX3000 シリーズとパソコンとを USB ケーブルで接続して CAT 通信 TX 制御 (PTT KEY FSK) および ファームウェアのアップデートを行う事ができま

Microsoft Word - XPC4ソフトマニュアル.doc

仮想 COM ポートドライバーインストールマニュアル 仮想 COM ポートドライバーをパソコンにインストールすることにより 対応するトランシーバーまたは USB インターフェースユニット SCU-17 を USB ケーブルでパソコンに接続し CAT 通信 TX 制御 ( PTT KEY FSK) U

REX-USB56 「FAX送信」編 第6.0版

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43>

5. 下の画面が表示されますので [Next>] をクリックします 6. License Agreement の画面が表示されますので 内容をご確認いただき 同意する場合は I accept the terms of the license agreement にチェックをして [Next>] をク

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - 09.pptx

ESMPRO/JMSS Ver6.0

プロバイダ ユーザーズガイド

Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manage

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

MAC アドレス変更ツール MAC アドレスチェンジャー ユーザーズマニュアル User's Manual エレコム株式会社

RW-5100 導入説明書 Windows7 用 2017 年 7 月 シャープ株式会社

演算増幅器

ホストプログラム操作説明書

CentreCOM VT-Kit2 plus リリースノート

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

変更履歴 日付 バージョン 内容 2017/3/ ver.2.x.x.x を WHQL 対応版とする初版リリース ( ベースバージョン統合の為 2004 からとする ) 2017/3/ x64 とx86 の区別など誤記修正 目次修正 i

Sharpdesk V3.5インストレーションガイド:プロダクトキー編

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

PowerPoint プレゼンテーション

1 目次 本書の構成 2 体験版申請用総合ソフトの機能 3 申請用総合ソフトとの相違点 体験版申請用総合ソフト ver.3.0 は, 本番用の申請用総合ソフト (3.0A) の機能に擬似データを加えたものです

CS-DRC1操作説明書

HDWS Update Instruction Guide

Android Layout SDK プログラミング マニュアル

<4D F736F F D20836F E C C6F6E C EE682E888B582A2837D836A B2E646F63>

Taro-82ADAカ.jtd

Microsoft Word - SREX_SDK2_R31.doc

memo

フォーマット/メンテナンスガイド

RW-4040 導入説明書 Windows 7 用 2017 年 7 月 シャープ株式会社

1. インストールする前に 1. インストールする前に プリンタードライバーをインストールする前に 下記の事項を確認してください 複合機が正しく接続されているネットワーク接続の場合複合機を社内 LAN などのネットワークにつなげて使用する場合は 複合機が正しくネットワークに接続されていることをネット

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

Microsoft Word PXシリーズプリンタドライバインストール説明書(Win8・10-32・64bit)

ホストプログラム操作説明書

DocuPrint 4050 PostScript ユーザーズガイド

MotionBoard Ver. 5.6 パッチ適用手順書

MS5145、MS7120,USB通信の設定

tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができ

目次 2 1 PC Control Utility PD 1 について 動作環境

スライド 1

Microsoft Word _VBAProg1.docx

Microsoft Word - 7_rusb.doc

Touch Panel Settings Tool

wx01j-v234_instmac

Flash Loader

フォーマット(初期化)について

TFU-RW811A ドライバインストール手順書

もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME アプ

『テクノス』V2プログラムインストール説明書

Microsoft Word - RZOCX取扱説明書.doc

プリンタドライバのインストール. Windows で使用する場合 Windows プリンタドライバのインストール方法は 接続方法や使用するプリンタドライバによって異なります また コンピュータの OS によってインストール方法が異なります お使いのコンピュータの OS に合わせて 以下の参照ページを

動作環境 対応 LAN DISK ( 設定復元に対応 ) HDL-H シリーズ HDL-X シリーズ HDL-AA シリーズ HDL-XV シリーズ (HDL-XVLP シリーズを含む ) HDL-XV/2D シリーズ HDL-XR シリーズ HDL-XR/2D シリーズ HDL-XR2U シリーズ

IC-R8600をSDRに使用するには

Microsoft Word - DS50-N A.doc

ESMPRO/JMSS Ver6.0

ファイル操作-インターネットキャッシュ

インストレーションガイド_WME

DSP5Dアップグレードガイド


Transcription:

ADSP シリーズ ADSP324-00A 32bit サポートソフトウェア ユーザーズ マニュアル

目次 1. 概要...1 2. フォルダー構造...2 3. レジストリ...3 4. 関数一覧...4 (1).C 関数...4 1. ライブラリー初期化関数... 4 2. ボード関連関数... 4 3. ボード制御関数... 4 4. アップ / ダウンロード関数... 5 5. 特殊制御関数... 5 6. 通信関数... 6 7. オフライン関数... 6 (2).BASICサブルーチンおよびファンクション...7 1. ライブラリー初期化関数... 7 2. ボード関連関数... 7 3. ボード制御関数... 7 4. アップ / ダウンロード関数... 8 5. 特殊制御関数... 8 6. 通信関数... 9 7. オフライン関数... 9 5. 関数使用可否状態一覧表...10 6. 関数詳細... 11 (1)A32X_ARRAYGET( メモリーへのアップロード )...11 (2)A32X_ATTAYPUT( メモリーからのダウンロード )... 12 (3)A32X_BDINIT( ボード初期化 )... 13 (4)A32X_BDSEL( ボード選択 )... 14 (5)A32X_BIOS(DSP 上のBIOS 実行 )... 15 (6)A32X_BNKSEL( メモリーバンク選択 )... 16 (7)A32X_BOOT( 実行開始番地設定 )... 17 (8)A32X_ENTRYC(COFFファイルからのエントリ取り出し)... 18 (9)A32X_ENTRYM( マップファイルからのエントリ取り出し )... 19 (10)A32X_GETMEM( メモリーからのアップロード )... 20 (11)A32X_HINIT( 通信関数初期化 )... 21 (12)A32X_HOLD( ボード停止 )... 22 (13)A32X_HOLDSTUS( 実行停止確認 )... 23 (14)A32X_HRXST( 受信ステータス確認 )... 24 2

(15)A32X_HRCV( コード受信 )... 25 (16)A32X_HRCVDT( データ受信 )... 26 (17)A32X_HRDY( 受信完了報告 )... 27 (18)A32X_HTFR( コード送信 )... 28 (19)A32X_HTFRDT( データ送信 )... 29 (20)A32X_HTXST( 送信ステータス確認 )... 30 (21)A32X_HWIT( 送信相手完了確認 )... 31 (22)A32X_INT0(DSPボードへの割り込み発生)... 32 (23)A32X_LIBENTER( デバイスドライバーのオープン )... 33 (24)A32X_LIBEXIT( デバイスドライバーのクローズ )... 34 (25)A32X_LOADC(COFFファイルのダウンロード)... 35 (26)A32X_LOADM( メモリーからのダウンロード )... 36 (27)A32X_MONITER(DSP 上のモニター実行 )... 37 (28)A32X_PUTMEM( メモリーへのダウンロード )... 38 (29)A32X_RESET( ボードリセット )... 39 (30)A32X_RUN( ボード実行開始 )... 40 (31)A32X_SAVEC(COFFファイルへのアップロード)... 41 (32)A32X_SAVEM( メモリーへのアップロード )... 42 (33)A32X_SETIRQHNDL(DSPからの割り込みハンドラ設定)... 43 (34)A32X_START( ユーザープログラムの実行開始 #1)... 44 (35)A32X_STARTM( ユーザープログラムの実行 #2)... 45 (36)A32X_SYMBOLC(COFFファイルからのシンボル取り出し)... 46 (37)A32X_SYMBOLM( マップファイルからのシンボル取り出し )... 47 (38)A32X_VALID( ボード実装確認 )... 48 (39)A32X_SEGMENT(DSPメモリー窓アクセス用ポインタ)... 49 7. ライブラリー使用上の注意... 50

1. 概要 32ビットサポートソフトウェアは 弊社製 ADSP324-00A に標準で添付されているソフトウェアです このソフトウェアは ADSP324-00Aボードをユーザアプリケーションから操作するための橋渡しを行うソフトウェアで ADSP324-00Aボードをコントロールするための基本的な機構を供給するためのライブラリーです また 16 ビット版ボード付属ライブラリーには DSPでFFTを高速に実行するための FFT 演算ライブラリが 標準で添付されているほか モニター プログラム BIOSプログラムが 添付されています 本マニュアルでは モニターやBIOSについてはされていませんので 16ビット版ボード付属ライブラリのマニュアル ( ソフトウェア ユーザーズ マニュアル ) を参照してください また モニターや BI OSは32ビット版には添付されていませんので 16ビット版ライブラリのものを使用してください (1) ドライバー設定プログラムデバイスドライバの設定を 表示 変更するためのプログラムです ADSP324-00Aボードの設定を出荷時から変更した場合に使用します (2) ユーティリティプログラム Windows 上からADSP324-00Aボードをコントロールするユーティリティプログラムです ADSP324-00Aボードにユーザープログラムのダウンロード 実行 ROM 化 D SPメモリ内容表示等を行うなどの機能をもっています (3) 付属ライブラリホスト上で動作するユーザプログラムから ADSP324-00Aボードをコントロールしたり DSPメモリへアクセスするなどの各種機能を実現するためのDLLです Visual C++ Visual Basicから使用することができます (4) デバイスドライバー ADSP324-00AボードをWindows 上から使用するための仮想デバイスドライバーで ボードを制御するための必要です 設定を行うツールとして ドライバー設定プログラムが用意されています 1

2. フォルダー構造 ADSP324-00A サポートソフト 32 ビット ボードコントロールライブラリーは 次のようなフォルダー構造を持ちます ここでは インストール先ディレクトリが C:\C30 であった場合を例としてしています C:\ C30 Lib Lib32 A32Xsetup.exe DSP 設定変更プログラム Uty324.exe ユーティリティプログラム (ISA 版 ) Help Sample DSP DSP 用サンプルプログラム Host ホスト用サンプルプログラム vb A32xdll.bas 用 API 定義用標準モジュール vc A32x32.lib 用インポート ライブラリ A32xdll.h 用インクルード ファイル driver USBドライバー および はそれぞれ Microsoft Visual Basic(32 ヒ ット ) および Microsoft Visual C/C++ の (32 ヒ ット ) コンパイラに対応しています 2

3. レジストリ ADSP324-00A 32 ビットサポートソフトウェアでは 下記のレジストリを使用しています HKEY_LOCAL_MACHINE\SOFTWRE\Chubu Electric Co.,Ltd.\ADSP32X 32Bit Support Driver\Settings\IOBase HKEY_LOCAL_MACHINE\SOFTWRE\Chubu Electric Co.,Ltd.\ADSP32X 32Bit Support Driver\Settings\IRQNumber HKEY_LOCAL_MACHINE\SOFTWRE\Chubu Electric Co.,Ltd.\ADSP32X 32Bit Support Driver\Settings\SegmentBase HKEY_LOCAL_MACHINE\SOFTWRE\Chubu Electric Co.,Ltd.\ADSP32X 32Bit Support Driver\Settings\Version それぞれの意味は上から順番に DSPの I/O アドレス 割り込み番号 メモリー ベースアドレス 機種で バイナリ (LSBファースト)4 桁で記述されています I/O アドレスと割り込み番号はDSP 設定値と同一の内容 メモリー ベースアドレスは DSPの設定値を1/16 倍した値 (16 進数値では 下 1 桁を切り取った値 ) 最後の Version は ソフトウェアのバージョンを示します 3

4. 関数一覧 (1).C 関数 ここでは 型の表記を以下のように簡略化しています V : void C : char I : int L : long UI : unsigned int UL : unsigned long 1. ライブラリー初期化関数 int A32X_libenter(V); void A32X_libexit(V); デバイスドライバーのオープン デバイスドライバーのクローズ 2. ボード関連関数 int A32X_valid(I); void A32X_bdsel(I); void A32X_bdinit(I); void _A32X_bdinit(V); void A32X_bnksel(I,UL); void _A32X_bnksel(UL); ボード実装確認ボード選択ボード初期化メモリーバンク選択 3. ボード制御関数 int A32X_hold(I); int _A32X_hold(V); int A32X_run(I); int _A32X_run(V); int A32X_start(I,UL); int _A32X_start(UL); int A32X_startm(I,C*); int _A32X_startm(C*); int A32X_boot(I,UL); void _A32X_boot(UL); void A32X_reset(I); void _A32X_reset(V); int A32X_holdstus(I); int _A32X_holdstus(V); ボード停止ボード実行開始ユーザープログラム実行開始ユーザープログラム実行開始実行開始番地設定ボードリセット実行停止確認 4

4. アップ / ダウンロード関数 int A32X_putmem(I,UL,UL); int _A32X_putmem(UL,UL); void A32X_getmem(I,UL,UL*); void _A32X_getmem(UL,UL*); void A32X_ArrayPut(I,UL,L,V*); void _A32X_ArrayPut(UL,L,V*); void A32X_ArrayGet(I,UL,L,V*); void _A32X_ArrayGet(UL,L,V*); int A32X_loadc(I,C*); int _A32X_loadc(C*); int A32X_loadm(I,UL,UL,UL*); int _A32X_loadm(UL,UL,UL*); int A32X_savec(I,UL,UL,UL,C*); int _A32X_savec(UL,UL,UL,C*); int A32X_savem(I,UL,UL,UL*); int _A32X_savem(UL,UL,UL*); メモリーからのダウンロードメモリーへのアップロードメモリーからのダウンロードメモリーへのアップロード COFFファイルのダウンロードメモリーからのダウンロード COFFファイルへのアップロードメモリーへのアップロード 5. 特殊制御関数 int A32X_int0(I); DSPボードへ割り込み発生 int _A32X_int0(V); int A32X_bios(I,A32X_bios_prm*); DSP 上のBIOS 実行 (*1) int _A32X_bios(A32X_bios_prm*); int A32X_moniter(I,A32X_mon_prm*); DSP 上のモニター実行 (*1) int _A32X_moniter(A32X_mon_prm*); int A32X_setirqhndl(HWND,UI,WPARAM,LPARAM); DSPからの割り込みハンドラ設定 (*1) 5

6. 通信関数 void A32X_hinit(I); void _A32X_hinit(V); int A32X_htxst(I); int _A32X_htxst(V); int A32X_htfr(I,UL); int _A32X_htfr(UL); int A32X_htfrdt(I,UL,I,C*); int _A32X_htfrdt(UL,I,C*); int A32X_hwit(I); int _A32X_hwit(V); int A32X_hrxst(I); int _A32X_hrxst(V); int A32X_hrcv(I,UL*); int _A32X_hrcv(UL*); int A32X_hrcvdt(I,UL*,I*,C*); int _A32X_hrcvdt(UL*,I*,C*); void A32X_hrdy(I,I); void _A32X_hrdy(I); 通信関数初期化 (*1) 送信ステータス確認 (*1) コード送信 (*1) データ送信 (*1) 送信相手完了確認 (*1) 受信ステータス確認 (*1) コード受信 (*1) データ受信 (*1) 受信完了報告 (*1) 7. オフライン関数 int A32X_symbolm(C*,C*,UL*); int A32X_symbolc(C*,C*,UL*); int A32X_entrym(C*,C*,UL*); int A32X_entryc(C*,UL*); マップファイルからのシンボル取り出し COFFファイルからのシンボル取り出しマップファイルからの実行開始番地の取り出し COFFファイルからの実行開始番地の取り出し 関数名称の先頭に _ がある関数とない関数の違いは ない関数はボード番号の指定が付いており ある関数は現在のボードを対象に実行される関数です USB 接続での注意 関数の最後に(*1) が付いているものはUSB 接続では使用できません USB 接続時 USB 未対応の関数を使用した場合何も実行されません A32X_Segment 変数はUSB 接続時はサポートしていません 使用した場合アプリケーションが異常終了しますのでご注意ください 6

(2).BASIC サブルーチンおよびファンクション ここでは 型の表記を以下のように簡略化しています S : ByVal? As String L : ByVal? As Long LP : ByRef? As Long BP : ByRef? As A32X_bios_prm MP : ByRef? As A32X_mon_prm 1. ライブラリー初期化関数 Function A32X_libenter() As Long Sub A32X_libexit() デバイスドライバーのオープン デバイスドライバーのクローズ 2. ボード関連関数 Function A32X_valid(L) As Long Sub A32X_bdsel(L) Sub A32X_bdinit(L) Sub SA32X_bdinit() Sub A32X_bnksel(L,L) Sub SA32X_bnksel(L) ボード実装確認ボード選択ボード初期化メモリーバンク選択 3. ボード制御関数 Function A32X_hold(L) As Long Function SA32X_hold() As Long Function A32X_run(L) As Long Function SA32X_run() As Long Function A32X_start(L,L) As Long Function SA32X_start(L) As Long Function A32X_startm(L,S) Function SA32X_startm(S) Function A32X_boot(L,L) Function SA32X_boot(L) Sub A32X_reset(L) Sub SA32X_reset() Function A32X_holdstus(L) As Long Function SA32X_holdstus() As Long ボード停止ボード実行開始ユーザープログラム実行開始ユーザープログラム実行開始実行開始番地設定ボードリセット実行停止確認 7

4. アップ / ダウンロード関数 Function A32X_putmem(L,L,L) As Long Function SA32X_putmem(L,L) As Long Sub A32X_getmem(L,L,LP) Sub SA32X_getmem(L,LP) Sub A32X_ArrayPut(L,L,L,LP) Sub SA32X_ArrayPut(L,L,LP) Sub A32X_ArrayGet(L,L,L,LP) Sub SA32X_ArrayGet(L,L,LP) Function A32X_loadc(L,S) As Long Function SA32X_loadc(S) As Long Function A32X_loadm(L,L,L,LP) As Long Function SA32X_loadm(L,L,LP) As Long Function A32X_savec(L,L,L,L,S) As Long Function SA32X_savec(L,L,L,S) As Long Function A32X_savem(L,L,L,LP) As Long Function SA32X_savem(L,L,LP) As Long メモリーからのダウンロードメモリーへのアップロードメモリーからのダウンロードメモリーへのアップロード COFFファイルのダウンロードメモリーからのダウンロード COFFファイルへのアップロードメモリーへのアップロード 5. 特殊制御関数 Function A32X_int0(L) As Long Function SA32X_int0() As Long Function A32X_bios(L,BP) As Long Function SA32X_bios(BP) As Long Function A32X_moniter(L,MP) As Long Function SA32X_moniter(MP) As Long DSP ボードへ割り込み発生 DSP 上の BIOS 実行 (*1) DSP 上のモニター実行 (*1) 8

6. 通信関数 Sub A32X_hinit(L) Sub SA32X_hinit() Function A32X_htxst(L) As Long Function SA32X_htxst() As Long Function A32X_htfr(L,L) As Long Function SA32X_htfr(L) As Long Function A32X_tfrdt(L,L,L,LP) As Long Function SA32X_tfrdt(L,L,LP) As Long Function A32X_hwit(L) As Long Function SA32X_hwit() As long Function A32X_hrxst(L) As Long Function SA32X_hrxst() As Long Function A32X_hrcv(L,LP) As Long Function SA32X_hrcv(LP) As Long Function A32X_hrcvdt(L,LP,LP,LP) As Long Function SA32X_hrcvdt(LP,LP,LP) As Long Sub A32X_hrdy(L,L) Sub SA32X_hrdy(L) 通信関数初期化 (*1) 送信ステータス確認 (*1) コード送信 (*1) データ送信 (*1) 送信相手完了確認 (*1) 受信ステータス確認 (*1) コード受信 (*1) データ受信 (*1) 受信完了報告 (*1) 7. オフライン関数 Function A32X_symbolm(S,S,LP) As Long Function A32X_symbolc(S,S,LP) As Long Function A32X_entrym(S,S,LP) As Long Function A32X_entryc(S,LP) As Long マップファイルからのシンボル取り出し COFFファイルからのシンボル取り出しマップファイルからの実行開始番地取り出し COFFファイルからの実行開始番地取り出し 関数名称の先頭に S があるファンクションおよびサブルーチンとない物の違いは ない物は ボード番号の指定が付いており ある物は現在のボードを対象に実行されるファンクションおよび サブルーチンです USB 接続での注意 関数の最後に(*1) が付いているものはUSB 接続では使用できません USB 接続時 USB 未対応の関数を使用した場合何も実行されません A32X_Segment 変数はUSB 接続時はサポートしていません 使用した場合アプリケーションが異常終了しますのでご注意ください 9

5. 関数使用可否状態一覧表 凡例 : 使用可能 : 使用不可能 : 使用可能でかつ実行後この状態に移行する : 実行可能だが本来この状態で実行すべき関数ではない この一覧表は C の関数について記述されていますが BASIC 関数についても同様です 関数名 関数の機能 停止状態実行状態 A32X_ArrayGet メモリーへのアップロード A32X_ArrayPut メモリーからのダウンロード A32X_bdinit ボード初期化 A32X_bdsel ボード選択 A32X_bios DSP 上のBIOS 実行 A32X_bnksel メモリーバンク選択 A32X_boot 実行開始番地設定 A32X_entryc COFFファイルからのエントリ取り出し A32X_entrym マップファイルからのエントリ取り出し A32X_getmem メモリーへのアップロード A32X_hinit 通信関数初期化 A32X_hold ボード実行停止 A32X_holdstus 実行停止確認 A32X_hrxst 受信ステータス確認 A32X_hrcv コード受信 A32X_hrcvdt データ受信 A32X_hrdy 受信完了報告 A32X_htfr コード送信 A32X_htfrdt データ送信 A32X_htxst 送信ステータス確認 A32X_hwit 送信相手完了確認 A32X_int0 DSPへの割り込み発生 A32X_libenter デバイスドライバーのオープン A32X_libexit デバイスドライバーのクローズ A32X_loadc COFFファイルのダウンロード A32X_loadm メモリーからのダウンロード A32X_moniter DSP 上のモニター実行 A32X_putmem メモリーからのダウンロード A32X_reset ボードリセット A32X_run ボード実行開始 A32X_savec COFFファイルへのアップロード A32X_savem メモリーへのアップロード A32X_setirqhndl DSPからの割り込みハンドラの設定 A32X_start ユーザープログラム実行開始 A32X_startm ユーザープログラム実行開始 A32X_symbolc COFFファイルからのシンボル取り出し A32X_sylbolm マップファイルからのシンボル取り出し A32X_valid ボード実装確認 10

6. 関数詳細 (1)A32X_ArrayGet( メモリーへのアップロード ) 記述 : void A32X_ArrayGet(int board,unsigned long top, 任意ボード long size,void *buffer); void _A32X_ArrayGet(unsigned long top,long size, 現在ボード void *buffer); Sub A32X_ArrayGet(ByVal board As Long, 任意ボード ByVal top As Long,ByVal size As Long, ByRef buffer As Any) Sub SA32X_ArrayGet(ByVal top As Long, 現在ボード ByVal size As Long,ByRef buffer As Any) top アップロード開始アドレス size アップロードサイズ buffer アップロードデータ格納配列 : DSP の外部メモリーからホストへのメモリーへ データをアップロードします データ長は任意サイズで 単位はワード (4 バイト ) 単位です 戻り値 : ありません unsigned long buffer[0x100]; A32X_ArrayGet(0,0x1000,0x100,buffer); Dim buffer(&h100) As Long Call A32X_ArrayGet(0,&H1000,&H100,buffer) 11

(2)A32X_AttayPut( メモリーからのダウンロード ) 記述 : void A32X_ArrayPut(int board,unsigned long top, 任意ボード long size,void *buffer); void _A32X_ArrayPut(unsigned long top,long size, 現在ボード void *buffer); Sub A32X_ArrayPut(ByVal board As Long, 任意ボード ByVal top As Long,ByVal size As long, ByRef buffer As Any) Sub SA32X_ArrayPut(ByVal As Long, 現在ボード ByVal size As Long,ByRef buffer As Any) top ダウンロード開始アドレス size ダウンロードサイズ buffer ダウンロードデータ格納配列 : ホストのメモリーから DSP のメモリーへ ダウンロードします データ長は任意サイズで ワード (4 バイト ) 単位です 戻り値 : ありません unsigned long buffer[0x100]; int i; for(i = 0;i < 0x100;++i) buffer[i] = i; A32X_ArrayPut(0,0x1000,0x100,buffer); Dim buffer(&h100) As Long; For i = 1 To &H100 buffer(i - 1) = i Next i Call A32X_ArrayPut(0,&H1000,&h100,buffer) 12

(3)A32X_bdinit( ボード初期化 ) 記述 : void A32X_bdinit(int board); 任意ボード void _A32X_bdinit(void); 現在ボード Sub A32X_bdinit(ByVal board As Long) 任意ボード Sub SA32X_bdinit() 現在ボード : DSPボードをリセットし 初期化状態に保持します ボードリセット関数 A32X_reset() との違いは リセット関数はリセット後ボードは実行を開始するのに対し 初期化関数はリセット後 停止したままの状態を保持します 電源の投入後 まだ一度もプログラムをロードしていない場合は DSPのメモリーは不定となっていますので この関数を実行してDSPの初期化を行ってください 戻り値 : ありません #define BD_NO 0 A32X_bdinit(BD_NO); Const BD_NO As Long = 0 Call A32X_bdinit(BD_NO) 13

(4)A32X_bdsel( ボード選択 ) 記述 : void A32X_bdsel(int board); 任意ボード Sub A32X_bdsel(ByVal board As Long) 任意ボード : アクセスの対象となるボードを選択します ボード指定機能の付いていない関数を使用するのに先立ち 対象ボードを決定します 戻り値 : ありません ボード番号 0 から 3 に同じプログラムをロードする例です ( エラー処理は省略 ) int board; for(board = 0;board < 4;++board){ A32X_bdsel(board); _A32X_bdinit(); _A32X_hold(); _A32X_loadc("TEST"); } Dim board As Long; For board = 0 to 3 Call A32X_bdsel(board) Call SA32X_bdinit Call SA32X_hold Call SA32X_loadc("TEST") Next board 14

(5)A32X_bios(DSP 上の BIOS 実行 ) 記述 : int A32X_bios(int board,a32x_bios_prm *param); 任意ボード int _A32X_bios(int board,a32x_bios_prm *param); 現在ボード Function A23X_bios(ByVal board As Long, 任意ボード ByRef param As A32X_bios_prm) As Long Function SA32X_bios(ByRef param As A32X_bios_prm) 現在ボード As Long param BIOS への引数と戻り値格納変数 : DSPのモニターに組み込まれたBIOSを モニター経由でホストから実行します BIOSへ渡す機能番号と引数は 構造体で渡します 構造体はインクルードファイル (C) または 標準モジュール (BASIC) に定義されています モニターを使用してBIOSを実行しますから この関数を実行するときにDSPは 次の状態にセットアップします 1)BIOSの組み込まれているモニターをロードする 2) ボードをリセットする 3) ボードを実行状態にする 戻り値 : 0 実行完了しました -1 モニターとハンドリングできません A32X_bios_prm prms; /* ここまででモニターをロードし実行する手続きをとります */ prms.r0 = 75; prms.r2 = 0x200400L; prms.r3 = 100; if(a32x_bios(0,&prms)){printf("bios(monitor) execute error.\n"); }else{printf("function complete.\n");} Dim prms As A32X_bios_prm ' ここまででモニターをロードし実行する手続きをとります prms.r0 = 75:prms.R2 = &H200400:prms.R3 = 100 If A32X_bios(0,prms) Then Print "BIOS(monitor) execute error." Else:Print "Function complete.":end If 15

(6)A32X_bnksel( メモリーバンク選択 ) 記述 : void A32X_bnksel(int board, 任意ボード unsigned long address); void _A32X_bnksel(unsigned long address); 現在ボード Sub A32X_bnksel(ByVal board As Long, 任意ボード ByVal address As Long) Sub SA32X_bnksel(ByVal address As Long) 現在ボード address メモリーアドレス : 停止モードで DSP の外部メモリーをアクセスする場合のアドレスを ボードに対して 設定します DSP を停止した状態で使用してください 戻り値 : ありません #define A32X_OFFSET(adrs) (adrs & 0xfffL) unsigned long address = 0x12345L,offset,data; A32X_bdsel(0); /* 対象ボード切り替え */ _A32X_hold(); /* 停止 */ A32X_bnksel(address); /* メモリーバンク選択 */ offset = A32X_OFFSET(address); /* オフセット計算 */ data = *(A32X_Segment + offset); /* データを取得 */ このような使用例はではできません A32X_getmem 関数などを使用してください 注意 )A32X_Segment 変数は USB 接続時には使用できません 16

(7)A32X_boot( 実行開始番地設定 ) 記述 : int A32X_boot(int board,unsigned long address); 任意ボード int _A32X_boot(unsigned long address); 現在ボード Function A32X_boot(ByVal board As Long, 任意ボード ByVal address As Long) As Long Function SA32X_boot(ByVal address As Long) As Long 現在ボード address 実行開始番地 : DSPボードのリセットベクターを設定し 実行を開始します 次回からは リセットのみで再起動できます この関数を用いてDSPの任意の番地から実行させることができます 実行をさせるのにモニターを使用しないで リセットと同時に実行を開始します ただし DSPの初期化などの処理をユーザープログラムが行う必要がありますので DSPの初期化方法を熟知していないユーザーは 使用を控えたほうがよいかもしれません 戻り値 : 0 正常に終了しました -1 異常が発生しました 原因は 次のいずれかです 1) ボードの停止実行状態の切り替えができない 2) ボードのメモリーにデータが書き込めない unsigned long address = 0x1000L; _A32X_boot(address); Const address As Long = &H1000 Call _A32X_boot(address) 17

(8)A32X_entryc(COFF ファイルからのエントリ取り出し ) 記述 : int A32X_entryc(const char *file_name,unsigned long *entry); Function A32X_entryc(ByVal file_name As String, ByRef entry As long) As Long 引数 : file_name COFF ファイル名 entry 実行開始番地 ( エントリ ) の格納変数 : COFFフォーマットのオブジェクトファイルから 起動開始番地を取得します COFFファイルには オブジェクトコードのほかにプログラムの実行開始番地情報も格納されています これを取り出し モニターに与えることによってCOFF ファイルを正確に起動できます マップファイルからも同様に実行開始番地を取り出すことができます 戻り値 : 0 正常終了しました -1 異常終了しました 原因は次のいずれかです 1) ファイルが見つからない 2) ファイルが異常である 3) ファイルはCOFFファイルではない 参考 : A32X_entrym unsigned long address; if(a32x_entryc("test.out",&address)){printf("entry get error.\n"); }else{printf("entry address is %08lX\n",address)} Dim address As Long If A32X_entryc("TEST.OUT",address) Then Print "Entry get error" Else:Print "Entry address is ";Hex$(address):End If 18

(9)A32X_entrym( マップファイルからのエントリ取り出し ) 記述 : int A32X_entrym(const char *file_name,const char *entry_name, unsigned long *entry); Function A32X_entrym(ByVal file_name As String, ByVal entry_name As String,ByRef entry As Long) As Long 引数 : file_name マップファイル名 entry_name エントリーシンボル名格納変数 entry エントリー番地格納変数 : DSPプログラムのマップファイルから 起動番地を取得します DSP のプログラム開発時にリンカーの出力したマップファイルを取り込み エントリーポイントのシンボルとアドレスを取得します COFFファイルからも同時にエントリーが取り出せます 戻り値 : 0 正常終了しました -1 異常終了しました 原因は次のいずれかです 1) ファイルが見つからない 2) ファイルが異常である 3) ファイルはマップファイルではない 参考 : A32X_entryc char entry_name[120]; unsigned long address; if(a32x_entrym("test.map",entry_name,&address)){printf("entry get error.\n"); }else{printf("entry is [%s] %08lX\n",entry_name,address);} Dim entry_name As String Dim address As Long entry_name = Space$(120) If A32X_entry("TEST.MAP",entry_name,address) Then Print "Entry get error." Else:Print "Entry is ";entry_name;hex$(address):end If 19

(10)A32X_getmem( メモリーからのアップロード ) 記述 : void A32X_getmem(int board,unsigned long address, 任意ボード unsigned long *data); void _A32X_getmem(unsigned long adsress, 現在ボード unsigned long *data); Sub A32X_getmem(ByVal board As Long, 任意ボード ByVal address As Long,ByRef data As Long) Sub SA32X_getmem(ByVal address As Long, 現在ボード ByRef data As Long) address メモリーのアドレス data メモリー内容格納変数 : DSP の外部メモリーからホストへのメモリーへ データをアップロードします データ長は 1 ワードのみです 戻り値 : ありません 参考 : A32X_putmem unsigned long data; _A32X_getmem(0x1000L,&data); Dim data As Long Call _A32X_getmem(&H1000,data) 20

(11)A32X_hinit( 通信関数初期化 ) 記述 : void A32X_hinit(int board); 任意ボード void _A32X_hinit(void); 現在ボード Sub A32X_hinit(ByVal board As Long) 任意ボード Sub SA32X_hinit() 現在ボード : 対 DSP 通信関数の初期化を行います DSP のプログラムとオンラインで通信をする場合 最初にこの関数にて初期化する 必要があります 戻り値 : ありません 参考 : A32X_hrcv,A32X_hrcvdt,A32X_htfr,A32X_htfrdt _A32X_hinit(); Call SA32X_hinit 21

(12)A32X_hold( ボード停止 ) 記述 : int A32X_hold(int board); 任意ボード int _A32X_hold(void); 現在ボード Function A32X_hold(ByVal board As Long) As Long 任意ボード Function SA32X_hold() As Long 現在ボード : DSPボードを停止状態にします DSPの外部メモリーを直接ホストからアクセスする場合に この機能を使用します DSP 自体はホールド機能により一旦停止されるのみで 後で実行状態に戻すことにより処理を継続できます 戻り値 : 0 正常終了しました -1 ボードが異常です 参考 : A32X_run,A32X_holdstus if(_a32x_hold()){printf("board hold error.\n"); }else{printf("board hold.\n");} If SA32X_hold Then Print "Board hold error." Else:Print "Board Hold":End If 22

(13)A32X_holdstus( 実行停止確認 ) 記述 : int A32X_holdstus(int board); 任意ボード int _A32X_holdstus(void); 現在ボード Function A32X_holdstus(ByVal board As Long) As Long 任意ボード Function SA32X_holdstus() As Long 現在ボード : ボードの停止状態を取得します ボードがホールドしているか または 実行しているかをテストし 結果を返します A32X_run A32X_hold によって 正しく制御された後に この関数を実行した場合は それぞれ停止 実行状態が返されます 停止 実行状態が A32X_run A32X_hold 関数または 同等の機能の関数を使用せずに DSPが勝手に状態を推移させることはありません したがって シーケンシャルなプログラムの場合には 特にこの関数を使用する必要はないと思われます この関数のようとは 未知のボード状態を取得する必要がある場合にのみです 戻り値 : 1 停止しています 0 実行しています 参考 : A32X_hold A32X_run if(_a32x_holdstus()){printf("board is holding.\n"); }else{printf("board is running.\n");} If SA32X_holdstus Then Print "Board is holding." Else:Print "Board is running.":end If 23

(14)A32X_hrxst( 受信ステータス確認 ) 記述 : int A32X_hrxst(int board); 任意ボード int _A32X_hrxst(void); 現在ボード Function A32X_hrxst(ByVal board As Long) As Long 任意ボード Function SA32X_hrxst() As Long 現在ボード : DSPがホストへのデータ送信を開始しているかを確認します ホストとDSP 間のハンドリングは CPUでソフト的に行っています ホスト側が受信関数を実行しない場合 DSP 側の送信処理は完了しません ランダムなタイミングでDSPからホストへデータの送信が行われる場合 この関数で DSPの送信開始を検出し 送信を開始していた場合は受信処理を実行し そうでない場合は ほかの処理を行ってもかまいません 戻り値 : 0 DSP は送信を開始していません 1 DSP は送信を開始しています 参考 : A32X_hrcv A32X_hrcvdt unsigned long code; _A32X_hinit(); if(_a32x_hrxst()){_a32x_hrcv(&code);} }else{ } Dim code As Long Call SA32X_hinit If SA32X_hrxst Then SA32X_hrcv(code) Else End If 24

(15)A32X_hrcv( コード受信 ) 記述 : int A32X_hrcv(int board,unsigned long *code); 任意ボード int _A32X_hrcv(unsigned long *code); 現在ボード Function A32X_hrcv(ByVal board As Long, 任意ボード ByRef code As Long) As Long Function SA32X_hrcv(ByRef code As Long) As Long code コード格納変数 : DSPから1ワードのコードを受信します DSPからホストへ渡すデータが1ワードの場合 この関数を使用します 機能的には A32X_hrcvdt 関数のデータ長が0の場合と同じですが あらかじめデータ長が 0とわかっている場合には この関数を使用したほうがオーバーヘッドが小さくなります 戻り値 : 0 正常に受信しました -1 受信中にタイムアップしました DSP が送信を開始していないか または 停止しています 参考 : A32X_hrcvdt unsigned long code; if(_a32x_hrcv(&code)){printf("recieve error.\n"); }else{printf("recieve %08lX\n",code);} Dim code As long If SA32X_hrcv(code) Then Print "Recieve error." Else:Print "Recieve ";Hex$(code):End If 25

(16)A32X_hrcvdt( データ受信 ) 記述 : int A32X_hrcvdt(int board,unsigned long *code, 任意ボード unsigned int *size,unsigned long *data); int _A32X_hrcvdt(unsigned long *code, 現在ボード unsigned int *size,unsigned long *data); Function A32X_hrcvdt(ByVal board As Long, 任意ボード ByRef code As Long,ByRef size As Long, ByRef data As Any) As Long Function SA32X_hrcvdt(ByRef code As long,byref size As Long, ByRef data As Any) As Long code 受信コード格納変数 size 受信データサイズ格納変数 data 受信データ格納配列 : DSPから1ワードのコードと任意の長さのデータを受信します DSPからホストへ渡すデータが 複数ワードの場合はこの関数を使用します データは1ワード4バイトのデータ すなわち Long 型または Float 型に限ります データ長はDSPが送信を開始する時点で指定し 最大値は1700ワードです 戻り値 : 0 正常に受信しました -1 受信中にタイムアップしました DSP が送信を開始していないか または 停止しています 参考 : A32X_hrcv int size; unsigend long code; float data[1700]; if(_a32x_hrcvdt(&code,&size,(unsigned long *)data)){printf("recieve error.\n"); }else{printf("recieve code %08lX\nData size is %d\n",code,size);} Dim size As Long,code As Long,data(1700) As Single If SA32X_hrcvdt(code,size,data) Then Print "Recieve error" Else:Print "Recieve code ";Hex$(code);" data Size is ";size:end If 26

(17)A32X_hrdy( 受信完了報告 ) 記述 : void A32X_hrdy(int board,int code); 任意ボード void _A32X_hrdy(int code); 現在ボード Sub A32X_hrdy(ByVal board As Long, 任意ボード ByVal code As Long) Sub SA32X_hrdy(ByVal code As Long) 現在ボード code 受信完了コード : DSP からデータ ( またはコード ) を受信したら 次にこの完了報告をします これにより DSP はホストが処理を完了したことを検出できます 戻り値 : ありません 参考 : A32X_hrxst,A32X_hrcv,A32X_hrcvdt unsigned long code; _A32X_hrcv(&code); _A32X_hrdy(0); Dim code As Long Call SA32X_hrcv(code) Call SA32X_hrdy(0) 27

(18)A32X_htfr( コード送信 ) 記述 : int A32X_htfr(int board,unsigned long code); 任意ボード int _A32X_htfr(unsigned long code); 現在ボード Function A32X_htfr(ByVal board As Long, 任意ボード ByVal code As Long) As Long Function SA32X_htfr(ByVal code As Long) As Long 現在ボード code 送信コード : DSPへ1ワードのコードを送信します ホストからDSPへ渡すデータが1ワードの場合 この関数を使用します 機能的には A32X_htfrdt 関数のデータ長が0の場合と同じですが あらかじめデータ長が 0とわかっている場合には この関数を使用したほうがオーバーヘッドが小さくなります 戻り値 : 0 正常に送信しました -1 送信中にタイムアップしました DSP が受信を開始していないか または 停止しています 参考 : A32X_htfrdt unsigned long code = 0x1234L; if(_a32x_htfr(code)){printf("transfer error.\n"); }else{printf("transfer complete.\n");} Const code As long = &H1234 If SA32X_htfr(code) Then Print "Transfer error." Else:Print "Transfer complete.":end If 28

(19)A32X_htfrdt( データ送信 ) 記述 : int A32X_htfrdt(int board,unsigned long code, 任意ボード int size,unsigned long *data); int _A32X_htfrdt(unsigned long code, 現在ボード int size,unsigned long *data); Function A32X_htfrdt(ByVal board As Long, 任意ボード ByVal code As Long,ByVal size As Long, ByRef data As Any) As Long Function SA32X_htfrdt(ByVal code As Long, 現在ボード ByVal size As Long,ByRef data As Any) As Long code 送信コード size 送信データ長 data 送信データ配列 : DSPへ1ワードのコードと任意の長さのデータを送信します ホストからDSPへ渡すデータが複数ワードの場合には この関数を使用します データは1ワード4バイトのデータ すなわち Long 型または Float 型に限ります データ長はホストが送信をする時点で指定し 最大値は1700ワードです 戻り値 : 0 正常に送信しました -1 送信中にライムアップしました DSP が受信を開始していないか または 停止しています 参考 : A32X_htfr int size; unsigned long code,data[1700]; for(size = 0;size < 1700;++size){data[size] = size;} _A32X_htfrdt(code,size,data); Dim size As Long,code As Long,data(1700) As Long For size = 0 To 1699:data(size) = size:next size:size = 1700 Call SA32X_htfrdt(code,size,data) 29

(20)A32X_htxst( 送信ステータス確認 ) 記述 : int A32X_htxst(int board); 任意ボード int _A32X_htxst(void); 現在ボード Function A32X_htxst(ByVal board As Long) As Long 任意ボード Function SA32X_htxst() As Long 現在ボード : DSPへのデータ送信のステータスを取得します DSPとのデータ授受は 双方向性の同一領域を介して行っています 再起に送ったデータを まだDSPが取り出しを完了していない場合は ホストは次のデータの送信を開始することはできません そのため送信に先立って この関数を使用して 通信バッファが空であることを確認してください 戻り値 : 0 DSP への送信を開始できます (DSP が受信完了報告を行った場合か 次の データの受信を開始している場合 ) 0 以外 DSP への送信を開始できません 参考 : A32X_htfr A32X_htfrdt while(_a32x_htxst()); _A32X_htfr(0); While SA32X_htxst:Wend Call SA32X_htfr(0) 30

(21)A32X_hwit( 送信相手完了確認 ) 記述 : int A32X_hwit(int board); 任意ボード int _A32X_hwit(void); 現在ボード Function A32X_hwit(ByVal board As Long) As Long 任意ボード Function SA32X_hwit() As Long 現在ボード : DSPへのデータの送信後 DSPが受信の後処理を完了したかどうかのタイミングを同期する目的で使用します たとえば DSP 側がデータ受信後 なんらかの処理を行い ホストはその完了を待機してから 次の処理を開始する場合などに使用します この関数は シーケンシャルにデータを送信するだけの場合には 特に実行する必要はありません 戻り値 : 0 DSP は受信処理を完了しました (DSP が受信完了報告を行った場合 または 次の受信を開始している場合 ) 0 以外 DSP は受信後の処理中です 参考 : A32X_htfr A32X_htfrdt _A32X_tfrdt(code,size,data); while(_a32x_hwit()); printf("dsp is reviece complete.\n"); Call SA32X_htfrdt(code,size,data) While SA32X_hwit:Wend Print "DSP is recieve complete." 31

(22)A32X_int0(DSP ボードへの割り込み発生 ) 記述 : int A32X_int0(int board); 任意ボード int _A32X_int0(void); 現在ボード Function A32X_int0(ByVal board As Long) As Long 任意ボード Function SA32X_int0() As Long 現在ボード : ホストからDSPに対して 割り込みを発生します ホストからDSPへの同期に利用できます ハードウェアによる割り込みです ホストとDSP 間の同期がリアルタイムで かつ 速度が要求される場合を除き極力 A32X_hxxx 関数を使用するようにしてください 戻り値 : 0 常に 0 _A32X_int0(); Call SA32X_int0 32

(23)A32X_libenter( デバイスドライバーのオープン ) 記述 : int A32X_libenter(void); Function A32X_libenter() As Long 引数 : なし : ライブラリの初期化と 仮想デバイスドライバーをオープンします 本ライブラリのほかの機能を使用するに先立って この関数を必ず実行してください 戻り値 : 0 正常にオープンできました 1 デバイスドライバーがオープンできません (A32X.VXDが見つからない ) 2 デバイスがすでに使用されています ( 前回 A32X_libexit を実行せずに終了した ) 3 メモリーが確保できませんでした (DSPのメモリー空間が Windows95で使用不可能 ) 4 有効なDSPが1 枚も見つかりません ( デバイスドライバーの設定がDPSボードの設定と合っていない ) 参照 : A32X_libexit if(a32x_libenter()){ printf("library initialize error.\n"); exit(1); } If A32X_libenter Then Print "Library initialize error.\n" End End If 33

(24)A32X_libexit( デバイスドライバーのクローズ ) 記述 : void A32X_libexit(void); Sub A32X_libexit 引数 : なし : デバイスドライバーを開放します プログラムを終了する直前にこの関数を呼び出し デバイスドライバーを開放する必要があります この関数を実行しないでプログラムを終了した場合 次回の A32X_libenter 関数の呼び出しが失敗する場合があります この場合 ドライバ設定プログラムの リジューム ボタンで デバイスドライバーをリセットしてください 戻り値 : なし 参考 : A32X_libenter A32X_libexit(); Call A32X_libexit 34

(25)A32X_loadc(COFF ファイルのダウンロード ) 記述 : int A32X_loadc(int board,const char *name); 任意ボード int _A32X_loadc(const char *name); 現在ボード Function A32X_loadc(ByVal board As Long, 任意ボード ByVal name As String) As Long Function SA32X_loadc(ByVal name As String) As Long name COFF ファイル名 : COFFファイルフォーマットのオブジェクトファイルをDSPの外部メモリーにダウンロードします ロード可能なファイルは リンカーが出力したCOFFファイルフォーマット0(-v0) の実行形式のモジュールです ロード可能な領域は DSPの外部メモリー (0 番地からメモリーの実装されている範囲 ) です すでにロードされている領域への重複したロードの検出は行っていないので ロードするアドレスには十分注意してください 戻り値 : 0 正常にロードが完了しました -1 ロード異常です 原因は次のいずれかです 1) ファイルが見つからない 2) ファイルはCOFFファイルではない 3) ファイルが異常 4) メモリー書き込み異常 参考 : A32X_loadm A32X_savec if(_a32x_loadc("test.out")){printf("load error.\n");} else{printf("load success.\n");} If SA32X_loadc("TEST.OUT") Then Print "load error." Else:Print "Load success.":end If 35

(26)A32X_loadm( メモリーからのダウンロード ) 記述 : int A32X_loadm(int board,unsigned long address, 任意ボード unsigned long size,unsigned long *data); int _A32X_loadm(unsigned long address, 現在ボード unsigned long size,unsigned long *data); Function A32X_loadm(ByVal board As Long, 任意ボード ByVal address As Long,ByVal size As Long, ByRef data As Any) As Long Function SA32X_loadm(ByVal address As Long, 現在ボード ByVal size As long,byref data As Any) As Long address ダウンロード アドレス size ダウンロード サイズ data ダウンロード データ格納配列 : ホストのメモリーに蓄えられたデータなどを DSP の外部メモリーにダウンロードします ロードするデータ長は DSP から見たワード数を指定します ロードするデータの型は Long 型または Float 型です 戻り値 : 0 正常にロードが完了しました -1 ロード異常です メモリーに正しく書き込めませんでした 参考 : A32X_loadc if(_a32x_loadm(0x1000,0x100,data)){printf("load error.\n");} else{printf("load success.\n");} If SA32X_loadm(&H1000,&H100,data) Then Print "Load error." Else:Print "Load success.":end If 36

(27)A32X_moniter(DSP 上のモニター実行 ) 記述 : int A32X_moniter(int board,a32x_mon_prm *param); 任意ボード int _A32X_monitor(A32X_mon_prm *param); 現在ボード Function A32X_moniter(ByVal board As Long, 任意ボード ByRef param As A32X_mon_prm) As Long Function SA32X_moniter(ByRef param As A32X_mon_prm) 現在ボード As Long param モニターへの引数と戻り値格納変数 : モニタープログラムとハンドリングし モニターコマンドを実行します モニターを使用したユーザープログラムの起動は この処理を使用しています オンチップメモリーへのアクセスは この関数を使用します モニターへの引数と戻り値は 構造体で与えます 戻り値 : 0 正常に終了しました -1 異常終了しました モニターとのハンドリングができません 原因は 次のいずれかです 1) モニターがロードされていない 2) モニターが破壊されている 3) ボードが停止している A32X_mon_prm prms; prms.code = MC_READ; prms.prm1 = 0x809800; _A32X_moniter(&prms); printf("on-chip data is %08lx\n",prms.res1); Dim prms As A32X_mon_prm; prms.code = MC_READ:prms.prm1 = &H809800 Call SA32X_moniter(prms) Print "on-chip data is ";Hex$(prms.res1) 37

(28)A32X_putmem( メモリーへのダウンロード ) 記述 : int A32X_putmem(int board,unsigned long address, 任意ボード unsigned long data); int _A32X_putmem(unsigned long address, 現在ボード unsigned long data); Function A32X_putmem(ByVal board As Long, 任意ボード ByVal address As Long,ByVal data As Long) As Long Function SA32X_putmem(ByVal address As long, 現在ボード ByVal data As Long) As Long address ダウンロード アドレス data ダウンロード データ : ホストのメモリーから DSP 上の外部メモリーへ データをダウンロードします データ長は 1 ワードです 戻り値 : 0 正常終了しました -1 書き込み異常です 参考 : A32X_getmem _A32X_putmem(0x1000,0x12345678); Call SA32X_putmem(&H1000,&H12345678) 38

(29)A32X_reset( ボードリセット ) 記述 : void A32X_reset(int board); 任意ボード void _A32X_reset(void); 現在ボード Sub A32X_reset(ByVal As Long) 任意ボード Sub SA32X_reset() 現在ボード : DSPをリセットします ホールドの制御は行っていません 停止状態でリセットした場合は リセット後も停止状態を保持しています また 実行状態でリセットされた場合は リセットベクタ (0 番地 ) の指標するアドレスから実行を開始します 戻り値 : ありません _A32X_reset(); Call SA32X_reset 39

(30)A32X_run( ボード実行開始 ) 記述 : int A32X_run(int board); 任意ボード int _A32X_run(void); 現在ボード Function A32X_run(ByVal As Long) As Long 任意ボード Function SA32X_run() As Long 現在ボード : DSP ボードを実行状態にします 戻り値 : 0 実行開始しました -1 ボードの異常です 参考 : A32X_hold A32X_holdstus if(_a32x_run()){printf("board error.\n");} else{printf("board running.\n");} If SA32X_run Then Print "Board error." Else:Print "Board running.":end If 40

(31)A32X_savec(COFF ファイルへのアップロード ) 記述 : int A32X_savec(int board,unsigned long address, 任意ボード unsigned long size,unsigned long entry, const char *name); int _A32X_savec(unsigned long address, 現在ボード unsigned long size,unsigned long entry, const char *name); Function A32X_savec(ByVal board As Long, 任意ボード ByVal address As Long,ByVal size As Long, ByVal entry As Long,ByVal name As String) As Long Function SA32X_savec(ByVal address As Long, 現在ボード ByVal size As Long,ByVal entry As Long, ByVal name As String) As Long address アップロード アドレス size アップロード サイズ entry 実行開始アドレス name ファイル名 : DSPの外部メモリーをCOFFファイルに格納します 格納時 必要に応じてプログラムの開始アドレスを指示できます プログラムだけでなく データ領域もセーブできます 格納したCOFFファイルは ダウンロード関数でロードできます 戻り値 : 0 正常終了しました -1 異常終了しました 原因は 次のいずれかです 1) ファイル名が不正で ファイルがオープンできない 2) 同名ファイルがあり かつリードオンリーで オープンできない 3) ディスクの空き領域が 不足している 参考 : A32X_savem A32X_loadc if(_a32x_savec(0x1000,0x100,0x1000,"test.out")){printf("write error.\n");} else{printf("write complete.\n");} If SA32X_savec(&H1000,&H100,&H1000,"TEST.OUT") Then Print "write error." Else:Print "write complete.":end If 41

(32)A32X_savem( メモリーへのアップロード ) 記述 : int A32X_savem(int board,unsigned long address, 任意ボード unsigned long size,unsigned long *code); int _A32X_savem(unsigned long address, 現在ボード unsigned long size,unsigned long *code); Function A32X_savem(ByVal board As Long, 任意ボード ByVal address As long,byval size As Long, ByRef code As Any) As Long Function SA32X_savem(ByVal address As Long, 現在ボード ByVal size As Long,ByRef code As Any) As Long address アップロード アドレス size アップロード サイズ code アップロード データ格納配列 : DSPの外部メモリーの内容を ホスト側メモリーにアップロードします アップロードするデータの型は Long 型または Float 型に限ります アップロード可能な領域は DSPの外部メモリー (0 番地からメモリーの実装されている範囲 ) です 戻り値 : 0 常に 0 参考 : A32X_loadm A32X_savec unsigned long code[0x100]; _A32X_savem(0x1000,0x100,code); Dim code(&h100) As Long Call SA32X_savem(&H1000,&H100,code) 42

(33)A32X_setirqhndl(DSP からの割り込みハンドラ設定 ) 記述 : int A32X_setirqhndl(HWND hwnd,uint message,wparam wparam, LPARAM lparam); なし 引数 : hwnd ウィンドウハンドル message メッセージ コード wparam パラメータ1 lparam パラメータ2 : DSP からの割り込み処理ハンドラを設定します DSP から割り込みが発生した場合 hwnd で指定したウィンドウに message で指定した メッセージが送信されます 戻り値 : 0 常に 0 #define DSP_IRQ 1234 A32X_setirqhndl(MyWnd,DSP_IRQ,0,0); 43

(34)A32X_start( ユーザープログラムの実行開始 #1) 記述 : int A32X_start(int board,unsigned long address); 任意ボード int _A32X_start(unsigned long address); 現在ボード Function A32X_start(ByVal board As Long, 任意ボード ByVal address As Long) As Long Function SA32X_start(ByVal address As Long) As Long 現在ボード address 実行開始アドレス : DSP ボード上のモニターとハンドリングし ユーザープログラムを起動します ユーザープログラムのほか モニターがロードしてあり ボードが実行状態でないと 起動できません 戻り値 : 0 正常終了しました -1 異常終了しました 原因は次のいずれかです 1) ボードが停止している 2) モニターがロードされていない 3) ボードの異常 参考 : A32X_entryc A32X_bdsel(0); _A32X_bdinit(); _A32X_hold(); _A32X_loadc("MON32X.OUT"); _A32X_loadc(user); _A32X_reset(); _A32X_run(); A32X_entryc(user,&start); _A32X_start(start); Call A32X_bdsel(0):Call SA32X_bdinit:Call SA32X_hold Call SA32X_loadc("MON32X.OUT"):Call SA32X_loadc(user) Call SA32X_reset:Call SA32X_run Call SA32X_entryc(user,start):Call SA32X_start(start) 44

(35)A32X_startm( ユーザープログラムの実行 #2) 記述 : int A32X_startm(int board,const char *name); 任意ボード int _A32X_startm(const char *name); 現在ボード Function A32X_startm(ByVal board As Long, 任意ボード ByVal name As String) As Long Function SA32X_startm(ByVal name As String) As long 現在ボード name マップファイル名 : DSPプログラムのリンカーが出力したマップファイルから プログラムの実行開始番地の取得と ユーザープログラムの実行を一括して行います この関数は A32X_entrym と A32X_start を実行しています この関数は 旧バージョンと互換性を保つために用意されたものです 同様の機能が A32X_entryc と A32X_start で実行できるので そちらを使用してください 戻り値 : 0 正常終了しました -1 異常終了しました 原因は次のいずれかです 1) ボードが停止している 2) モニターがロードされていない 3) ボードの異常 4) マップファイルが見つからない 5) マップファイルの異常 参考 : A32X_entrym A32X_start : _A32X_loadc("USER.OUT"); _A32X_startm("USER.MAP"); : Call SA32X_loadc("USER.OUT") Call SA32X_startm("USER.MAP") 45

(36)A32X_symbolc(COFF ファイルからのシンボル取り出し ) 記述 : int A32X_symbolc(const char *file_name,const char *sym_name, unsigned long *value); Function A32X_symbolc(ByVal file_name As String,ByVal sym_name As String, ByRef value As Long) As Long 引数 : file_name COFFファイル名 sym_name シンボル名 value シンボル値を格納する変数 : DSPプログラムのCOFFファイルから 変数などのアドレス情報を取得します DSPプログラムの開発時に リンカーが出力したCOFFファイルを取り込み 変数名を指標にして アドレス情報を取得します プログラム開発時などで アドレスが流動的な場合に有用です 取り出し可能なシンボルは グローバル宣言のある変数 関数に限ります C 言語の場合は大域変数で クラスが static でないもの および static でない関数です C 言語のシンボルは ソースで定義した名称の先頭に _ が付いたシンボルになります 戻り値 : 0 正常に検出しました -1 異常終了しました 原因は次のいずれかです 1) ファイルが見つからない 2) ファイルが異常である 3) ファイルがCOFFファイルではない 参考 : A32X_symbolm A32X_entryc A32X_entrym unsigned long adrs; if(a32x_symbolc("test.out","_value",&adrs)){printf("symbol get error.\n");} else{printf("symbol address %08lX.\n",adrs);} Dim adrs As Long If A32X_symbolc("TEST.OUT","_value",adrs) Then Print "Symbol get error." Else:Print "Symbol address ";Hex$(adrs):End If 46

(37)A32X_symbolm( マップファイルからのシンボル取り出し ) 記述 : int A32X_symbolm(const char *file_name,const char *sym_name, unsigned long *adrs); Function A32X_symbolm(ByVal file_name As String,ByVal sym_name As String, ByRef adrs As Long) As Long : DSPプログラムのマップファイルから 変数などのアドレス情報を取得します DSPプログラムの開発時に リンカーが出力したマップファイルを取り込み 変数名を指標にしてアドレス情報を取得します プログラム開発時などで アドレスが流動的な場合に有用です 取り出しの可能なシンボルは グローバル宣言のある変数 関数に限ります C 言語の場合は 大域変数でクラスが static でないもの および static でない関数です C 言語のシンボルは ソースで定義した名称の先頭に _ が付いたシンボルになります 戻り値 : 0 正常に検出しました -1 異常終了しました 原因は次のいずれかです 1) ファイルが見つからない 2) ファイルが異常である 3) ファイルがマップファイルではない 参考 : A32X_symbolc A32X_entryc A32X_entrym unsigned long adrs; if(a32x_symbolm("test.map","_value",&adrs)){printf("symbol get error.\n");} else{printf("symbol address %08lX.\n",adrs);} Dim adrs As Long If A32X_symbolm("TEST.MAP","_value",adrs) Then Print "Symbol get error." Else:Print "Symbol address ";Hex$(adrs):End If 47

(38)A32X_valid( ボード実装確認 ) 記述 : int A32X_valid(int board); Function A32X_valid(ByVal board As Long) As Long : 指定されたボード番号の ボードが実装されているかどうかを取得します ボードが実装されているかどうかは ライブラリの初期化関数が確認をし 変数に保存 されています この関数は その変数の値を返します 戻り値 : 0 ボードは実装されていません 1 ボードが実装されています 使用例 : 実装されているボードを すべてリセットします #define BD_MAX 16 int bn; for(bn = 0;bn < BD_MAX;++bn){ if(a32x_valid(bn)){ A32X_reset(bn); } } Const BD_MAX As Long = 16 Dim bn As Long For bn = 0 To BD_MAX - 1 If A32X_valid(bn) Then Call A32X_reset(bn) End If Next bn 48

(39)A32X_Segment(DSP メモリー窓アクセス用ポインタ ) 注意 )A32X_Segment 変数は USB 接続時には使用できません 記述 : unsigned long *A32X_Segment; なし : この変数は特殊な変数で DSP ボードのメモリーを直接ユーザーから操作するための ポインタを供給するポインタ変数です DSPボードのメモリーは ホストに16Kバイト (4Kワード) の空間で結合され ホストがDSPボード上のメモリーにアクセスするには この16Kバイトの空間を介してアクセスします このポインタを使用してアクセスすることで 大量のデータをオーバーヘッドなしで アクセスすることが可能となります アクセスの単位は Long 型 (4バイトごと) で行ってください 一度に参照できるDSPのアドレス空間範囲は 0から4095の領域です それ以上の範囲をアクセスするには バンクを A32X_bnksel で切り替える必要があります この変数の値を変更しないように注意してください unsigned long *ptr = A32X_Segment; unsigned long buf[8192]; unsigned long dsp_adrs; unsigned long dsp_bnk; _A32X_bnksel(dsp_bnk = 0); for(dsp_adrs = 0;dsp_adrs < 8192;++dsp_adrs){ if(dsp_bnk!= (dsp_adrs / 0x1000L)){ _A32X_bnksel(dsp_adrs); dsp_bnk = dsp_adrs / 0x1000L; } buf[dsp_adrs] = *(ptr + (dsp_adrs & 0xfffL)); } 49

7. ライブラリー使用上の注意 ライブラリーをより効率的かつ的確に使用していただくためには 注意すべき点がいくつかあります 下記に記しますのでプログラミングの際の ご参考にしてください 1) このライブラリーには ライブラリーの初期化関数 (A32X_libenter) と 開放関数 (A32X_libexit) があります 初期化関数は ほかのどの関数にも先立って実行する必要があります これを行わないとライブラリが正しく動作しないほか 思わぬ動作をする場合がありますので 注意してください また 開放関数は プログラムを終了する直前で呼び出す必要があります これを行わないと 次回ライブラリーを使用するときに デバイスドライバーが開放されていないため 初期化異常が発生します C 言語などでは atexit 関数などを使用して プログラムが終了する直前 BASICでは メインフォームの Unload イベントを使用して この関数を呼び出すようにしてください 2) DSPボードは ホストから見た場合 マルチボード構成になります 従って ライブラリーもそれに対応しています ホストからDPSボードをアクセスする場合の 基本的な手順は 1アクセスするボードを選択する 2ボードをアクセスする といった手順になります ところが DSPボードを1 台しか使用しない場合には 対象ボードの選択は 初めに1 回のみ行えばよく 毎回行う必要はありません そこで ライブラリーの使いやすさとオーバーヘッドの低減を考慮し DSPボードをアクセスする関数には A: 対象ボードを選択してからアクセスするタイプ B: 対象ボードを選択せず ( 現在選択されているボードに対して ) アクセスするタイプの 2 種類のタイプがあります また 対象ボードを選択するだけの関数も用意されています 接続するDSPボードの台数 アクセスするボードを切り替えるタイミングなど ユーザープログラムの構造に応じて 適切なタイプを選択して使用してください DSPボードが1 台の場合 初期化時に対象ボード番号を選択し 以後上記 Bタイプの関数を使用する DSPボードが複数の場合で 全ボードを平均的にアクセスする場合 初期化後 上記 Aタイプの関数を使用する DSPボードが複数で 特定のボードにアクセスが集中する場合 ボードごとの手続きを関数化し 関数の始めで対象ボードを選択し 関数内ではBタイプの関数を使用する なお A/B の関数の名称はほぼ同名で A タイプの関数の先頭に C 言語では _ を BASIC では S を付加した 名称が B タイプの関数名称となります 3) DSPボードの状態には 停止 ( ホールド ) 状態と実行 ( ラン ) 状態があります ライブラリーには この状態に付いて停止状態でのみ実行可能なもの 実行状態でのみ実行可能なもの どちらでも実行可能なもの と3 種類の関数が存在します 各関数の または 使用可能状態一覧表を参照の上 注意して使用してください DSPボードの2つの状態をコントロールする関数がありますから 状態を適宜コントロールしながら使用します なお メモリーアクセスを行う関数は 停止状態ではDSPボードのすべての外部メモリーをアクセスすることが可能ですが 実行状態では常に ホスト間の通信メモリーであるデュアル ポートメモリーのみのアクセスとなります これは何を意味するかというと 実行状態においてメモリーをアクセスする関数を呼び出すと 4Kワード境界ごとにデュアル ポートメモリーのイメージが読み書きできるということを意味します 50

本マニュアルの内容は製品の改良のため予告無しに変更される事がありますので ご了承下さい 中部電機株式会社 440-0004 愛知県豊橋市忠興 3 丁目 2-8 TEL <0532>61-9566 FAX <0532>63-1081 URL : http://www.chubu-el.co.jp E-mail : csg@chubu-el.co.jp ADSP324-00A 32 ヒ ットサホ ートソフトウェア ユーサ ース マニュアル 2007. 9 第 4 版発行 0