PSoC ってどんな石?
|
||
PSoCブロック図と仕様 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
さて、いきなりであるがPSoCの内部ブロック図である。まぁ、初物を前にするとつばを三回くらい眉の上に塗りたくなる人はありきたりな8ビットのワンチップマイコンだなと思っておいてもいい。PSoCをPSoCたらしめているのが黄色く塗られたデジタルPSoCブロックとアナログPSoCブロックである。これから書いていく内容もこの両PSoCブロックの操り方に終始する。そのほかの細かい所は暇があればいずれ書くかもしれないけど、まぁ興味が沸いたら英文マニュアルをツラツラと眺めても面白いんじゃないかと思う。 というところで、一気にすっ飛ばしてもいいのだけど、とりあえず一応お約束の能書きが無いと寂しいので書いてみる。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PSoCの遊び方はちょっと違う | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ワンチップマイコン系の説明なんかでは、ブロック図を眺めたら、プログラミング環境を構築して、一応I/Oポートまわりのレジスタの説明でもやって、「さぁポートを叩いてLEDの点滅でもやってみましょうや」とやる。その後は内蔵されているモジュールのレジスタ説明等をやりながらボチボチを動かしていくというのが王道というものだろう。 PSoCも一応立派なワンチップマイコンなので、このようなアプローチをすることももちろん可能ではある。ISSP(インシステム・シリアルプログラミング)の名のとおり、昔のPICのように特別な電圧を掛けたりしなくても3本(リセット、クロック、データ)の信号線で書き換えすることができるワンチップマイコンとして使ってみてもなかなか便利には違いない。 ただ、こういうアプローチはPSoCらしくないのだ。とりあえずこのチュートリアルで遊んでいく上ではPSoCはマイコンだというイメージは忘れて、M8コアは単にPSoCブロックの初期化やら雑用処理の為に付けられたプロセッサだと思ってしまうほうがいい。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PSoCのからくり | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cypressのサイトやら広告でよく見かける絵がこれ(細かいバージョンアップはなされているけども、大体同じような雰囲気)。結構うまく表現している絵だとは思うのだけども、ただ、これって「知っている人には分かる」という類のもので、知らない人には企業向けで内部構成を特注できるデバイスかという程度に思われるんじゃないだろうかという気もする。 実際のPSoCはここにあるように、I2Cだのフィルタだのアンプだのカウンタだのというモジュールを選んできて、必要に応じて相互に内部結線を決めてやると、その通りのものに変身してしまうというデバイスなのである。 と、言われても「?」マークが頭の中を飛び回ってしまうに違いない。からくりはこうである。 とりあえず、上の方に乗せたブロック図をもう一度眺めてみよう。赤く囲んだデジタルPSoCブロック、アナログPSoCブロックというものがPSoCの肝。 まず、デジタルPSoCと書かれているものはカウンタ、PWM、乱数ジェネレータ、UART、I2Cコントローラなどにモード切替できるマルチファンクションなI/Oブロックなのである。一般のワンチップマイコンだと、だいたい「シリアル○チャンネル、カウンタ○本」と決めうちされているけども、PSoCの場合には一つのブロックが複数の機能に切り替わるようになっている。カウンタなどは1つのデジタルPSoCブロックで8ビットカウンタなので、16ビットカウンタが欲しければ二つを連結するという具合にして実現する。こういう機能を持ったデジタルPSoCブロックが16個内蔵されている。(CY8C29466の場合) アナログPSoCブロックはというと、アナログの汎用デバイスといえばピン!とくるとおり、中身はオペアンプ、そして「肝」とも言えるスイッチドキャパシタによる回路である。中身はというと下の図のように、3種類のものが4組、合計12個のブロックが内蔵されている。「うわぁ!」と泣き出したくなるかも知れない。トラ技の連載では回数が限られた中での紹介ということもあってスイッチドキャパシタの説明ははずせなかったけども、これから「マターリ」と遊んでいくならこんなものは「ふーん」という程度に思っておいてもかまわない。なぜなら、これらを使ったお役立ちモジュールはCypressが用意してくれているので、それらを組み合わせて利用する分にはこんな細々した話はすっ飛ばしても使えるからである。 要するにこのスイッチだのなんだのをいじってやるとフィルタになったADCが構成できたりするのだということだけ頭の片隅に入れておいてもらえればいい。 そして、これらのマルチファンクションブロック相互の結線やI/Oピンとの間の接続もFPGAほどではないにしても、それなりの自由度をもってプログラマブルになっていて、2入力1出力の論理演算回路がPSoCブロック間接続バスに入っていたりと、なかなかにお役立ちである。 このようにマルチファンクションのブロックの設定と、これらのブロック間の相互結線をプログラマブルにしたデバイス、それがPSoCなのである。つまり、PSoCブロックの設定と、内部の配線の設定によって内部構成を切替えることで、自分好みのI/Oを用意したり、場合によっては複数の機能ブロックを組み合わせた独自回路にしてしまおうというのである。 更にこの設定がいわゆるPLDやCPLDとは違ってレジスタベースであること、つまりCPUのレジスタ設定で行われるというところがミソである。デバイスの初期化は初期化データのテーブルを見てCPUが起動時に設定しているのだけども、これを動作中にダイナミックに変更することも当たり前のようにできる。ダイナミック・リコンフィグレーションと言うのだろうけども、これはツール(PSoC Designer)でもサポートされている。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
こんな仕掛けで一応実現できるとはいえ、こんな設定を毎回手作業でやったり、制御用のプログラムを組むというのは著しく面倒である。特にアナログPSoCブロックなんて考えたくもないと思うに違いない。 たとえばシリアルポートを使いたいときに、設定レジスタをいちいち調べてこっちのビットを立てるとパリティがこれで、このレジスタのエンプティフラグが立ったらデータを書き込んで・・などというのを調べながらプログラムを書くというのは勉強にはいいかもしれないけれども面倒くさいことこの上ない。「俺がやりたいのはレジスタのビット操作ではなくて、データを送りたいということなのだ」と思うのは当然である。 ということで、CypressではPSoCブロックを使った機能ブロック(ユーザモジュールと呼んでいる)をあらかじめ用意して、これをペタペタと貼り付けてやると必要な初期化ルーチンはもちろんのこと、基本的な操作を行うI/Oルーチンまで自動生成してくれるというとってもお役立ちなツールを用意している。 これがPSoC Designerと呼ばれるツール。だいたいこのツールが自動生成してくれるI/Oルーチン(マニュアルではAPIと呼んでいる)を呼ぶだけで事足りてしまうので、レジスタマップを調べる必要性もほとんど無いのも美味なるところである。 たとえば、LCDコントローラ(秋月液晶が使える・・はず)だと、 char str[ ] = "User Module"; LCD_1_Start(); //LCDコントローラ機能スタート LCD_1_Position(0,4); //0行目の4カラム目へ移動 LCD_1_PrCString("PsoC LCD"); //文字列出力 LCD_1_Position(1,2); //1行目の2カラム目へ移動 LCD_1_PrString(str); //上で設定した"User Module”を出力 てな具合にするだけで という表示が行える。今までのワンチップマイコンで「液晶に文字が出た!」と喜んでいたのは一体なんだったのかな?と思う位のお手軽さである。これを行う為の下位のプログラムはブラックボックスではなく、「ソースコード」として生成されるので、中で何をやっているのかを知りたければ読むこともできるし、必要とあらば修正してしまうこともできなくはない。 というわけで、PSoCの開発は基本的にこのツールで行うのが一番楽でいい。PSoC Designer自体はCypressのWebから無料でダウンロードできるけども、こちらの開発言語はアセンブラのみ。実はCコンパイラも含まれているのだけども、ライセンスキーが無いと解除されず、宝の持ち腐れ状態になっている。この解除キー、別途2万円弱で買うのが正規ルートだけども、セミナーやなんやで無償の「お試しキー」がもらえたりするので、そちらも要チェック。 お試しキーはサイズ制限などはないけども、PSoC Designerのバージョンアップに伴って使えなくなる可能性もあるだろうなというのが、有識者の見解だそうだ。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ユーザモジュール | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
じゃあ、いったいユーザモジュールってどんな物が用意されているんだよ!ということになるのでそれを軽く整理したのが下の表。実はこの表もすでに古い。というのは、ユーザモジュールはサービスパックだの何だので次々に追加されているため。とにかく盛りだくさんなので、ここでは説明しきれない。興味があれば、PSoC
Designerをインストールした先に入ってるドキュメントを参照のこと。英文なのがちょっと辛いけどね。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PSoC Designerで用意されているユーザモジュール | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
とりあえず次!とにかくいじってみよう | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
なんだか分かったようなわからないような感じがしているんじゃないかと思うけど、こういうものはいじってみないとなかなか分からないのが普通だから心配することはない。 とりあえず、動画でも出したようなごく簡単な例題を元にPSoC Designerの使い方を説明するのでそちらを眺めればもう少し「感じ」がつかめるだろうと思う(全然わかんねぇ!と言う方にはごめんなさいである) |