/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { bool redraw, firstRun; FRESULT res; int mountStatus; /* Used when iterating through directory */ FILINFO Finfo; DIR dir; FRESULT listDirStatus = FR_OK; /* Used for manifest operation */ bool useManifest = false; char buffer[20]; /* Use 32MHZ HFXO as core clock frequency */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* 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 10 msec interrupts */ if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 100)) { while (1) ; } /* Enable SPI access to MicroSD card */ BSP_PeripheralAccess(BSP_MICROSD, true); /* Initialize filesystem */ mountStatus = initFatFS(); /* Open Manifest file. If a manifest file is not present, iterate through the * File system in filesystem order. */ if (f_open(&manifest, "files.txt", FA_READ) == FR_OK) useManifest = true; firstRun = true; /* Update TFT display forever */ while (1) { if (!useManifest) { /* Open root directory */ strcpy(path, ""); listDirStatus = f_opendir(&dir, path); } /* Iterate through files */ while (1) { /* Check if we should control TFT display instead of * AEM/board control application. Read state of AEM pushbutton */ redraw = TFT_AddressMappedInit(); if (redraw) { if ( firstRun ) { firstRun = false; SLIDES_init(); } /* Check disk status */ if (disk_status(0) != 0) { /* Filesystem not mounted, show fatal error. */ SLIDES_showError(true, "Fatal:\n Filesystem is not ready.\n (%d)", disk_status(0)); } /* Check if filesystem was successfully mounted. */ if (mountStatus != 0) { /* Filesystem not mounted, show fatal error. */ SLIDES_showError(true, "Fatal:\n Filesystem could not be mounted.\n (%d)", mountStatus); } /* Is there a manifest file present? */ if (useManifest) { /* If we are at the end of the file, reset filepointer */ if (f_eof(&manifest)) f_lseek(&manifest, 0); /* Read next file from manifest file */ f_gets(buffer, 20, &manifest); /* Display Bitmap */ SLIDES_showBMP(buffer); } else { /* Check to see if the root directory was correctly opened. */ if (listDirStatus != FR_OK) { SLIDES_showError(true, "Fatal:\n Could not read root directory.\n (%d)", listDirStatus); } /* Open the next entry in directory */ res = f_readdir(&dir, &Finfo); if ((res != FR_OK) || !Finfo.fname[0]) { /* End of directory listing. Break out of inner loop and reopen * directory entry */ break; } /* Update display */ SLIDES_showBMP(Finfo.fname); } /* Delay to allow the user to see the BMP file. */ Delay(200); } } } }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { int toggleLED = 0; bool redraw = false; EMSTATUS status; GLIB_Rectangle rect = { .xMin = 0, .yMin = 0, .xMax = 319, .yMax = 239, }; /* Use 48MHZ HFXO as core clock frequency */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* 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 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) ; } /* 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) ; /* Clear framebuffer */ gc.foregroundColor = GLIB_rgbColor(20, 40, 20); GLIB_drawRectFilled(&gc, &rect); /* Update TFT display forever */ while (1) { /* Check if we should control TFT display instead of AEM/board controller */ redraw = TFT_AddressMappedInit(); if(redraw) { /* Update display */ TFT_displayUpdate(&gc); } else { /* No need to refresh display when BC is active */ Delay(200); } /* Toggle led after each TFT_displayUpdate iteration */ if (toggleLED) { BSP_LedsSet(0x0000); toggleLED = 0; } else { BSP_LedsSet(0x000f); toggleLED = 1; } } }
/**************************************************************************//** * @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 * Main function. Setup ADC, FFT, clocks, PRS, DMA, Timer, * and process FFT forever. *******************************************************************************/ int main(void) { arm_status status; char buf[20]; bool redraw = false; int glibStatus; DMA_Init_TypeDef dmaInit; TIMER_Init_TypeDef timerInit = TIMER_INIT_DEFAULT; /* Initialize DVK board register access */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceEtmSetup(); /* Connect audio in to ADC */ BSP_PeripheralAccess(BSP_AUDIO_IN, true); /* Wait a while in order to let signal from audio-in stabilize after */ /* enabling audio-in peripheral. */ RTCDRV_Trigger(1000, NULL); EMU_EnterEM2(true); /* Initialize the CFFT/CIFFT module */ status = arm_rfft_init_f32(&rfft_instance, &cfft_instance, GUITAR_AUDIO_BUFFER_SAMPLES, 0, /* forward transform */ 1); /* normal, not bitreversed, order */ if (status != ARM_MATH_SUCCESS) { /* Error initializing RFFT module. */ while (1) ; } dataReadyForFFT = false; processingFFT = false; /* Use the HFXO. We still only manage to process about * a third the buffers through FFT */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) { while (1) ; } /* Enable clocks required */ CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_ADC0, true); CMU_ClockEnable(cmuClock_PRS, true); CMU_ClockEnable(cmuClock_DMA, true); CMU_ClockEnable(cmuClock_TIMER0, true); NVIC_SetPriority(DMA_IRQn, 0); /* Highest priority */ /* Configure peripheral reflex system used by TIMER to trigger ADC/DAC */ guitarPRSConfig(GUITAR_PRS_CHANNEL); /* Configure general DMA issues */ dmaInit.hprot = 0; dmaInit.controlBlock = dmaControlBlock; DMA_Init(&dmaInit); /* Configure ADC used for audio-in */ guitarADCConfig(); /* Trigger sampling according to configured sample rate */ TIMER_TopSet(TIMER0, CMU_ClockFreqGet(cmuClock_HFPER) / GUITAR_AUDIO_SAMPLE_RATE); TIMER_Init(TIMER0, &timerInit); /* Wait until we have control over display */ while(!redraw) { redraw = TFT_AddressMappedInit(); } /* Init graphics context - abort on failure */ glibStatus = GLIB_contextInit(&gc); if (glibStatus != GLIB_OK) while (1) ; /* Clear the screen */ gc.backgroundColor = GLIB_rgbColor(0, 0, 0); GLIB_clear(&gc); while (1) { while (dataReadyForFFT) { float32_t freq; processingFFT = true; processFFT(); dataReadyForFFT = false; processingFFT = false; /* Get frequency and make string with one decimal accuracy */ freq = getFreq(); sprintf(buf, "%6.1f", freq); /* Check if we should control TFT display instead of AEM/board controller */ redraw = TFT_AddressMappedInit(); if (redraw) { gc.foregroundColor = GLIB_rgbColor(220, 220, 220); gc.backgroundColor = GLIB_rgbColor(0, 0, 0); /* Print the frequency somewhere in the middle of the screen */ GLIB_drawString(&gc, buf, strlen(buf), 100, 120, 1); } } EMU_EnterEM1(); } }