- 追加された行はこの色です。
- 削除された行はこの色です。
#analog
#norelated
#contents
* LEDチカチカ(非RTOS) [#i8a730b4]
** 構成 [#x8b981a1]
LPC1769には、基板上に最初からLEDがついています。~
なので、これを点滅させてみましょう。~
LPC1769のピンアサインについては、インストールされた中にある、Getting StartedのPDFを見てください。~
後半の方(P31〜P33あたり)のページに、LPC1769のピンアサインが載っています。~
LEDの記載を見ると、P0[22]と書いてあるのがわかります。~
これは、ポート0の22番ピンということになります。~
//#ref(LEDTest.png,left,nowrap,LEDサンプル)
//
//本当は抵抗が必要なはずだが、まぁいい。~
//とりあえずは光ればいい。~
//
#ref(ledpin.png,left,nowrap,LEDピンアサイン)
このピンの出力を、周期的に変化させてやれば、LEDチカチカが実現できることになります。~
//#u2b(fc-vW6RD1Co,w=480,h=385)
//
** ソースコード [#q9761726]
** プロジェクト [#n24a5191]
まずは、新規プロジェクトを作りましょう。~
QuickStartPanelのNew projectから、LPC176Xの「C Project」を選択して、適当なプロジェクト名をつけます。~
ここでは、「ledtest01」としました。~
MCUはLPC1769を選び、CMSIS Library to link project toは、CMSISv2p00_LPC17XXが選択されていることを確認してください。~
Code Read Protectについては、コードを読み出されないようにするためのセキュリティ設定ですので、ここは外しておいて構いません。~
#ref(ledproject.png,left,nowrap,LEDプロジェクト設定)
プロジェクトが作成されたら、右クリックからプロパティを開きます。~
「Project References」は、CMSISv2p00_LPC17xxと、DriverLibの両方にチェックを入れておきましょう。~
これで、変数や関数の定義を、プロジェクトをまたいで遡ることが出来ます。~
#ref(prjref.png,left,nowrap,プロジェクト参照)
次に、「C/C++ General」の「Paths and Symbols」を開いて、includeとライブラリの設定をします。~
まず、IncludesタブのLanguagesがGNU Cのところを選択すると、既に/CMSISv2p00_LPC17xx/incの設定が入っているかと思います。~
ここに、/DriverLib/incも追加します。~
#ref(includs.png,left,nowrap,Includeパス設定)
次にLibrariesタブの設定ですが、ここもすでに、CMSISv2p00_LPC17xxの設定が入っていると思います。~
同様に、DriverLibを追加します。~
ここは、「DriverLib」と記載するだけにしておいて下さい。~
#ref(libraries.png,left,nowrap,ライブラリ設定)
最後に、Libraries Pathsの設定も同様にします。~
#ref(libpaths.png,left,nowrap,ライブラリパス設定)
ここまでで、プロジェクトの設定は終わりですので、反映させて一旦ビルドをかけてみましょう。~
QuickStartPanelからBuildを実行して、ledtest01.axfが出来上がればOKです。
「Project References」で指定した、CMSISv2p00_LPC17xxと、DriverLibのそれぞれのインクリメンタルビルドが行われてから、ledtest01のビルドが行われます。~
** ソースコード [#g8126864]
以下、ソースコード。~
// #include <avr/io.h>
// #include <util/delay.h>
//
// void delay_ms( int time )
// {
// // 指定ms分ループ
// while( time-- ){
// _delay_ms( 1 );
// }
// }
//
// int main( void )
// {
// DDRD = 0b11111111; // ポートDの方向レジスタを、全て出力に
// PORTD = 0b00000000; // ポートDの出力レジスタを、全てLowに
//
// char count = 0; // 0〜7まで
// char binc = 1; // インクリメントモードかデクリメントモードか
//
// while( 1 ){
// PORTD = ( 1 << count ); // ポートDのカウント数位置の出力レジスタのみをHighに
// if( binc ){ // インクリメントモード
// count++;
// if( 7 <= count ){ // 端までいったのでデクリメントモードへ
// binc = 0;
// }
// } else { // デクリメントモード
// count--;
// if( 0 >= count ){ // 最初まで戻ったのでインクリメントモードへ
// binc = 1;
// }
// }
// delay_ms( 50 ); // 50ms待ち
// }
//
// return 0;
// }