33#include "dev/watchdog.h"
37int msp430_dco_required;
39#if defined(__MSP430__) && defined(__GNUC__)
40#define asmv(arg) __asm__ __volatile__ (arg)
44#if defined(__MSP430__) && defined(__GNUC__) && MSP430_MEMCPY_WORKAROUND
46w_memcpy(
void *out,
const void *in,
size_t n)
50 dest = (uint8_t *)out;
58#if defined(__MSP430__) && defined(__GNUC__) && MSP430_MEMCPY_WORKAROUND
60w_memset(
void *out,
int value,
size_t n)
63 dest = (uint8_t *)out;
65 *dest++ = value & 0xff;
74 if(CALBC1_8MHZ != 0xFF) {
76 BCSCTL1 = CALBC1_8MHZ;
158#if defined(__MSP430__) && defined(__GNUC__)
160static char *cur_break = (
char *)&_end;
170msp430_add_lpm_req(
int req)
172 if(req <= MSP430_REQUIRE_LPM1) {
173 msp430_dco_required++;
177msp430_remove_lpm_req(
int req)
179 if(req <= MSP430_REQUIRE_LPM1) {
180 msp430_dco_required--;
194#if defined(__MSP430__) && defined(__GNUC__)
195 if((uintptr_t)cur_break & 1) {
199 msp430_dco_required = 0;
212#ifdef __IAR_SYSTEMS_ICC__
213 sr = __get_SR_register();
214 __bic_SR_register(GIE);
216 asmv(
"mov r2, %0" :
"=r" (sr));
217 asmv(
"bic %0, r2" : :
"i" (GIE));
239#ifdef __IAR_SYSTEMS_ICC__
241__low_level_init(
void)
244 WDTCTL = WDTPW + WDTHOLD;
261#define DELTA_2 ((MSP430_CPU_SPEED) / 32768)
264 TBCTL = TBSSEL1 | TBCLR;
265 TBCCTL6 = CCIS0 + CM0 + CAP;
272 while(!(TBCCTL6 & CCIFG));
277 while(!(TBCCTL6 & CCIFG));
278 diff = TBCCR6 - oldcapture;
281 if(DELTA_2 == diff) {
283 }
else if(DELTA_2 < diff) {
void watchdog_init(void)
Initialisation function for the WDT.