* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
+
/**
- * @author R. Steve McKown <smckown@gmail.com>
+ * @author R. Steve McKown <rsmckown@gmail.com>
*/
-
-//#include "msp430hardware.h"
-#include "Msp430Timer.h"
-#define MS430DCOSPEC_H
-#define TARGET_DCO_KHZ 8192 // the target DCO clock rate in binary kHz
-//#define TARGET_DCO_KHZ 4096 // the target DCO clock rate in binary kHz
-#define ACLK_KHZ 32 // the ACLK rate in binary kHz
+#include "Msp430Timer.h"
module MoteClockP {
provides interface Init;
- uses {
- interface Init as SubInit;
- interface Msp430ClockInit;
- }
+ uses interface Init as SubInit;
}
implementation {
+ MSP430REG_NORACE(TAIV);
+ MSP430REG_NORACE(TBIV);
+
command error_t Init.init()
{
+ volatile uint16_t i;
+
+#if defined (CALDCO_8MHZ_) && !defined(__DisableCalData)
if (CALBC1_8MHZ != 0xff || CALDCO_8MHZ != 0xff) {
/* Use built-in constant */
atomic {
BCSCTL2 = SELM_0 | DIVM_0 | DIVS_3;
DCOCTL = CALDCO_8MHZ;
- /* Turn on TimerB, aka the 32KHz clock */
- TBCTL |= MC1;
+ /* Turn on timers A and B */
+ TACTL |= MC_2;
+ TBCTL |= MC_2;
}
return SUCCESS;
- } else {
- /* Constant not present; calibrate on the fly */
- int i;
-
- for (i = 0; i < 0xfffe; i++); /* ensure LFXT1 is stable */
- return call SubInit.init();
}
- }
-
- event void Msp430ClockInit.setupDcoCalibrate()
- {
- call Msp430ClockInit.defaultSetupDcoCalibrate();
- }
-
- event void Msp430ClockInit.initClocks()
- {
- /* We run at 8MHz, so SMCLK divider needs to be /8 */
- call Msp430ClockInit.defaultInitClocks();
- BCSCTL2 |= DIVS_3;
- }
+#endif
- event void Msp430ClockInit.initTimerA()
- {
- call Msp430ClockInit.defaultInitTimerA();
- }
-
- event void Msp430ClockInit.initTimerB()
- {
- call Msp430ClockInit.defaultInitTimerB();
+ /* Calibrate DCOCLK to ACLK when calibration data are disabled or erased */
+ for (i = 0; i < 0xfffe; i++); /* ensure LFXT1 is stable */
+ return call SubInit.init();
}
}