ラジオ少年の楽しい電子工作、その他

AVRを使った簡単な回路の実験、そして日々のちょっとした出来事を書きます。

MSP430 LaunchPad(5)

2017年05月14日 | 日記

__NO_OPERATION(); に要する時間を調べて見ました。

プログラムは下記の簡単なものです。

#include "msp430g2553.h"
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
    BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
    DCOCTL = CALDCO_1MHZ; // Set DCO to 1MHz

    P1DIR |= BIT6; // + BIT0;

        while(1){

         P1OUT |= BIT6;
         __no_operation();
         __no_operation();
         //__delay_cycles(500000);
         //__delay_cycles(500000);
         P1OUT &= ~BIT6;
         __no_operation();
         //__delay_cycles(500000);
         //__delay_cycles(500000);
       }
    }

MCKは1MHzです。

上の画像は  __no_operation(); 無しの状態のP1_BIT6の状態です。

__no_operation();を1個追加したのが上の画像です。 1uS delayが認められます。

次にBit6がLowに__no_operation();を1個追加して見ました。

1uS low レベルが伸びました。

因みに__no_operation();を2個にすると2uSのdelayになる事を確認しました。

このことから、MCLK=DCO=1MHzですから、1uSのdelayの結果から__no_operation();の実行サイクルはOne Clockであることが分ります。

ここで、大活躍のtoolは中国製のチープなLogic Analyzer、saleae(800円、正確には750円でしたか、、、)十分使えます。

P1OUT |= BIT6;   5uS
        
P1OUT &= ~BIT6;  7uS

上記の様な__no_operation(); 無しの場合、   highとlowの時間は異なります。何故かな?対象にはなっていません。

Timer 割り込みをロジアナで捉えてみました。

P1OUT_BIT0が500m high、500ms lowで変化しています。

 

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« MSP430 LaunchPad(4) | トップ | MSP430 LaunchPad(6) »
最近の画像もっと見る

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。