秋月にてPIC32MX220F032Bが220円と大変安価かつDIPにて32bitマイコンが手に入るようになりました.
折角なので,PIC16FシリーズだけでなくPIC32MXも遊んでみようと試みようと
後閑さんの『高速・多機能を実現する pic32mx活用ガイドブック』
を購入させていただきました.
大変良くまとまっています.PIC32MXをC32コンパイラで使うなら手元に置いておきたい.購入するべきです.
しかしながらPIC32MX340F256H用に書かれたものであり,PIC16Fシリーズで扱っていたCCS-Cなどと異なり,単純なコピー&ペーストを行っただけではコンパイルエラーになったり正しい動作が行われなかったりしまてしまいました.
ここではPIC32MX220F032B用に書き直して紹介していきたいと思います.
注意:私の提供する情報を元に何らかのトラブルが生じても責任を負いません.
<今回行うこと>
PIC32MX220F032BにてI/Oの基本機能を扱えるようにします.
タイマ1,タイマ2,タイマ3を16ビットモードで,
タイマ4,タイマ5をタイマ45の32ビットモードとして扱います.
タイマの割り込みが行えているかどうか確認するために,RA0~RA3にLEDを取り付けてそれぞれの割り込みが行われた際にそれに対応したI/Oポートの出力状態を反転することで可視化を図ります.
- タイマ1:100msecごとにRA0の出力を反転
- タイマ2:200msecごとにRA1の出力を反転
- タイマ3:400msecごとにRA2の出力を反転
- タイマ45:800msecごとにRA3の出力を反転
PIC32MX220F032BでLEDチカチカ(+入力)をするを理解した方
<用意するもの>
- PIC32MX220F032BでLEDチカチカ(+入力)をするの環境
- LED4こ
- LED用抵抗4こ
<配線>
RA0~RA3にLEDがそれぞれ点灯するようにLEDおよび抵抗を接続してください.
私がブレッドボードにて配線を行った例を図1に示します.
図1 配線例 |
私はこれを大変嫌っており,チップ抵抗とチップLEDを組み合わせたミニボードを自作し利用しています.
<プログラム>
以下からソースコードをダウンロードできます.(リンク先にてCtrl+SでZIP保存)
https://docs.google.com/open?id=0B25yKH5pEApFRkVhWFJVUmY5c0E
前回のプログラムから以下を追加するだけです.
//Timer1 Enable Setting 25nsec x 64 x 62500 = 100msec OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_64, 62500); //Timer1 interrupt Setting ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2); //Timer2 Enable Setting 25nsec x 256 x 31250 = 200msec OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, 31250); //Timer2 interrupt Setting ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2); //Timer3 Enable Setting 25nsec x 256 x 62500 = 400msec OpenTimer3(T3_ON | T3_SOURCE_INT | T3_PS_1_256, 62500); //Timer3 interrupt Setting ConfigIntTimer3(T3_INT_ON | T3_INT_PRIOR_2); //Timer45 Enable Setting 25nsec x 256 x 125000 = 800msec OpenTimer45(T45_ON | T45_SOURCE_INT | T45_PS_1_256, 156250); //Timer45 interrupt Setting ConfigIntTimer45(T45_INT_ON | T45_INT_PRIOR_2); //割り込み許可 INTEnableSystemMultiVectoredInt();
/********************************** * Timer1割り込み処理 **********************************/ void __ISR(4, ipl2) T1_interrupt(void){ mT1ClearIntFlag(); //割り込みフラグクリア mPORTAToggleBits( BIT_0 ); } /********************************** * Timer2割り込み処理 **********************************/ void __ISR(8, ipl2) T2_interrupt(void){ mT2ClearIntFlag(); //割り込みフラグクリア mPORTAToggleBits( BIT_1 ); } /********************************** * Timer3割り込み処理 **********************************/ void __ISR(12, ipl2) T3_interrupt(void){ mT3ClearIntFlag(); //割り込みフラグクリア mPORTAToggleBits( BIT_2 ); } /********************************** * Timer45割り込み処理 **********************************/ void __ISR(20, ipl2) T45_interrupt(void){ mT5ClearIntFlag(); //割り込みフラグクリア mPORTAToggleBits( BIT_3 ); }
0 件のコメント:
コメントを投稿