2014年9月27日土曜日

AUTOPTRLを用いると、
XAUTODAT1にPCからのデータが受信されて、
XAUTODAT2に書き込む事でPCに送信される。

AUTOPTRSETUPを使用すると、EP□BCH、EP□BCLにサイズを書き込まなくても、自動的に送信される。たぶん。





EP1OUTCFG
EP1INCFG

EP2CFG
EP4CFG
EP6CFG
EP8CFG
の設定については、「EZ-USB(R) Technical Reference Manual.pdf」で、
■「8.4 How the CPU Configures the Endpoints」(page.88)にレジスタの意味。
■「15.6 Endpoint Configuration」の「15.6.1 EP1OUTCFG」(page.233)~(page.236)辺りにレジスタの定義。
をそれぞれ参照すると良い。



バッファの分け方については
「1.17 EZ-USB Endpoint Buffers」(page.30)



AUTOPTRSETUPについて、
「EZ-USB(R) Technical Reference Manual.pdf」の(page.215)より、

The AUTOPTRSETUP register is configured as follows:
■ Set APTRnINC=0 to freeze the address pointer, APTRnINC=1 to automatically increment it for every read or write of an
XAUTODATn register. This bit defaults to ‘1’, enabling the auto increment feature.
■ To enable the autopointer, set APTREN=1. Enabling the Autopointers has one side-effect: any code access (an instruction
fetch, for instance) from addresses 0xE67B and 0xE67C return the AUTODATA values, rather than the code-memory values
at these two addresses. This introduces a two-byte ‘hole’ in the code memory.
The firmware then writes a 16 bit address to AUTOPTRHn/Ln. Then, for every read or write of an XAUTODATn register, the
address pointer automatically increments (if APTRnINC=1).

要するに、XAUTODATnへリードorライトする毎に、自動的に、データの格納されたバッファのポインタがインクリメントされる。
ところで、サンプルで

  // enable dual autopointer feature
  AUTOPTRSETUP |= 0x01;

となっているのは、「|=」(ビット和代入)していて、もともと、APTRnINCはデフォルトの設定が1なので、

AUTOPTRSETUP = 0x07;

とするのと同じ。



「EZ-USB(R) Development Kit User Guide.pdf」のコメントより、

APTR1H = MSB( &EP2FIFOBUF ); // Initializing the first data pointer
APTR1L = LSB( &EP2FIFOBUF );

APTRnH,APTRLは、data pointerの始めの開始位置を指定するときに使うらしい。


「C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\Bulkext」
のBulkextの「bulkext.c」を書き直しただけだと、「EP1」がホストで認識されない問題について、

「C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\EP_Interrupts」
のサンプルプログラムでは、ホストで認識された。

そこで、「bulkext.c」の内容を「EP_Interrupts.c」に書き換えて、コンパイルしたところ、
またも失敗する。

ファイル比較ソフトで両者のファイルの違いを比較したところ、
「dscr.a51」ファイルで違いが見られた。
(なお、ファイルの比較には「DF.txt」というファイル比較ソフトを用いた。)
このファイルでは

      db   4               ;; Number of end points


      db   6               ;; Number of end points

や、その他に、EP1に関する部分について違いが見られた。

そこで、「dscr.a51」を入れ替えた所、ホストで認識できるようになった。


この if文 "if (!(USBCS & bmRENUM))" をコメントアウトして FWをビルドして やれば、ダウンロード(CPUリセット)の度、毎回 ReNumerationされるようになるので 「ミミックUSB FX2」 もうまく動くようになります。

http://www.geocities.jp/altshibabou/win/ezusb_tip3sub.html
より。











0 件のコメント:

コメントを投稿