#analog #norelated #contents * LEDチカチカ(非RTOS) [#i8a730b4] ** 構成 [#x8b981a1] LPC1769には、基板上に最初からLEDがついています。~ なので、これを点滅させてみましょう。~ LPC1769のピンアサインについては、インストールされた中にある、Getting StartedのPDFを見てください。~ 後半の方(P31〜P33あたり)のページに、LPC1769のピンアサインが載っています。~ LEDの記載を見ると、P0[22]と書いてあるのがわかります。~ これは、ポート0の22番ピンということになります。~ #ref(ledpin.png,left,nowrap,LEDピンアサイン) このピンの出力を、周期的に変化させてやれば、LEDチカチカが実現できることになります。~ //#u2b(fc-vW6RD1Co,w=480,h=385) ** プロジェクト [#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; // }