本チュートリアルでは、プロセッサーの周辺水晶を使用した正確なタイミングの実現方法を解説する。

ここでは、クロック利用のために定義済み機能を使用する。この機能詳細説明は省略し、使用方法に絞って解説する。この機能は『F5659 Utils』の「.h」と「.c」、2つのファイル内にある。

Types.hは一般使用タイプの短縮版で、『HardwareConfig.h』はハードウェア機器構成ファイルである。

プログラム概要

前述の通り、MSP430のデフォルトクロック周波数は1MHz前後である。従って、その周波数では他の機器構成無しでも動作可能である。しかし、より高速なクロック(24 MHz)を使用したい場合、より高い電圧を使う必要がある。これが、プログラムの最初の指令となる。利用可能な最大クロックを使用するため、プロッセッサ・コア電圧を最大値に設定する。この機能は『 SetCoreVoltage(コア電圧設定)』である。VCORE14、VCORE16、VCORE18、VCORE19(それぞれ1.4~1.9V用)の4つ定義済み値がある。まず、VCORE19を設定してみよう。

次に、 周波数がFLL(周波数同期ループ)により上げられる。DCOは分割され、RTCクリスタル・クロックと比較される。この方法により、クリスタル・クロックの精度で(クリスタルにより20ppm前後)正確なタイミングの取得が可能となる。この2つの機能が一旦呼び出されると、ソフトウェアは以下に示す通りとなる。追加項目の電圧・周波数変更及びincludeファイル以外はC-02チュートリアルと同じである。

--------------------

#include <msp430F5659.h>
#include "F5659Utils.h"

int main(void) {
    WDTCTL = WDTPW + WDTHOLD;               //    Stop WDT
    SetCoreVoltage(VCORE19);                //    Set the core to 1.9V
    SetFLL(24);                             //    Set SMCLK to 24 MHz
    P2DIR |= 0x03;                          //    P2.0 output + P2.1 output (oscillo)
    TA0CCTL0 = CCIE;                        //    CCR0 interrupt enabled
    TA0CCR0 = 16383;
    TA0CTL = TASSEL_1 + MC_1 + TACLR;       //    ACLK, upmode, clear TAR
    __bis_SR_register(LPM0_bits + GIE);     //    Enter LPM0, enable interrupts
}

// Timer0 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void) {
    P2OUT |= 0x02;
    P2OUT ^= 0x01;                          // Toggle P2.0
    P2OUT &= ~0x02;
}

--------------------

タイマーについては、タイマー値が16383のACLK(リアルタイム・クロック)を使用している。つまり、16384クロック・サイクル毎にタイマーは0に戻り割込みを発生させる。16384はクロック周波数のちょうど半分にあたるので、1秒に2回の極性反転により1Hz の信号となる。

タイミングが極めて正確になることが確認できる。ポート2のビット1周期は丁度1秒である。

AccurateClock

 

 

 

 

 

 

 

 

 

 

 

 

次のチュートリアルでは、MSP430のタイマーの別の機能であるPWM(パルス幅変調)について解説する。