PSoCのPWM8で割り込みを行う

| トラックバック(0)

PSoC(CY8C24423)でPWM8のブロックを使い、一定時間おきに割り込みをかけて
処理をするときのメモがまだなかったので、書いておきます。

ここではPSoCデザイナでC言語を使う場合についての例をあげます。

(あまり詳しくないので間違っているところもあるかもしれませんが、以下で動きました)

PSoC_interrupt_PWM8.png
■あらかじめPWM8_1を配置し、各種値を設定しておいてください。

 上記の画像の場合はSysClk freq、VC1、VC2、VC3で設定を行い、
 SysClkの6MHzを15回割ったものをさらに16回割り、さらに250回分割しています。
 (これでVC3は100Hzになります。Global Resourcesのところで設定)

 次に、上記周波数をPWM8に入力します。(PWM8のClockの設定がVC3)
 PWMタイマの値は100回で満了になるようにしているので、
 1秒ごとに割り込みが入る設定です。
 (User Module Parametersのところで設定)

 ※100Hzは1秒に100回で、100回たまったら割り込みします。


その後は以下のような操作が必要になります。(「続き」に記載)

1.プロジェクトディレクトリの中にある、libディレクトリの中のPWM8_1INT.asm
の★に以下を追加
『ljmp _TimerInt』

---PWM8_1INT.asmイメージ抜粋ここから-------------
_PWM8_1_ISR:

;@PSoC_UserCode_BODY@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom code below this banner
;---------------------------------------------------
; NOTE: interrupt service routines must preserve
; the values of the A and X CPU registers.
ljmp _TimerInt ←★

;---------------------------------------------------
; Insert your custom code above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)

reti

---PWM8_1INT.asmイメージ抜粋ここまで-------------


2.main.cのvoid main()の中に
M8C_EnableGInt; //Enable Interrupt
PWM8_1_Start();
PWM8_1_EnableInt();
を追加


3.以下をmain.cの中のmain関数の外へ追加

#pragma interrupt_handler TimerInt
//Interrupt func
void TimerInt() {
//割り込みで処理したい内容をここに書く
}

これで1Hzで(1秒ごとに)割り込みが入り、TimerIntの中が実行されます。

■サンプルプロジェクト
 サンプルプロジェクトファイルです
 実験用にLEDのコード等も入ってしまっていますが、参考になれば幸いです。

 ※同梱のExcelファイルはVC1,VC2,VC3を計算したときのものです。
 http://www.bird-soft.net/download/PSoC_interrupt_PWM8.zip

トラックバック(0)

トラックバックURL: http://www.bird-soft.net/mt5/mt-tb.cgi/318

最近のブログ記事

お知らせ
[お知らせ] ・その1  Movable…
CANON EOS 7D レビュー
新しい一眼レフ「EOS 7D」を買いまし…
コスモス畑
先週、あけぼの山農業公園のコスモス畑に行…