33 #include "dev/watchdog.h" 37 int 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 46 w_memcpy(
void *out,
const void *in,
size_t n)
50 dest = (uint8_t *)out;
58 #if defined(__MSP430__) && defined(__GNUC__) && MSP430_MEMCPY_WORKAROUND 60 w_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__) 160 static char *cur_break = (
char *)&_end;
170 msp430_add_lpm_req(
int req)
172 if(req <= MSP430_REQUIRE_LPM1) {
173 msp430_dco_required++;
177 msp430_remove_lpm_req(
int req)
179 if(req <= MSP430_REQUIRE_LPM1) {
180 msp430_dco_required--;
184 msp430_cpu_init(
void)
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));
236 #ifdef __IAR_SYSTEMS_ICC__ 238 __low_level_init(
void)
241 WDTCTL = WDTPW + WDTHOLD;
253 msp430_sync_dco(
void)
258 #define DELTA_2 ((MSP430_CPU_SPEED) / 32768) 261 TBCTL = TBSSEL1 | TBCLR;
262 TBCCTL6 = CCIS0 + CM0 + CAP;
269 while(!(TBCCTL6 & CCIFG));
274 while(!(TBCCTL6 & CCIFG));
275 diff = TBCCR6 - oldcapture;
278 if(DELTA_2 == diff) {
280 }
else if(DELTA_2 < diff) {
void watchdog_init(void)
Initialisation function for the WDT.