56k
DSP56001に実装されているモデュロアドレッシングは修飾レジスタMnの値によりM=2~32kBの任意長のリングバッファを構成することができます。(Mn=0のときは特殊でFFTで使うビットリバースアドレッシングになります) ただこれには結構制約があってM=32768ま…
DSP56001ボードの応用例としてオーディオディレイの実装を考えてみます。これはTMS320C25ボードでも同様なことをやっていてループバックの次に簡単な処理です。 まず一定の長さのデータメモリを用意して終端と先頭が連続するようなリングバッファを構成しま…
コーデックでA/D変換したオーディオデータをそのままD/A変換してループバックができましたが、DSP内でのデータ表現がどうなっているか確認しておきました。 サンプリングデータをダンプしてみるとコーデックの出力16bitリニアPCMオーディオデータは符号付き2…
コーデックの基本的な操作はなんとかできるようになったのでやっとアナログ信号のループバックをやってみます プログラムはフレーム同期のたびに更新される左右チャンネルのA/D結果をそのまま左右チャンネルのD/A出力に書き込む、コーディング上はRXバッファ…
アナログ折り返しテストは入力ソースが必要なため、先ずは出力テストのためDACに数値データを書き込み出力信号を観察してみることにしました 前に書いたようにYデータ空間の0x0100~0x01FF番地には1周期のサインデータテーブルROMがあるのでこれをフレーム…
既存のサンプルプログラムを解析し、それをなぞってコーディングするのに苦戦していてなかなか進んでいません。データシートで理解した通りのコーディングがしてあればよいのですが、そうでないところも多々あり・・まあ往々にして自分の理解違いなんですが…
ひと月以上放置してしまいましたが56kボードいじりをやっと再開。やることはコーデックの接続からでした。 参考資料としてそのものずばりのDSP56002EVMのマニュアルはあるのですがかんじんのコーデック部分は既製のサブルーチンとして中身までは説明に触れて…
DSPとアナログ信号の入出力を行うコーデックCS4215とのハード的な接続はこのようになっています。両者の通信は同期シリアルでおこなわれますが、その他に制御線もあるのでピンク網掛けの信号が必要になります これらの信号はDSPのPORT-Cに割付けられますがこ…
テストプログラムのコンパイル結果も問題なく動くので周辺I/Oの確認をしながらライブラリを作っていこうと思いこんなプログラムを書いてみました putcom():シリアルからの1文字出力。内蔵レジスタを直接叩くのでインラインアセンブラで記述 putstr():シリ…
ここでちょっと改善。ユーティリティSRECでオブジェクトから3つのSレコードにスプリットさせたのは基板上の3個のブートROMに書き込むバイナリを生成した時の名残でした。ダウンロード用バイナリファイルには最初から24bitワードデータが並んでいればよいので…
コンパイラの出力は絶対アドレス形式のオブジェクト(.CLD)になります。一方既に実行ができているアセンブラの出力、リロケータブル形式のオブジェクト(.CLN)もリンカDSPLNKに通すことにより.CLDファイルを得ます asm56000 -V -P56001c -B -L %1.asm dspl…
DSP56001用のアセンブラを拾って来た時、GCCベースのCコンパイラg56kも一緒に入手できたので動作確認をしておきます まず簡単なLEDチカチカプログラム: 関数pout()はDSP内蔵ペリフェラルPORT-Bに接続されたLEDへのデータ出力でインラインアセンブラで記述し…
DSP56001ボードのデジタル部分についてはほぼ完成でいいでしょう。今のところハード設計ミスは無いみたいです。ソフトはアセンブラでモニタまでできましたがコーディングしてみた感じではやはりDSP特有のアーキテクチャから来るクセが結構ありました。 以下…
16bit幅のBCR(Bus Control Resister)の4bitづつにXDATA,YDATA,プログラム領域、ペリフェラル領域に0~15の値を与えることでDSPに外付けした各メモリ空間にそれぞれウェイトが設定できます。 BCRを設定してから最小ループを回すテストプログラムを実行させて…
各コマンドにはアドレス引数を持てるようにし、Pコマンド(プログラムロード)にタイムアウト脱出、ロードサイズ表示など追加してコマンド作り込みが完了、これをROMに焼き込み電源ONで高機能モニタが起動しました コードサイズは706word、コマンドバッファ…
高機能化した修正版モニタのめどが付いてきてサイズも高々1kwordくらいになりそうなのでメモリ配置を再検討しました。 いままではDSPをMODE3(Development Mode)で起動していましたがこれをMODE2(Normal Expanded Mode)にしました。こうすることでリセットベ…
拡張バイトにデータが残っているとCMP A,Bが常に負になるので引数$A~$Fが+$30足した”:;<=>?”になったということです 修正は簡単で24bitレジスタを56bitアキュームレータAにコピーした時に無条件に拡張バイトA2を0クリアするだけです。再度ダンプして…
原始モニタのコーディングができたのでこれをROMに焼き電源ONで起動するようにしました。これでテストプログラムをSRAM領域にDLLしては即試行できるので開発効率が飛躍的に向上します。まずは原始モニタ自身のコードをロードしてこれに機能拡張していくこと…
即値アドレッシングしている部分に「>」演算子を付けてロングワードであることを明示。入力されたコードをコマンドコード「P」「G」と比較して分岐する部分も同様に修正しこれでシリアル入出力とI/Fが一致してコマンド入力、分岐ができるようになりました …
これの原因は最初のLEDチカチカで失敗したのと同じで24bitデータ幅での表現方法にありそうです。ALUレジスタにセットされる数値は固定小数点、2の補数表現を想定しているので単純に整数を右詰されるつもりロードしても、意に反して左詰めされるとマニュアル…
ハードウェアは動いてるっぽいのでここから先はいつもの手順です。テストコードを作ってはROM抜き差しは大変なのでプログラムロードと実行だけできる原始モニタのコーディングからになります。 DSP内蔵のSCIユニットを使った1文字入出力ルーチンはさらっと記…
算術命令が動かない、となるとDSP自体にバグがあるとか・・だいたい実装しているのが正規版のDSP56001ではなくてエンジニアサンプル版のXSP56001な訳で。・・あるいはこの現象にも似ているのでDSPのハード的な使い方に重大なミスがあるんじゃないかと。でマ…
JMP $の単純ループが成功したのでこれに外部I/Oアクセスを組み入れてループしているのを外から観察できるようにしてみます。よくやるのは8bitパラレルにつないだLEDにインクリメントデータを出力することですが、ここではさらにシリアルへの垂流し出力も同時…
出力された24bitコード0x0C0000を3個のROMの0番地に0x0C,0x00,0x00と分割して書込み、ボードにセットしました ROMソケットの配置は左からLOW-MIDDLE-HIGH(D00....D23)ですが逆順の方が良かったかも。 ch1:ROMリード信号/RD、ch2:アドレスA0をプローブして…
DSP56001ボードはDSP周りのハードが完成したのでさっそく動作確認してみます。先ずはいつものように最小ループテスト:JMP $からですがちゃんとインストラクションはあります。 先頭から4kbyte以内のジャンプであれば12bitアドレス即値のショート形式で指定…
プログラム空間のSRAMはこの構成のままだと結局全体の1/4、32kbyteしか使っておらず、であれば入手性の良い256kbitSRAM:HM62256とかTC55257でもよかったかもしれません。ただROMとSRAMは同一アドレスにオーバーライドしているのでその境界はGALのプログラミ…
アドレスデコーダ設計に当たりDSP56001から見えるメモリマップを決めておきます。まずプログラムメモリ空間ですがDSPをモード3(64kbyte全て外部に開放)で起動するものとして、リセットベクタ0000Hを含む前半32kbyteにROM、後半32kbyteにRAMを配置すること…
DSP56001ボードはチップCRに続いてフラットパッケージのIC類の取付が完了しました 表側 裏側 SRAMはSOJ32形状のHM678127を使っていますがパタン設計の時、これのフットプリントの選択を失敗しました。今回実装始めてから気づいたのですがリフロー用のピッタ…
DSP56001ボードに部品実装を始めました。先ずはチップC、R、LEDの取り付けまで完了したところです。 抵抗としてよく使うプルアップ用10kΩやLED電流制限2.2kΩ、パスコン用0.1uFはリールで買ってしまい、アナログ系の中途半端な抵抗値はアソートセットから抜き…
変則的84ピンPGAソケットの田植えが完了しました ここで改めてデータシートのピン配置と比較。データシートではBottomViewなので図を裏返してTopViewにした後180度回転して実基板に合わせて比べてみました これでもし配置ミスが見つかったら泣きますがどうや…