2015年3月26日木曜日

EZ-USB FX2LP を動かしてみる (11) EPとFIFOとDACその3

今回は、回路の具体例とプロジェクトの具体例です.

プリント基板
まずプリント基板の改造から.回路図はこちらにあります.
↓基板の外部回路はDACと2^12分周回路です.
↓DACは、こういうR2Rラダー型DACにしました.実験波形ぐらいなら出ます.R=1kΩ、2R=2kΩで作りました.ポートは、PB7~PB0です.
↓2^12分周回路は74HC163を使ったこういう回路.74HC163は48MHzをclockとするには動作速度がキツイので30MHzで使わざるを得ませんでした.なので後日74AC163で作り直すつもりです.以後ではGPIF clock=IFCLK=30MHzで動かしています.回路図の30MHzはFX2LPプリント基板のIFCLKを接続します.RDY0はFX2LPプリント基板にそういう端子があります.電源はFX2LPの3.3Vです.
↓出来上がり状態はこんなです.FX2LP基板が手作り基板の下側に隠れてます.下の方の抵抗はDACのラダー抵抗です.
プロジェクト
プロジェクトフォルダをここに置きます.
解凍したら、この場所に置いて、master.Uv2をクリックするとKeil IDEが起動します.
C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Firmware

gpif.cは、GPIF Designerが生成したファイルなのでBLACK BOXとして扱うので放置します.

descr.r51は、アセンブラソースです.USBのファイルディスクリプタが記述されています.

master.cは、USBの通信関係ルーチンです.今は説明を割愛します.

重要なのはfw.cですが、これもUSB通信関係のいろんなコードが書かれているので、そういう部分はよく判らないので飛ばして、FIFO関連の部分だけを抜き出して、以下で解説します.

FIFOの設定部分がこれです.

↓ますはCPU Clock周波数の設定で、48MHzにしてあります.SYNCDELAYというのは、レジスタを変更した後に挿入するべき空白期間です.おまじないとしておきます.
   // Initialize user device
   CPUCS = 0x10;       // CPU clock 48MHz
   SYNCDELAY;          // CLKOE=0, don't drive CLKOUT

↓GpifInit()が、CPIF Designerが吐き出したgpif.cに書かれたサブルーチン名です.常にこの名前です.この中では、IFCLK=30MHzであることとか、RDY0やCTL0の挙動について記述されています.
   GpifInit();  // GPIF initialization routine made by GPIF Designer
   SYNCDELAY;

↓以下はFIFOの設定です.REVCTLはそういう名前のレジスタで、fx2regs.hに記述されています.ここでやってる設定は良く理解できていません.
   REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1
   SYNCDELAY;

↓これもレジスタ設定.EP2について設定しています.出力である.バッファが512BYTEを2バンクである.EP4,EP6,EP8はシカトしてます.
   EP2CFG = 0xA2; // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x
   SYNCDELAY;

↓この特殊なFIFORESETはどうしてこうするのかよく理解できてません.
   FIFORESET = 0x80; // Reset the FIFO
   SYNCDELAY;
   FIFORESET = 0x82;
   SYNCDELAY;
   FIFORESET = 0x00;
   SYNCDELAY;

↓2バンクあるEP2 FIFOの内容を捨てる.
   OUTPKTEND = 0x82; // skip EP2 FIFO data (BUF0)
   SYNCDELAY;
   OUTPKTEND = 0x82; // skip EP3 FIFO data (BUF1)
   SYNCDELAY;

↓FIFOの形態を、自走する(AUTOMODE)、8bit幅、などと設定.
   EP2FIFOCFG = 0x10; // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=8bit
   SYNCDELAY;

↓EP2をGPIFと接合しているのだと思う.
   EP2GPIFFLGSEL = 1;  // GPIF FIFOFlag is empty
   SYNCDELAY;

↓EP2スタート
   EP2GPIFTRIG = 0xFF; // start ep2
   SYNCDELAY;

FIFOに関する肝の部分はこれだけです.あとはFIFOとGPIFに自走(AUTOMODE)させているのでCPU 8051は傍観者です.

USB通信はいまのところよく判らないので割愛します.

ビルドして、FX2LPにdownloadします.

アプリソフト
このfirmwareをdownloadしたFX2LP基板を動かすには、USBへデータを流し込むアプリソフトが必要です.
そのアプリソフトが、
C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Windows Applications\Application Source files\cpp\bulkloop\x64\Release\bulkloop.exe      (64bit windowsの場合)
C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Windows Applications\Application Source files\cpp\bulkloop\x86\Release\bulkloop.exe      (32bit windowsの場合)
です.
わたしは64bitでしか動かしていませんので、32bit版が動くのかどうかは知りません.

起動するとこんな画面が出ます.この画面の設定の通りにしてStartボタンを押すと、incrementalデータが間欠的にUSBへ送出されます.

以上の環境で動かすと、DACにこのようなノコギリ波が出てくる、というわけなのでした~

その10へ   その12へ

かしこ

INDEXページへ
https://hirasakausb.blogspot.com/2019/03/ez-usb-fx2lp-index.html

0 件のコメント:

コメントを投稿