/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { /* Initialize DK board register access */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) { while (1) ; } /* Initialize DK interrupt enable */ DK_IRQInit(); /* Initialize GPIO interrupt */ GPIO_IRQInit(); /* Turn off LEDs */ BSP_LedsSet(0x0000); while (1) { /* Wait 5 seconds */ Delay(5000); /* Quick flash to show we're alive */ BSP_LedsSet(0xffff); Delay(20); BSP_LedsSet(0x0000); } }
/**************************************************************************//** * @brief LCD Test Routine, shows various text and patterns *****************************************************************************/ void Test(void) { int i, numberOfIterations = 0; /* Initialize GPIO */ GPIO_IRQInit(); /* Initialize RTC */ RTCDRV_Setup(cmuSelect_LFRCO, cmuClkDiv_32); /* Loop through funny pattern */ while (1) { SegmentLCD_AllOff(); #if VBOOST_SUPPORT checkVoltage(); #endif if (emMode != DEMO_MODE_NONE) { SegmentLCD_Symbol(LCD_SYMBOL_PAD0, 1); SegmentLCD_Symbol(LCD_SYMBOL_PAD1, 1); } else { for (i = 100; i > 0; i--) { SegmentLCD_Number(i); EM2Sleep(10); } SegmentLCD_NumberOff(); SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); SegmentLCD_Write(" TINY "); EM2Sleep(500); SegmentLCD_Write(" Gecko "); EM2Sleep(1000); SegmentLCD_AllOn(); EM2Sleep(1000); SegmentLCD_AllOff(); } if (emMode != DEMO_MODE_NONE) { SegmentLCD_Symbol(LCD_SYMBOL_PAD0, 1); SegmentLCD_Symbol(LCD_SYMBOL_PAD1, 1); } else { SegmentLCD_Write("OOOOOOO"); EM2Sleep(62); SegmentLCD_Write("XXXXXXX"); EM2Sleep(62); SegmentLCD_Write("+++++++"); EM2Sleep(62); SegmentLCD_Write("@@@@@@@"); EM2Sleep(62); SegmentLCD_Write("ENERGY "); EM2Sleep(250); SegmentLCD_Write("@@ERGY "); EM2Sleep(62); SegmentLCD_Write(" @@RGY "); EM2Sleep(62); SegmentLCD_Write(" M@@GY "); EM2Sleep(62); SegmentLCD_Write(" MI@@Y "); EM2Sleep(62); SegmentLCD_Write(" MIC@@ "); EM2Sleep(62); SegmentLCD_Write(" MICR@@"); EM2Sleep(62); SegmentLCD_Write(" MICRO@"); EM2Sleep(62); SegmentLCD_Write(" MICRO "); EM2Sleep(250); SegmentLCD_Write("-EFM32-"); EM2Sleep(250); /* Various eye candy */ SegmentLCD_AllOff(); if (emMode != DEMO_MODE_NONE) { SegmentLCD_Symbol(LCD_SYMBOL_PAD0, 1); SegmentLCD_Symbol(LCD_SYMBOL_PAD1, 1); } for (i = 0; i < 8; i++) { SegmentLCD_Number(numberOfIterations + i); SegmentLCD_ARing(i, 1); EM2Sleep(20); } for (i = 0; i < 8; i++) { SegmentLCD_Number(numberOfIterations + i); SegmentLCD_ARing(i, 0); EM2Sleep(100); } for (i = 0; i < 5; i++) { SegmentLCD_Number(numberOfIterations + i); SegmentLCD_Battery(i); SegmentLCD_EnergyMode(i, 1); EM2Sleep(100); SegmentLCD_EnergyMode(i, 0); EM2Sleep(100); } SegmentLCD_Symbol(LCD_SYMBOL_ANT, 1); for (i = 0; i < 4; i++) { SegmentLCD_EnergyMode(i, 1); EM2Sleep(100); } SegmentLCD_Symbol(LCD_SYMBOL_ANT, 0); SegmentLCD_Battery(0); } /* Energy Modes */ SegmentLCD_NumberOff(); SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); if ((emMode != DEMO_MODE_EM3) && (emMode != DEMO_MODE_EM4)) { ScrollText("Energy Mode demo, Press PB0 for EM3 or PB1 for EM4 "); } SegmentLCD_Write(" EM0 "); SegmentLCD_Number(0); SegmentLCD_EnergyMode(0, 1); SegmentLCD_EnergyMode(1, 1); SegmentLCD_EnergyMode(2, 1); SegmentLCD_EnergyMode(3, 1); SegmentLCD_EnergyMode(4, 1); RTCDRV_Delay(4000, false); SegmentLCD_Write(" EM1 "); SegmentLCD_Number(1111); SegmentLCD_EnergyMode(0, 0); EM1Sleep(4000); SegmentLCD_Write(" EM2 "); SegmentLCD_Number(2222); SegmentLCD_EnergyMode(1, 0); EM2Sleep(4000); /* Check if somebody has pressed one of the buttons */ if (emMode == DEMO_MODE_EM3) { ScrollText("Going down to EM3, press PB0 to wake up "); SegmentLCD_Write(" EM3 "); SegmentLCD_Number(3333); RTCDRV_Delay(1000, false); /* Wake up on GPIO interrupt */ EM3Sleep(); SegmentLCD_Number(0000); SegmentLCD_Write("--EM0--"); RTCDRV_Delay(500, false); SegmentLCD_Symbol(LCD_SYMBOL_PAD0, 0); SegmentLCD_Symbol(LCD_SYMBOL_PAD1, 0); emMode = DEMO_MODE_NONE; } /* Check if somebody's joystick down */ if (emMode == DEMO_MODE_EM4) { ScrollText("Going down to EM4, press reset to restart "); SegmentLCD_Write(" EM4 "); SegmentLCD_Number(4444); RTCDRV_Delay(1000, false); /* Wake up on reset */ EM4Sleep(); } SegmentLCD_EnergyMode(0, 0); SegmentLCD_EnergyMode(1, 0); SegmentLCD_EnergyMode(2, 0); SegmentLCD_EnergyMode(3, 0); SegmentLCD_EnergyMode(4, 0); /* Scrolltext */ ScrollText(stext); /* Blink and animation featurs */ BlinkTest(); numberOfIterations++; } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { bool redraw = false; bool prevRedraw = false; EMSTATUS status; volatile int i; /* Initialize DK board register access */ /* This demo currently only works in EBI mode */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Initialize DK interrupt enable */ DK_IRQInit(); /* Initialize GPIO interrupt */ GPIO_IRQInit(); /* Clear LEDs */ BSP_LedsSet(0x0000); /* Wait until we have control over display */ while(!redraw) { redraw = TFT_AddressMappedInit(); } /* Init graphics context - abort on failure */ status = GLIB_contextInit(&gc); if (status != GLIB_OK) while (1) ; /* Update TFT display forever */ while (1) { /* Check if we should control TFT display instead of AEM/board controller */ redraw = TFT_AddressMappedInit(); if(redraw) { /* This indicated a BC -> EFM control transfer */ if(prevRedraw != redraw) { /* Update information message */ gc.foregroundColor = GLIB_rgbColor(200, 200, 200); gc.backgroundColor = GLIB_rgbColor(0, 0, 0); GLIB_drawString(&gc, description[0], strlen(description[0]), 0, 0, 1); GLIB_drawString(&gc, description[1], strlen(description[1]), 0, 8, 1); GLIB_drawString(&gc, description[2], strlen(description[2]), 0, 24, 1); GLIB_drawString(&gc, description[3], strlen(description[3]), 0, 40, 1); GLIB_drawString(&gc, description[4], strlen(description[4]), 0, 48, 1); GLIB_drawString(&gc, description[5], strlen(description[5]), 0, 64, 1); GLIB_drawString(&gc, description[6], strlen(description[6]), 0, 72, 1); gc.foregroundColor = GLIB_rgbColor(200, 200, 100); GLIB_drawString(&gc, description[7], strlen(description[7]), 0, 88, 1); GLIB_drawString(&gc, description[8], strlen(description[8]), 0, 104, 1); } /* Update selected demo */ gc.foregroundColor = GLIB_rgbColor(100, 200, 100); gc.backgroundColor = GLIB_rgbColor(50, 50, 50); GLIB_drawString(&gc, eModeDesc[eModeDemo], strlen(eModeDesc[eModeDemo]), 40, 150, 1); } else { /* No need to refresh display when BC is active */ } prevRedraw = redraw; if(runDemo) { gc.foregroundColor = GLIB_rgbColor(50, 50, 50); gc.backgroundColor = GLIB_rgbColor(100, 200, 100); GLIB_drawString(&gc, eModeDesc[eModeDemo], strlen(eModeDesc[eModeDemo]), 40, 150, 1); for(i=0; i<14000; i++) ; break; } } /* Run demo */ switch(eModeDemo) { case 0: Demo_Primes(cmuSelect_HFXO, (CMU_HFRCOBand_TypeDef) 0); break; case 1: Demo_EM1(cmuSelect_HFXO, (CMU_HFRCOBand_TypeDef) 0); break; case 2: Demo_Primes(cmuSelect_HFRCO, cmuHFRCOBand_14MHz); break; case 3: Demo_EM1(cmuSelect_HFRCO, cmuHFRCOBand_14MHz); break; case 4: Demo_EM2(); break; case 5: Demo_EM2_RTC(); break; case 6: Demo_EM3(); break; case 7: Demo_EM3_GPIO(); break; case 8: Demo_EM4(); break; default: while(1); } return 0; }
/**************************************************************************//** * @brief LCD Test Routine, shows various text and patterns *****************************************************************************/ void Test(void) { int i, numberOfIterations = 0; /* Initialize GPIO */ GPIO_IRQInit(); /* Loop through funny pattern */ while (1) { SegmentLCD_AllOff(); if (emMode == DEMO_MODE_NONE) { for (i = 100; i > 0; i--) { SegmentLCD_Number(i); EM2Sleep(10); } SegmentLCD_NumberOff(); SegmentLCD_Symbol(LCD_SYMBOL_OLIMEX, 1); SegmentLCD_Write(" Gecko "); EM2Sleep(1000); SegmentLCD_AllOn(); EM2Sleep(1000); SegmentLCD_AllOff(); SegmentLCD_Write("OPENOCD"); EM2Sleep(2000); SegmentLCD_Write("GDB"); EM2Sleep(2000); SegmentLCD_Write("DONE"); EM2Sleep(2000); SegmentLCD_Write("XXXXXXX"); EM2Sleep(500); SegmentLCD_Write("-EFM32-"); EM2Sleep(2000); /* Various eye candy */ SegmentLCD_AllOff(); for (i = 0; i < 17; i++) { SegmentLCD_LowerNumber( i); SegmentLCD_Battery(i); SegmentLCD_UnsignedHex(numberOfIterations +i); EM2Sleep(200); } SegmentLCD_Symbol(LCD_SYMBOL_ARR_UP, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_DN, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_L, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_ARR_R, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 1); SegmentLCD_Symbol(LCD_SYMBOL_PLUS, 1); EM2Sleep(100); SegmentLCD_Symbol(LCD_SYMBOL_u, 1); SegmentLCD_Symbol(LCD_SYMBOL_m, 1); SegmentLCD_Symbol(LCD_SYMBOL_H, 1); SegmentLCD_Symbol(LCD_SYMBOL_F, 1); EM2Sleep(200); SegmentLCD_Symbol(LCD_SYMBOL_2COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_3COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_4COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_5COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_6COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_10COL, 1); SegmentLCD_Symbol(LCD_SYMBOL_1DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_2DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_3DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_4DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_5DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_6DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_8DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_10DP, 1); SegmentLCD_Symbol(LCD_SYMBOL_11DP, 1); EM2Sleep(800); SegmentLCD_AllOff(); /* Energy Modes */ SegmentLCD_Number(0); SegmentLCD_Battery(0); SegmentLCD_Write(" EM0 "); RTCDRV_Delay(2000, false); SegmentLCD_Number(1111); SegmentLCD_Battery(1); SegmentLCD_Write(" EM1 "); EM1Sleep(2000); SegmentLCD_Number(2222); SegmentLCD_Battery(2); SegmentLCD_Write(" EM2 "); EM2Sleep(2000); ScrollText("Energy Mode demo, Press BUT2 for EM3 or BUT1 for EM4 "); EM2Sleep(500); SegmentLCD_Write("PRESS x"); EM2Sleep(2000); } /* Check if somebody has pressed one of the buttons */ if (emMode == DEMO_MODE_EM3) { SegmentLCD_Number(3333); SegmentLCD_Battery(3); SegmentLCD_Arrows(0, 1); //arrow down, go to sleep in EM3 ScrollText("Going down to EM3, press BUT2 to wake up "); SegmentLCD_Write(" EM3 "); RTCDRV_Delay(1000, false); /* Wake up on GPIO interrupt */ EM3Sleep(); SegmentLCD_Battery(0); SegmentLCD_Arrows(0, 0); //arrow down off SegmentLCD_Arrows(2, 1); //arrow up, wakeup from sleep in EM3 SegmentLCD_Write("wakeup"); RTCDRV_Delay(1500, false); SegmentLCD_Arrows(2, 0); //arrow up off SegmentLCD_Battery(0); SegmentLCD_Number(0000); SegmentLCD_Write("--EM0--"); RTCDRV_Delay(500, false); } /* Check if somebody's joystick down */ if (emMode == DEMO_MODE_EM4) { SegmentLCD_Number(4444); SegmentLCD_Battery(4); SegmentLCD_Arrows(0, 1); //arrow down, go to sleep in EM4 ScrollText("Going down to EM4, press reset to restart "); SegmentLCD_Write(" EM4 "); RTCDRV_Delay(1000, false); /* Wake up on reset */ EM4Sleep(); } /* Scrolltext */ ScrollText(stext); numberOfIterations++; } }