質問: 今、「わかるマイコン電子工作USB機器の製作」という本の中にある、USBカーというものを作っています。 USBカーには、ストロベリー・リナックス社のEZUSB-FX2 USB ver.2 マイコンボードを使用しています。 USBカーを動かすための、サンプルプログラムがあり、今理解をしている所なのですが、ソース内でどんな動きをしているのかがよくつかめません。 以下の所に行くとどんなものか分かっていただけると思います。 スクロールしていくと、 ◆7-3 USBカーの製作(DC モータの制御)という所があると思います。そこでソースファイルのダウンロードも可能です。 どなたか、このソースファイルの内容が分かる方がいましたら 教えていただけないでしょうか? もしくは、プログラムの内容を理解すためにはどのような事をしたらよいのか、理解するための方法などアドバイスしていただけると嬉しいです。
回答: どのCPUなのかな、と思って探してみました。 サイプレス社の、ftp://ftp.efo.ru/pub/cypress/cy7c68013a.pdf ですね。 CY7C68013A/CY7C68015A EZ-USB FX2LPTM USB Microcontroller High-Speed USB Peripheral Controller まずは、CPUというかマイコンがどういう仕組みで動くものなのか知らないとデータシートを読んでも(日本語で書いてあったとしても)意味が分からないものと思います。こればっかりは、やりながら慣れてくれとしか言えません。 > ソースの中にbulkloop.cというファイルがあったと思います。 > そのファイルの中に、たくさんの関数がありますよね? > その関数はそれぞれどんな役割があるのかが、分からないのです・・。 コメント文によると、DR_***** という名前の関数は end point 0 device request parser から呼び出される。私はUSBに関して全く知識がありませんが、ちょっとググってみたらこんなのでてきました。 endpoint 0 というのはUSBの制御用の転送っぽいですね。で、ホストから制御用の転送があった時は、"end point 0 device request parser"が(リンク先の表にある)どのリクエストなのか見分けて、相当するDR_***** という関数(hookと表現している)を呼び出す。 続いて、ISR_**** という関数は、コメント文によると「USB割り込みのジャンプテーブルから呼び出される。」そのままですね。ジャンプテーブルは、fx2.hかfx2reg.hあたりで定義しているんじゃないかと予想します。 さらに、そのテーブルは ftp://ftp.efo.ru/pub/cypress/cy7c68013a.pdf のpage 10にある、table 3-3 にしたがって作られているんじゃないかと。あくまで推測ですが。 ちなみに、上記の推測はまったく英語を読まずにやりました。ということは、問題は英語ではなくて、USBやCPUがどのように動くのか仕組みを知らないということにあるのではないかと思います。私はUSBやこのキットのCPUについてはまったく知りませんが、他のデバイスやCPUを扱った経験から推測で「これかな?」というのを引っ張り出してきました。 習うより慣れろの世界ですから多少時間はかかりますが、「USBも英語も覚えられて俺最強!」というくらいの気持ちで取り組まれてはいかがでしょうか。