/**
* @author Cory Sharp <cssharp@eecs.berkeley.edu>
+ * @author Vlado Handziski <handzisk@tkn.tu-berlind.de>
*/
#include <Msp430DcoSpec.h>
#include "Msp430Timer.h"
-module Msp430ClockP
+module Msp430ClockP @safe()
{
provides interface Init;
provides interface Msp430ClockInit;
enum
{
ACLK_CALIB_PERIOD = 8,
- ACLK_HZ = 32768U,
- TARGET_DCO_DELTA = (TARGET_DCO_HZ / ACLK_HZ) * ACLK_CALIB_PERIOD,
+ TARGET_DCO_DELTA = (TARGET_DCO_KHZ / ACLK_KHZ) * ACLK_CALIB_PERIOD,
};
+
+ command void Msp430ClockInit.defaultSetupDcoCalibrate()
+ {
+
+ // --- setup ---
+
+ TACTL = TASSEL1 | MC1; // source SMCLK, continuous mode, everything else 0
+ TBCTL = TBSSEL0 | MC1;
+ BCSCTL1 = XT2OFF | RSEL2;
+ BCSCTL2 = 0;
+ TBCCTL0 = CM0;
+ }
+
command void Msp430ClockInit.defaultInitClocks()
{
// BCSCTL1
TBCTL = TBSSEL0 | TBIE;
}
+ default event void Msp430ClockInit.setupDcoCalibrate()
+ {
+ call Msp430ClockInit.defaultSetupDcoCalibrate();
+ }
+
default event void Msp430ClockInit.initClocks()
{
call Msp430ClockInit.defaultInitClocks();
int calib;
int step;
- // --- setup ---
-
- TACTL = TASSEL1 | MC1; // source SMCLK, continuous mode, everything else 0
- TBCTL = TBSSEL0 | MC1;
- BCSCTL1 = XT2OFF | RSEL2;
- BCSCTL2 = 0;
- TBCCTL0 = CM0;
-
// --- calibrate ---
// Binary search for RSEL,DCO,DCOMOD.
atomic
{
+ signal Msp430ClockInit.setupDcoCalibrate();
busyCalibrateDco();
signal Msp430ClockInit.initClocks();
signal Msp430ClockInit.initTimerA();