2015年3月15日日曜日

EZ-USB FX2LP を動かしてみる (5) 開発ツールをおさらい

その4ではIOポートをトグルするプログラムを書いて焼くところまでの手順を確認しました.今回は、開発ツールの周辺をもう少し細かく解説します.

役立ちそうなdocument

CY3674/CY3684 EZ-USB® Development Kit User Guide  (英語)
Cypress提供の評価プリント基板をどのように使うか?という文書なんだけど、開発ツールの使い方も書いてあるので、これを読まずにはいられませんでした.サンプルプログラムの簡単な解説や、ライブラリ関数についても触れられています.

EZ-USB® Technical Reference Manual  (英語)
CPU CY7C68013A の詳細仕様が書かれているので、レジスタ仕様などを知るための辞書みたいなもんで、これを捨て置くわけにはいかないと思う.

↓KeilのIDEを起動して、Booksタブにこんなdocumentリストがある.

C51 User's Guide   (英語)
サンプルコードを読んで最初にチンプンカンプンなのが、CPU hardwareに密接なこれらの修飾子.
_at_ alien bdata bit code compact data far idata interrupt large pdata _priority_ reentrant sbit sfr sfr16 small _task_ using xdata
こんなのは標準C言語にないですから知らないモノはわからない.これらが何の意味なのかを解説しているのがこのdocumentなので、読まないわけにはいきませんでした.

C51 Library Functions   (英語)
関数ライブラリについて書かれていて、今後チラチラと読む場面がありそう.

uVision2 Getting Started   (英語)
今後読んだら嬉しいような気がする.それだけ.

これら以外にもCypressがアプリケーションノートをいろいろupしているので、それらをチラチラと見るコトになると思われますが、そこまでのレベルにはまだ到達してないわたしです.

ワークフロー
Cのソースを書いて、ビルドして、ターゲット(FX2LP基板)にDLするなり焼くなりする、そのワークフローを再度おさらい.

最初に使うツールはKeilのIDE.

↓サンプルフォルダにある、.Uv2という拡張子のファイルがprojectファイルである.起動すると出てくる画面はこんな風な、よくある統合開発環境と似たかんじ.ソースコードのeditをする.
↓projectへのファイルの追加削除は、右クリック→Manage Components で行うのが、少し変わった操作形式かもしれない.やってみれば使いこなせると思う.
↓Project→Build target でビルドする.
Keil IDEの役割はここまでで終了.

次に使うツールは、Cypress提供の「USB Control Center」です.win7-64bitで動かないバージョンがあるようです.これの執筆時点でこちらにあるツールなら64bitでOKのようです.
C:\Cypress\Cypress Suite USB 3.4.7\CyUSB.NET\bin\CyControl.exe

↓FX2LP基板のPCへの接続時には、右下のJPを外します.
↓FX2LP基板は「USB Control Center」にこのように認識されます.
↓CPUのRAMにバイナリをDLするにはこうします.xxxx.hexを指定します.
↓EEPROMを焼くならこうします.FX2LP基板JPを挿してから、xxxx.iicを指定します.
以上でワークフローはおしまいです.

ソースコード
IOポートをひたすらトグルするだけのサンプルプログラムのproject構造はこうなってます.
fx2.hとfx2reg.hはCPUのハードウエア定義なので、いつもお決まりでインクルードしとけばいいと思われます.fx2regには、レジスタが定義されていて、今回使いたいIOポートであるIOAのレジスタはこのように定義されています.
  sfr IOA     = 0x80;
  sfr OEA     = 0xB2;
sfrというのは、CPU8051のSpecial Function Registerを定義するおまじないです.=0x80がレジスタアドレスです.
IOAがポートのデータ.OEAがポートの入出力定義です.

したがって、OEA=FFに設定して、IOAを00とFFをバチバチ変更するようにmain()を書けばポートをトグルしたコトになると推察されます.

gpiotoggle.cが、ヒラサカが書いたメインルーチンです.中身はこんだけです.
 #define ALLOCATE_EXTERN
 #include "fx2.h"
 #include "fx2regs.h"
 main()
 {
OEA = 0xFF;
IOA = 0;
while(TRUE) { IOA=~IOA; }
 }

ALLOCATE_EXTERN というのは、C8051のメモリモデルが、小中大の3種類あって、64kBのメモリエリアをフルに使うなら「大」すなわちexternにしとけ、というコトのようです.

その他は解説の必要はないでしょう.

IOポート定義
説明の順序がメタメタですが、EZ-USB FX2LPに載っているCY7C68013AというCPUのIOポートがどんなになっているか?

↓CY7C68013Aのレジスタアドレスは、0x80~0xFFです.こんなになっています.(USB FIFOは別のアドレスにある)
IOポート関連レジスタである、IOA,IOB,IOC,IOD,IOEが見えます.それからOEA,OEB,OEC,OED,OEEも見えます.
これらから、ABCDEの5ポートあるとわかります.ただし、CY7C68013Aは外部ピン数が少ないので、ABDの3ポートしかないらしいです.回路図もそうなっています.回路図ではIOA=PAと書かれています.

fx2reg.hにはこのようにレジスタ定義されています.sbitで定義するとbit操作ができるらしいです.まぁ便利!
sfr IOA     = 0x80;
         sbit PA0    = 0x80 + 0;
         sbit PA1    = 0x80 + 1;
         sbit PA2    = 0x80 + 2;
         sbit PA3    = 0x80 + 3;
         sbit PA4    = 0x80 + 4;
         sbit PA5    = 0x80 + 5;
         sbit PA6    = 0x80 + 6;
         sbit PA7    = 0x80 + 7;
sfr IOB     = 0x90;
         sbit PB0    = 0x90 + 0;
         sbit PB1    = 0x90 + 1;
         sbit PB2    = 0x90 + 2;
         sbit PB3    = 0x90 + 3;
         sbit PB4    = 0x90 + 4;
         sbit PB5    = 0x90 + 5;
         sbit PB6    = 0x90 + 6;
         sbit PB7    = 0x90 + 7;
sfr IOC        = 0xA0;
         sbit PC0    = 0xA0 + 0;
         sbit PC1    = 0xA0 + 1;
         sbit PC2    = 0xA0 + 2;
         sbit PC3    = 0xA0 + 3;
         sbit PC4    = 0xA0 + 4;
         sbit PC5    = 0xA0 + 5;
         sbit PC6    = 0xA0 + 6;
         sbit PC7    = 0xA0 + 7;
sfr IOD     = 0xB0;
         sbit PD0    = 0xB0 + 0;
         sbit PD1    = 0xB0 + 1;
         sbit PD2    = 0xB0 + 2;
         sbit PD3    = 0xB0 + 3;
         sbit PD4    = 0xB0 + 4;
         sbit PD5    = 0xB0 + 5;
         sbit PD6    = 0xB0 + 6;
         sbit PD7    = 0xB0 + 7;
sfr IOE     = 0xB1;
sfr OEA     = 0xB2;
sfr OEB     = 0xB3;
sfr OEC     = 0xB4;
sfr OED     = 0xB5;
sfr OEE     = 0xB6;


その4へ    その6へ

0 件のコメント:

コメントを投稿