PSoC理解のための必読書

Cypressサイトは、“珍しく”日本語表示の選択肢があり、和訳資料も多くあります。中でも、PSoC理解のための必読書を2つ紹介します。

  1. PSoC 4入門:和訳版あり
  2. PSoC 4 Interrupt:英語版のみ

PSoC 4入門: AN79953

PSoC 4の周辺回路:コンポーネントは、「CPU制御無しで単独動作が可能」です。ここが標準MCUと最も異なる点です。

標準MCU(図5)とPSoC(図6)ブロック図比較(資料1より抜粋)
標準MCU(図5)とPSoC(図6)ブロック図比較(資料1より抜粋)

資料1の図6.PSoCブロック図は、アナログ/デジタルシステムが、ARM Cortex-M0と同列であることを示しています。つまり、アナログ/デジタルシステム単独で、Cortex-M0の代わりも出来るのです。1秒毎の赤LED点滅、いわゆるLチカのソースで違いを示します。

Lチカmainソース、標準(左)とPWM単独(右)の違い
Lチカmainソース、標準(左)とPWM単独(右)の違い

左が標準MCUと同様、Cortex-M0でLチカしたmain()、右がPWM単独でLチカしたmain()です。右側は、PWM初期化:PWM_1_Start()のみで無限ループ内の処理がありません。初期化後、直ぐに赤LED点滅が始まります。どちらの記述でもLチカを実現できます。

従ってPSoCの場合、処理をCortex-M0で行うか、またはコンポーネント単独で行うかの検討も必要になります。方針としては、「できるだけ多くの処理をコンポーネントで行い、残りをCortex-M0で処理する」、これで電力消費の最も多いCortex-M0の処理軽減が可能となります。これがPSoCの特性を活かした設計だと思います。

資料1はコンポーネント単独制御(赤と緑)Lチカサンプルと、IDE: PSoC Creatorの使い方が示されています。

PSoC Creatorは、私が一番使いやすいと思う無償IDEで、最新版は3.3です。旧3.2版にリソースメータなどの機能が追加されており、8週毎にコンポーネントパックなどの更新がなされるそうです。ROM容量制限などはありません。

PSoC Creatorは、回路図(*.cysch)へ使用コンポーネントを配置し、そのプロパティ設定後、回路図レベルで一度BuildすることでファームウエアへのAPI生成を行います。これは、ルネサスCS+のコード生成や、Freescale KDSのProcessor Expert: PEと同様Rapid Application Development: RAD機能です。

PEはコンポーネント選択のみですが、PSoCは、前述のコンポーネント単独でも動作するため、コンポーネント間の接続も記述できる回路図を用います。API生成後は、ソース記述中にVisual Studioライクな入力候補補完機能が働きます。

回路図の青色で追記されたLEDなどは、ソース記述のコメントに相当します。これにより出力LowアクティブでLEDが動作することが一目で解ります。

Cypressは、ソースを「ファームウエア」と記し、上層のアプリケーションソースとは明確に分けるようです。また、ZIP版の本資料で、このサンプルファームも同時提供されます。

PSoC 4 Interrupt: AN90799

Cortex-M0とNVIC(資料2より抜粋)
Cortex-M0とNVIC(資料2より抜粋)

Cortex-M0コアのマイコンは、割込みコントローラ:NVICが使いこなしのポイントです。
3つのサンプルファームが提供される資料2を読むと、レベル/エッジトリガやプライオリティなどの割込み関連をPSoC Creatorでどのように設定するかが解ります。

デフォルト生成されるISR: Interrupt Service Routineは、‘#START~’#END間にユーザ処理を追記すれば再Buildしても保持されるなどは、一般的なEclipse IDEと同じです。

面白いのは、NVICの動作遅延が一覧(Table 3)になっている点です。他社資料でこのような詳細情報は見当たりません。Cypress資料全般に言えるのは、記述が丁寧で適切、しかも詳細な点です。

Figure 17には、資料1にも出てきた使用頻度が高いTCPWMコンポーネントの割込み設定方法が示されています。前述のコンポーネント単独とCortex-M0単独でLチカさせる処理以外に、NVICを使ってLチカさせることもできます。Lチカ実現方法をまとめると下表になります。

Lチカ実現方法 概要
コンポーネント単独制御 TCPWMコンポーネント出力で赤LED制御(資料1の方法)
コンポーネントとCortex-M0で制御 TCPWMコンポーネントのISRで赤LED制御(資料2の方法)
Cortex-M0単独制御 main()で赤LED制御(標準的な方法)

 

資料2は、この他にGPIO入力でLED制御するサンプルや、WDT設定サンプルも記載されています。また、新マイコンテンプレート候補のPSoC 4/PRoCテンプレートで用いるSysTick Timerの記述もあります。
弊社販売中の4種テンプレート(ルネサスのRL/G1xテンプレート、NXPのLPC8xxとLPC111xテンプレート、FreescaleのKinetis Eテンプレート)は、コチラをご覧ください。

* * *

PSoC 4に関する技術資料は、他にもたくさんあります。ここでは、最初に目を通すべき2資料を示しました。

RTOSを使わないマイコンソフトは、Lチカでまとめた3つの方法のどれかで処理を作成します。PSoCは、一般的なMCUでは不可能なコンポーネント単独制御が可能です。これが活用ポイントです。多くの資料から、このポイントをピックアップすると速習できるでしょう。

標準的なEclipse IDEに慣れた開発者、特にソフト担当者は、PSoC Creatorの回路図にコンポーネントを配置することに違和感を覚えるかもしれません。コンポーネントのみでも制御できるPSoCたるゆえんです。
BLEコンポーネントなどは、回路図に配置するだけです。配線も書込めるコンポーネントエントリーシートと思えば良いでしょう。逆にハード担当者にとっては、より身近にマイコン開発ができるツールです。
PSoC On-Demand Trainingを見るとPSoC Creatorの動作が解ります。

要は慣れの問題で、API生成というIDEの目的は、どのマイコンでも同じです。IDE習得のコツなどを参考にすれば、慣れるのも早いと思います。