役立ちそうな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 件のコメント:
コメントを投稿