goo blog サービス終了のお知らせ 

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

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

MSP430 LaunchPad(2)

2017年05月02日 | 日記

MSP430LaunchPadを少しいじくって見ました。

下記の様なプログラムです。

#include "msp430G2553.h";

int main(void){
    
    WDTCTL = WDTPW + WDTHOLD;  // Stop watchdog timer

    BCSCTL1 = CALBC1_1MHZ; // Set SMCK = DCO to 1MHz
    DCOCTL = CALDCO_1MHZ; // Set SMCK = DCO to 1MHz
    
    //P1DIR = (LED1+LED2);

    P1DIR |= (1 << 6 | 1 << 4 | 1 << 0);  // Set LED to output direction
    //P1SEL = 1 << 4;   
    P1SEL |= BIT4;  //Out SMCLK
    P1SEL2 &= ~BIT4;

    P1OUT &= ~(1 << 0);// Set LED1 off
    P1OUT |= 1 << 6;// Set LED2 on

    while (1) {
        P1OUT ^= LED1;
        P1OUT ^= LED2;
        _delay_cycles(1000000);  // 1sec
    }
}

MSP430はクロックが内臓されています。MCLKはCPUを駆動するクロックですが、これはオプションでクロック源を選べますが、ここでは内部のDCO(デジタル コントロールド オシレータ)を使います。

DCOはレジスタの設定でその周波数を設定します。

RSELx:Coarse Freqency Range

DCOx:Fine Frequency range

MODx: Frequency modulation between the selected fine value

ここで使ったMSP430G2553はMax clkが16MHzでデフォルトは1MHzになっています。

BCSCTL1 = CALBC1_1MHZ; // Set SMCK = DCO to 1MHz
DCOCTL = CALDCO_1MHZ; // Set SMCK = DCO to 1MHz

工場出荷時にキャリブレーションをした値が書き込まれているらしく上記の様にプログラムすると、その値を呼び出してくるようです。電圧と温度の影響をより少なくする配慮がされています。

BCSCTL1 = CALBC1_16MHZ;

DCOCTL = CALDCO_16MHZ;

16MHzも使えるようです、これは使うCPUによって異なるようです。


また、ポートはIO機能とペリフェラル機能がありこれはP1SELxの設定で選ぶことが出来ます。ここではSMCLKをポートP1の4に出力させています。

DCOと云われる所以?SMCKにはジッタがあります。ジッタが影響するような場合は注意が必要です。CPUから外部に発生する電磁波の影響を少なくする?策として周波数を揺らしているとか、、、聞いたことがあります。詳細は知りせん。

後はお決まりのLチカです。2個のLEDを1秒間の周期で点滅させてみました。

_delay_cycles(1000000);  // 1sec

上記マクロで1秒が得られます。時間は_delay_cycles(1*SMCLK) で計算できます。オッシロで見るとほぼ1秒のHigh、Lowが出ています。

カスタムキャリブレーションも出来そうなのですが、(そのプログラムはコンパイルでエラーになり使えません)8通りくらいの周波数でキャリブレーションを行いその値をメモリに書き込み、その値を呼び出してMCLKとして使える様です。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« MSP430 LaunchPad | トップ | 川越 »
最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。

日記」カテゴリの最新記事