/** * \brief Fractal Algorithm with FPU optimization. */ static int draw_mandel_with_fpu(void) { t_cpu_time timer; while (i_wfpu<HEIGHT/2+1) { cpu_set_timeout( cpu_us_2_cy(DELAY_US,pcl_freq_param.cpu_f), &timer ); while(j_wfpu<WIDTH) { z_wfpu = 0; zi_wfpu = 0; inset_wfpu = 1; while (k_wfpu<iter_wfpu) { /* z^2 = (a+bi)(a+bi) = a^2 + 2abi - b^2 */ newz_wfpu = (z_wfpu*z_wfpu)-(zi_wfpu*zi_wfpu) + x_wfpu; newzi_wfpu = 2*z_wfpu*zi_wfpu + y_wfpu; z_wfpu = newz_wfpu; zi_wfpu = newzi_wfpu; if(((z_wfpu*z_wfpu)+(zi_wfpu*zi_wfpu)) > 4) { inset_wfpu = 0; colour_wfpu = k_wfpu; k_wfpu = iter_wfpu; } k_wfpu++; }; k_wfpu = 0; // Draw Mandelbrot set if (inset_wfpu) { et024006_DrawPixel(j_wfpu,i_wfpu+OFFSET_DISPLAY,BLACK); et024006_DrawPixel(j_wfpu,HEIGHT-i_wfpu+OFFSET_DISPLAY,BLACK); } else { et024006_DrawPixel(j_wfpu, i_wfpu+OFFSET_DISPLAY, BLUE_LEV((colour_wfpu*255) / iter_wfpu )+ GREEN_LEV((colour_wfpu*127) / iter_wfpu )+ RED_LEV((colour_wfpu*127) / iter_wfpu )); et024006_DrawPixel(j_wfpu, HEIGHT-i_wfpu+OFFSET_DISPLAY, BLUE_LEV((colour_wfpu*255) / iter_wfpu )+ GREEN_LEV((colour_wfpu*127) / iter_wfpu )+ RED_LEV((colour_wfpu*127) / iter_wfpu )); } x_wfpu += xstep_wfpu; j_wfpu++; }; j_wfpu = 0; y_wfpu += ystep_wfpu; x_wfpu = xstart_wfpu; i_wfpu++; if( cpu_is_timeout(&timer) ) { return 0; } }; return 1; }
static void mmi_ms_display( void ) { uint32_t i; for( i=0 ; i<MS_N_PROGRESS_BAR ; i++ ) { if( ms_progress_bar_level[i] != 0 ) { if( ms_progress_bar_type[i] == BLUE ) et024006_DrawFilledRect(80+3 + i*(17+2), 180+3, 17, 10, BLUE_LEV(ms_progress_bar_level[i]) ); else et024006_DrawFilledRect(80+3 + i*(17+2), 180+3, 17, 10, RED_LEV(ms_progress_bar_level[i]) ); ms_progress_bar_level[i] -= 1; } } }
//! //! @brief This function displays the a bargraph indicating the state of the audio buffers and //! the PPM deviation between the incoming USB audio sampling frequency and the output DAC sampling frequency. //! static void mmi_activity_display( bool init, uint32_t fifo_cnt ) { static char tmp[20]; static int32_t ppm; #define TIMER_MMI 1000 // Unit is in ms. static t_cpu_time mmi_timer; static uint32_t old_fcpu_hz = 0; static uint32_t mmi_activity_state=0; static uint32_t i; if( init ) { // Display PPM window et024006_PrintString("PPM", (const unsigned char *)&FONT8x8, 22, 70+4, BLUE, -1); display_box(50, 70, 40, 16, WHITE, BLACK); et024006_PrintString("HID", (const unsigned char *)&FONT8x8, 122, 70+4, BLUE, -1); display_box(150, 70, 40, 16, WHITE, BLACK); et024006_PrintString("CPU", (const unsigned char *)&FONT8x8, 222, 70+4, BLUE, -1); display_box(250, 70, 40, 16, WHITE, BLACK); et024006_PrintString("Buffers", (const unsigned char *)&FONT8x8, 0, 50+4, BLUE, -1); display_box(50, 50, 195, 16, WHITE, BLACK); cpu_set_timeout( cpu_ms_2_cy(TIMER_MMI, FCPU_HZ), &mmi_timer ); goto mmi_end; } if( !cpu_is_timeout(&mmi_timer) ) goto mmi_end; switch( mmi_activity_state ) { case 0: i = 0; mmi_activity_state = 1; // no break here case 1: if( i>=USB_STREAM_BUFFER_NUMBER ) { mmi_activity_state = 10; break; } if( i<fifo_cnt ) et024006_DrawFilledRect(50+3 + i*(10+2), 50+3, 10, 10, BLUE_LEV(15) ); else et024006_DrawFilledRect(50+3 + i*(10+2), 50+3, 10, 10, WHITE ); i++; break; case 10: ppm = usb_stream_ppm_get(); sprintf( tmp, "%4ld", ppm ); et024006_PrintString(tmp, (const unsigned char *)&FONT8x8, 50+4, 70+4, BLUE, WHITE); mmi_activity_state = 20; break; case 20: if( old_fcpu_hz==FCPU_HZ ) { mmi_activity_state = 30; break; } else mmi_activity_state = 21; // No break here case 21: old_fcpu_hz=FCPU_HZ; sprintf( tmp, "%ld", (uint32_t)FCPU_HZ/1000000); et024006_PrintString(tmp, (const unsigned char *)&FONT8x8, 250+4, 70+4, BLUE, WHITE); mmi_activity_state = 30; break; #if (defined __GNUC__) case 30: sprintf( tmp, "%ld", get_heap_total_used_size() ); et024006_PrintString(tmp, (const unsigned char *)&FONT8x8, 230, START_Y_DEMO_TEXT+13*FONT_HEIGHT, BLUE, WHITE); mmi_activity_state = 31; break; case 31: sprintf( tmp, "%ld", get_heap_curr_used_size() ); et024006_PrintString(tmp, (const unsigned char *)&FONT8x8, 230, START_Y_DEMO_TEXT+14*FONT_HEIGHT, BLUE, WHITE); // No break here #elif (defined __ICCAVR32__) case 30: sprintf( tmp, "%ld", get_heap_free_size() ); et024006_PrintString(tmp, (const unsigned char *)&FONT8x8, 230, START_Y_DEMO_TEXT+14*FONT_HEIGHT, BLUE, WHITE); // No break here #endif default: // Rearm timer cpu_set_timeout( cpu_ms_2_cy(TIMER_MMI, FCPU_HZ), &mmi_timer ); mmi_activity_state = 0; break; } mmi_end: return; }