PSoC 40xx で SysTick を使ってみる [PSoC]
前回の記事では、 PSoC 40xx シリーズに Bootloader を導入してみました。 Bootloadable として準備したのは、 PWM を使用して LED を駆動し、 CPU をフルに使って押しボタンの状態を監視していました。 PSoC 40xx シリーズは、用意されているリソースが少ないので、このような使い方は、かなり贅沢です。 今回は、 "SysTick" と呼ばれる周期タイマを使って、 LED の駆動と押しボタンの監視を行わせます。
SysTick って何だっけ?
SysTick は、 CPUである ARM Cortex-M0 に近い場所にある周期タイマで、他の Cortex-M0 搭載プロセッサでも内蔵されています。 SysTick は、もちろん PSoC Creator からも使う事ができます。 ただし、残念な事にコンポーネントとして提供されているわけえはないので、普通のマイコンで割り込みを扱う時と同じように、すべてプログラムから制御してやる必要があります。 SysTick を使うために必要なのは、以下のステップです。
- SysTick 割り込みに対応する割り込みベクタに割り込みサービスルーチン (Interrupt Service Routine; ISR) を割り当てます。
- SysTick の周期を設定します。
- 割り込みを許可します。
これだけで、 SysTick が周期割り込みとして作用します。 それぞれのステップは、 PSoC Creator の API 関数またはマクロで定義されているので非常に簡単です。 ここでは、 CPU が 12MHz クロックで動作していることを前提として、1秒当たりの割り込み回数 SYSTICK_FREQ から1周期のクロック数 SYSTICK_PERIOD を計算させています。
ここで紹介するファームウェアでは、すべての処理を ISR の中で行っています。 そのため、 main 関数には無限ループのみ残っています。 CPU は、ほぼ遊んでいますので、お好きな処理を加えてやってください。
割り込み処理ルーチンに実装した二つのステートマシン
SysTick により周期的に呼び出す処理内容は、このように二つのステートマシン BootMachine と LedMachine で構成されています。
BootMachine では、押しボタンの監視を行っています。 このステートマシンでは、押しボタンが押され続けた時間を boot_count という変数で計測していきます。 そして、 BOOT_VALIDATION で決められた長さに達したら、 API 関数 Bootloadable_Load を使って、 Bootloader を呼び出します。 BOOT_VALIDATION の長さは、2秒に設定しています。
LedMachine では、 LED の駆動を行っています。 led_state という変数を使用して、赤を2回、緑を2回点滅させるパターンを繰り返させています。 このステートマシンの周期 LED_PERIOD は、2秒に設定しています。
Bootloadable の書き込み
Bootloadable プロジェクトをビルドしたところ、 5856 バイトと前回のプロジェクトよりも若干小さくなりました。 理由は、深く追い求めてはいません。
Bootloadable の書き込みは、前回と同様に I2C インターフェイスを介して行います。 前回の Bootloadable を書込んでいたら、押しボタンを2秒以上押し、Bootloader を呼び出してから Bootloader Host アプリケーションで CYACD ファイルを書込みます。 前回から、 LED の点滅パターンが変化したのがわかるでしょうか。
プロジェクトアーカイブ
この記事で作成したプロジェクトは、このファイルの拡張子を "zip" に変更すると再現できるようになります。
参考文書
- Using the SysTick Timer in PSoC® 4 – KBA91374
- PSoC 4 で SysTick を使う方法について述べています。 コンポーネントにしてくれれば、もっとありがたいのですが。
- 作者: 古平 晃洋
- 出版社/メーカー: CQ出版
- 発売日: 2012/10/23
- メディア: 単行本
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2013/11/21
- メディア: 雑誌
- 作者: 圓山 宗智
- 出版社/メーカー: CQ出版
- 発売日: 2013/12/24
- メディア: 単行本
関連文献
シリーズ最強!PSoC 3ボード+デバッグ・ボード: あのPSoCが生まれ変わった!アナログもディジタルも一新 (トライアルシリーズ)
トランジスタ技術増刊 基板付き体験編ARM PSoCで作るMyスペシャル・マイコン 2013年 12月号 [雑誌]
開発編 ARM PSoCで作るMyスペシャル・マイコン (トライアルシリーズ)
CY8CKIT-049でドキュメントの23ページの通り
http://www.cypress.com/?docID=48142
SCB_Bootloader_42XXフォルダのHEXを使うと
書き込みの時に
The flash row is not valid is not valid for the selected array.
というエラーが出る
サンプルプログラムに付属されているHEXを使うと
うまく書き込めました。
それ以外はドキュメントの通りです。
可能ならCY8CKIT-049の記事も期待しています。
by きぃたん (2014-05-20 16:54)