12 #include "dev/watchdog.h"
14 #include "dev/port2.h"
16 #include "dev/button-sensor.h"
17 #include "dev/adc-sensor.h"
25 #include "contiki-lib.h"
26 #include "contiki-net.h"
32 #if STARTUP_CONF_VERBOSE
33 #define PUTSTRING(...) putstring(__VA_ARGS__)
34 #define PUTHEX(...) puthex(__VA_ARGS__)
35 #define PUTBIN(...) putbin(__VA_ARGS__)
36 #define PUTCHAR(...) putchar(__VA_ARGS__)
38 #define PUTSTRING(...)
44 #if CLOCK_CONF_STACK_FRIENDLY
45 extern volatile uint8_t sleep_flag;
49 static CC_AT_DATA uint16_t len;
52 static unsigned long irq_energest = 0;
53 #define ENERGEST_IRQ_SAVE(a) do { \
54 a = energest_type_time(ENERGEST_TYPE_IRQ); } while(0)
55 #define ENERGEST_IRQ_RESTORE(a) do { \
56 energest_type_set(ENERGEST_TYPE_IRQ, a); } while(0)
58 #define ENERGEST_IRQ_SAVE(a) do {} while(0)
59 #define ENERGEST_IRQ_RESTORE(a) do {} while(0)
63 fade(
int l) CC_NON_BANKED
67 for(k = 0; k < 400; ++k) {
68 j = k > 200 ? 400 - k : k;
71 for(i = 0; i < j; ++i) {
75 for(i = 0; i < 200 - j; ++i) {
82 set_rime_addr(
void) CC_NON_BANKED
86 #if CC2530_CONF_MAC_FROM_PRIMARY
87 __xdata
unsigned char *macp = &X_IEEE_ADDR;
89 __code
unsigned char *macp = (__code
unsigned char *)0xFFE8;
92 PUTSTRING(
"Rime is 0x");
93 PUTHEX(
sizeof(linkaddr_t));
94 PUTSTRING(
" bytes long\n");
96 #if CC2530_CONF_MAC_FROM_PRIMARY
97 PUTSTRING(
"Reading MAC from Info Page\n");
99 PUTSTRING(
"Reading MAC from flash\n");
114 FMAP = CC2530_LAST_FLASH_BANK;
117 for(i = (LINKADDR_SIZE - 1); i >= 0; --i) {
122 #if !CC2530_CONF_MAC_FROM_PRIMARY
129 #if STARTUP_CONF_VERBOSE
130 PUTSTRING(
"Rime configured with address ");
131 for(i = 0; i < LINKADDR_SIZE - 1; i++) {
139 cc2530_rf_set_addr(IEEE802154_PANID);
144 main(
void) CC_NON_BANKED
167 #if SLIP_ARCH_CONF_ENABLE
170 io_arch_set_input(serial_line_input_byte);
175 PUTSTRING(
"##########################################\n");
176 putstring(CONTIKI_VERSION_STRING
"\n");
177 putstring(MODEL_STRING);
193 putstring(
"-" CC2530_FLAVOR_STRING
", ");
194 puthex(CHIPINFO1 + 1);
195 putstring(
"KB SRAM\n");
197 PUTSTRING(
"\nSDCC Build:\n");
198 #if STARTUP_CONF_VERBOSE
199 #ifdef HAVE_SDCC_BANKING
200 PUTSTRING(
" With Banking.\n");
202 #ifdef SDCC_MODEL_LARGE
203 PUTSTRING(
" --model-large\n");
205 #ifdef SDCC_MODEL_HUGE
206 PUTSTRING(
" --model-huge\n");
208 #ifdef SDCC_STACK_AUTO
209 PUTSTRING(
" --stack-auto\n");
215 PUTSTRING(NETSTACK_NETWORK.name);
218 PUTSTRING(NETSTACK_MAC.name);
221 PUTSTRING(NETSTACK_RDC.name);
224 PUTSTRING(
"##########################################\n");
240 #if BUTTON_SENSOR_ON || ADC_SENSOR_ON
242 BUTTON_SENSOR_ACTIVATE();
243 ADC_SENSOR_ACTIVATE();
257 ENERGEST_ON(ENERGEST_TYPE_CPU);
259 autostart_start(autostart_processes);
271 #if CLOCK_CONF_STACK_FRIENDLY
282 len = NETSTACK_RADIO.pending_packet();
288 NETSTACK_RDC.input();
293 #if (LPM_MODE==LPM_MODE_PM2)
295 while(!(
SLEEP & HFRC_STB));
297 while(!(CLKCON & OSC));
305 SLEEPCMD = (SLEEPCMD & 0xFC) | (LPM_MODE - 1);
307 #if (LPM_MODE==LPM_MODE_PM2)
318 if(SLEEPCMD & SLEEP_MODE0) {
321 ENERGEST_OFF(ENERGEST_TYPE_CPU);
322 ENERGEST_ON(ENERGEST_TYPE_LPM);
325 ENERGEST_IRQ_RESTORE(irq_energest);
336 ENERGEST_IRQ_SAVE(irq_energest);
338 ENERGEST_ON(ENERGEST_TYPE_CPU);
339 ENERGEST_OFF(ENERGEST_TYPE_LPM);
341 #if (LPM_MODE==LPM_MODE_PM2)
342 SLEEPCMD &= ~SLEEP_OSC_PD;
343 while(!(SLEEPCMD & SLEEP_XOSC_STB));
344 CLKCONCMD &= ~CLKCONCMD_OSC;
350 while(CLKCONCMD & CLKCONCMD_OSC);