Esempio n. 1
0
/**************************************************************************//**
 * @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);
  }
}
Esempio n. 2
0
/**************************************************************************//**
 * @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++;
  }
}
Esempio n. 3
0
/**************************************************************************//**
 * @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;
}
Esempio n. 4
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++;
  }
}