PSoC 4200 Prototyping Kit (3)

今回はハードウェアでスイッチ・イベントを発生させる場合の説明です。
TCPWM コンポーネントの設定ダイアログで下のように「switch」-「Present」チェック・ボックスと「Compare」-「Swap」チェック・ボックスをオンにします。

switch 入力の有効エッジは「Rising edge」でも「Falling edge」でもどちらでもかまいません。 (「Level」は選べません)
そうすると、デフォルトでは存在しなかった switch 入力が現れるので、下の図のように「ov」(overflow) 出力と接続します。

Center align PWM モードではオーバーフロー出力は TC (Terminal Count) と次の TC との中間のタイミングで発生し、TC イベントのタイミングとは重ならないので、ハードウェア・スイッチ・イベントとしては最も適しています。
以上のように設定すれば、コンペア・バッファ・レジスタを使ったダブル・バッファが有効となり、PWM のデューティー値を CompareBuf レジスタに書き込むだけで動作します。
ただし、「swap」なので、TC 割り込みごとに (PWM デューティー値としては変化がなくても) CompareBuf への書き込みを行う必要があります。
TC 割り込み後に CompareBuf への書き込みを行わずに放置していると、自動的に繰り返すハードウェア・スイッチ・イベントにより、PWM デューティー値として Compare レジスタと CompareBuf レジスタに最後に残った 2 つの値が交互に繰り返して使われることになります。
ソフトウェア・スイッチ・イベントの場合には、CompareBuf レジスタ書き込みとスイッチ・イベントとを「セット」として実行するようにすれば、PWM デューティー値に変化がない場合には「放置」しても問題ありません。
前回示したプログラム中の「PWM0_SetCompareSwap()」API 関数と「PWM0_TriggerCommand()」API 関数の呼び出しは必要なくなりますが、残しておいても単にハードウェアとソフトウェアで重複してスイッチ・イベントを発生させるだけで悪影響はありません。