32 #include "dev/watchdog.h"
36 int msp430_dco_required;
38 #if defined(__MSP430__) && defined(__GNUC__)
39 #define asmv(arg) __asm__ __volatile__(arg)
45 #ifdef __IAR_SYSTEMS_ICC__
46 __bis_SR_register(SCG0);
48 asmv(
"bis %0, r2" : :
"i" (SCG0));
54 UCSCTL2 = MSP430_CPU_SPEED / 32768;
57 #ifdef __IAR_SYSTEMS_ICC__
58 __bic_SR_register(SCG0);
60 asmv(
"bic %0, r2" : :
"i" (SCG0));
132 #if defined(__MSP430__) && defined(__GNUC__)
134 static char *cur_break = (
char *)&_end;
144 msp430_add_lpm_req(
int req)
146 if(req <= MSP430_REQUIRE_LPM1) {
147 msp430_dco_required++;
152 msp430_remove_lpm_req(
int req)
154 if(req <= MSP430_REQUIRE_LPM1) {
155 msp430_dco_required--;
160 msp430_cpu_init(
void)
167 #if defined(__MSP430__) && defined(__GNUC__)
168 if((uintptr_t)cur_break & 1) {
173 msp430_dco_required = 0;
177 #define STACK_EXTRA 32
185 #if defined(__MSP430__) && defined(__GNUC__)
191 asmv(
"mov r1, %0" :
"=r" (stack_pointer));
192 stack_pointer -= STACK_EXTRA;
193 if(incr > (stack_pointer - cur_break))
196 void *old_break = cur_break;
214 #ifdef __IAR_SYSTEMS_ICC__
215 sr = __get_SR_register();
216 __bic_SR_register(GIE);
218 asmv(
"mov r2, %0" :
"=r" (sr));
219 asmv(
"bic %0, r2" : :
"i" (GIE));
224 #ifdef __IAR_SYSTEMS_ICC__
225 int __low_level_init(
void)
228 WDTCTL = WDTPW + WDTHOLD;
void watchdog_init(void)
Copyright (c) 2014, Analog Devices, Inc.