やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

ez-usb fx2lp usbマイコンの基本の解説

7.bulkloopのfx2lpファームウェアを読んで解説する1(ファイルの概要)

投稿日:2013年6月4日 更新日:

C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\Bulkloopのファームウェアを開くと、以下のような図になる。
bulkloop_firm1.bmp

ここで、左のfw.cがソースコード(人間が読めるプログラムファイル)であって、
c言語で書かれている。(これに対し、.hexファイルが、機械が読めるコード。)
cpuは、最初に、fw.cから実行します。

fw.cのところをたたくと、
「#include “fx2.h”
#include “fx2regs.h”
#include “syncdly.h” // SYNCDELAY macro」とあり、
左には、fw.cにぶら下がる4つのヘッダファイルがある。
includeとは引用するの意味で、プログラムをすっきり見せるために、末端の定義を別ファイルでまとめる手法です。
ヘッダファイルは、定義ファイルであって、変数や定数を定義しているファイルです。

fx2.hは、基本的な定数の定義が書いてあります(ほとんどいじる必要はありません)。
「#define」は、定数を「定義する」意味であって、
「INTERNAL_DSCR_ADDR 0x0080」は、INTERNAL_DSCR_ADDR(内部ディスクリプタアドレス?)を0x0080と定義するという意味です。係る定義は、機械に指示すべきアドレスは、0x0080だけれども、人間が理解しづらいので、人間が理解できるよう、代わりの名称をつけ、いちいちtrmマニュアルを読まなくても、プログラムできるようにということです(これはstm32の徹底解説の本にも載ってます)。

fx2regs.hは、レジスタの「アドレス」の定義が載っています。
たとえば、「EXTERN xdata volatile BYTE GPIF_WAVE_DATA _AT_ 0xE400;」において、0xE400は、レジスタのアドレス(番地)です。
cpuは、レジスタ(登録)という領域があり、
これは、cpuが動作するための、ルールや状態が格納された領域であって、
人間がcpuに対し、一定のルールで動作してほしい旨を登録したり、
または、cpu自身が、cpu自身の状態を、登録したりします。
アドレスは、町の番地のように場所がそれぞれ割り振られており、
「BYTE GPIF_WAVE_DATA」という内容は、0xE400番地に割り振られています。

そして、テクニカルマニュアルのp384から、レジスタのまとめが書いてあります。
redister_summery.bmp
(クリックして、拡大して見てください。)
384ページの0xE400において、〔b7~b0〕は、2ビット列を表しており、
アドレス(0xE400番地)の内容は、〔b7~b0〕の2ビット列です。
実際には、16進数に直して、値を代入します。trmマニュアルは、おおむね、この番地の順に沿って、解説されていますから、
例えば、「EP2BCL」のレジスタを調べたいという場合には、
fx2regs.hで検索して、レジスタの番地を調べ、それからマニュアルを引けば、容易に説明にたどり着くと思います。

また、この図には、IFCONFIGも表示されています。
これの方が分かりやすいので、これを用いて説明しますと、
b5~b2は、0ビットと決まっています。
後で後述します。bulkloop.cでは、IFCONFIG |= 0x40;と記述がされており、
IFCONFIG、つまりE601という番地のレジスタには、0010 0000という内容を、16進数に直した、0x40(0xは16進数を表す)を入力する、という意味です。b6のみ1、ほかは0です。
kausuudenntaku.bmp
ウィンドウズのスタート>全てのプログラム>アクセサリ>「電卓」において、
表示を関数電卓の表示にして、2ビットと16ビットを切り替えます。
(以上の点も、stm32の徹底解説にあったと思います)。

「syncdly.h」は、シンクデレィ(同期させるための時間遅れ)を計算するファイルです。
・「IFCONFIG |= 0x40;」のように、レジスタに値を登録するには、時間がかかるようです。
なんらの措置も講じなければ、cpuは、その登録の間に、次のコードを解読して、命令を下します。それでは、先の登録を前提にcpuが動作すべきところ、まずい場合があるので、登録が終わってから、次の命令を実行させるよう、ディレイを入れる必要があるのです(これもstm32の徹底解説にありました。)。

・ソースコードの「fw.c」の内部で、「SYNCDELAY; 」というコードを入れると、
クロック速度などを踏まえて、自動的に、適正な時間遅れを計算するので、プログラム作成者は、どの程度遅らせるべきかを、意識して計算する必要がありません。
計算方法は、trmマニュアルの15.15(p366)に書いてあります。

・例として、bulkloop.cには、
「EP1INCFG = 0xA0;
SYNCDELAY; // see TRM section 15.14
EP2CFG = 0xA2;
SYNCDELAY;」というディレイが入っています。
・どのレジスタを登録するときに、ディレイが必要かは、
trmマニュアルのレジスタのまとめのところで、
以下のとおり、15.15参照となっているかで判断します。
1515sannshou.bmp

INTRINS.Hは、変数の定義の時、extern unsigned charなどの長い定義は、
プログラム作成者に負担になるので、略語を定義しています。

bulkloop.cは、メインのfw.cから呼び出されて、実行されるサブルーチンですが、
実際には、こちらがメインといっても、いいぐらいの内容で、
fx2lpが動作している間、はじめ以外は、bulkloop.cのTD_Pollが、常時繰り返し動作しています。
bulkloop.cでも、上記の4つのヘッダファイルを参照(include)します。

dscr.a51は、ディスクリプタファイルで、fx2lpの内容、例えば、製造者データ、エンドポイントの開始アドレス、1パケットの長さなど、PCへusb機器の内容を知らせる情報が記載されています。現状のbulkloopは、バルク転送を目的として書かれているので、アイソクロナス転送にする場合には、1パケットの長さを1024にすることができます。その他、機器を販売する場合には、製造者データをusbの大本から取得して、変える必要が出てくるでしょう。

その他のファイルは、読めませんので、説明を割愛します。

-ez-usb fx2lp usbマイコンの基本の解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

<前提4>Cypress fx2lpその他ロジックICの超基本

・ez-usb fx2lpは、usbを介してデータを転送する、専用のICロジックチップです。 ・ロジックICについては、とりあえず、以下の超基本を押さえておけば十分です。 ・超基本で申し訳ないですが、 …

no image

2.ez-usb fx2lpの概要、注意すべきこと

ez-usb fx2lpは、usb2.0に対応しており、 旧番のez-usb fx2をバージョンアップした(メモリ増量)ものです。 以前は、PC側から、ez-usb fx2へ命令を送るのに、 ezus …

no image

小さな小さな信号発生器(シグナルジェネレータ、ファンクションジェネレータ)

信号発生器、オシレータ、シグナルジェネレータ、またはファンクションジェネレータを購入して、 fx2lpに入力しようと考えた。fx2lpをスレーブとするクロックとして。 ところが、高い、大きい、6000 …

no image

1.Cypress fx2lpのテストボード

Cypress fx2lpを使うには、 まずは、最低限の機能を実現したテストボードを利用するほうが、便利であり、 その後、動作確認できれば、専用の回路を起こすのがよいと思われます。 Cypress f …

no image

ez-usb fx2の紹介

usbオーディオを自作し、自由に応用できるようにするため、 usbを用いて、データをDACなどに転送することを考えた。usbを用いたデータ転送としては、ez-usb fx2(fx2lp)という専用マイ …

[最近の記事]
2013年6月
 1
2345678
9101112131415
16171819202122
23242526272829
30