//# MENU spectrum void spectrum_menu() { lcdClear(); lcdDisplay(); getInputWaitRelease(); // RF initialization from ppack.c: dac_init(false); cpu_clock_set(204); // WARP SPEED! :-) hackrf_clock_init(); rf_path_pin_setup(); /* Configure external clock in */ scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1); sgpio_configure_pin_functions(); ON(EN_VDD); ON(EN_1V8); OFF(MIC_AMP_DIS); delayms(500); // doesn't work without cpu_clock_set(204); // WARP SPEED! :-) si5351_init(); portapack_init(); while(1) { switch(getInput()) { case BTN_UP: displayMode=MODE_WATERFALL; break; case BTN_DOWN: displayMode=MODE_SPECTRUM; break; case BTN_LEFT: freq -= 2000000; ssp1_set_mode_max2837(); set_freq(freq); break; case BTN_RIGHT: freq += 2000000; ssp1_set_mode_max2837(); set_freq(freq); break; case BTN_ENTER: //FIXME: unset the callback, reset the clockspeed, tidy up nvic_disable_irq(NVIC_DMA_IRQ); OFF(EN_VDD); OFF(EN_1V8); ON(MIC_AMP_DIS); systick_set_clocksource(0); systick_set_reload(12e6/SYSTICKSPEED/1000); return; } } }
//# MENU Apack void ppack_menu() { lcdClear(); lcdPrintln("PPack port"); lcdPrintln(""); lcdPrintln("up=enable"); lcdDisplay(); dac_init(false); cpu_clock_set(204); // WARP SPEED! :-) hackrf_clock_init(); rf_path_pin_setup(); /* Configure external clock in */ scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1); sgpio_configure_pin_functions(); ON(EN_VDD); ON(EN_1V8); OFF(MIC_AMP_DIS); complex_s8_t * samples; while(1){ switch(getInputRaw()){ case BTN_UP: // ON(MIXER_EN); // hackrf does this cpu_clock_set(204); // WARP SPEED! :-) si5351_init(); portapack_init(); getInputWaitRelease(); break; case BTN_DOWN: lcdPrintln("file"); writeFile("samples.8", (char*)0x20000000,(uintptr_t)s8ram-0x20000000); break; case BTN_LEFT: lcdPrintln("reset"); s8ram=(complex_s8_t*)0x20000000; break; case BTN_RIGHT: break; case BTN_ENTER: return; }; TOGGLE(LED2); delayms(40); lcdPrint(IntToStr((uintptr_t)s8ram,8,F_HEX)); lcdPrint(" "); lcdPrintln(IntToStr(sctr,7,F_LONG)); lcdDisplay(); }; };
//# MENU cpld void cpld_flash() { SETUPgout(EN_1V8); ON(EN_1V8); delay(1000000); /* wait until cpld boot */ cpu_clock_set(204); lcdPrintln("Program CPLD"); bytes=0; lcdPrint(IntToStr(bytes,5,F_LONG)); lcdPrint(" bytes..."); lcdNl(); #define WAIT_LOOP_DELAY (6000000) #define ALL_LEDS (PIN_LED1|PIN_LED2|PIN_LED3) int i; int error; refill_cpld_buffer_fs(); error = cpld_jtag_program(sizeof(cpld_xsvf_buffer), cpld_xsvf_buffer, refill_cpld_buffer_fs); if(error) { lcdPrintln("Programming failed!"); lcdPrintln(IntToStr(error,5,0)); lcdDisplay(); /* LED3 (Red) steady on error */ ON(LED4); while (1); }; lcdPrintln("Success."); lcdDisplay(); OFF(EN_1V8); };
int main(void) { cpu_clock_init(); /* CPU Clock is now 104 MHz */ ssp_clock_init(); systickInit(); SETUPgout(EN_VDD); SETUPgout(MIXER_EN); SETUPgout(MIC_AMP_DIS); SETUPgout(LED1); SETUPgout(LED2); SETUPgout(LED3); SETUPgout(LED4); inputInit(); lcdInit(); lcdFill(0xff); lcdPrintln("Flash-App"); lcdNl(); lcdDisplay(); cpld_flash(); cpu_clock_set(50); full_msc(); return 0; }
//# MENU cpld void cpld_menu(){ getInputWaitRelease(); SETUPgout(EN_1V8); ON(EN_1V8); delayNop(1000000); /* wait until cpld boot */ cpu_clock_set(204); lcdClear(); lcdPrintln("CPLD"); lcdNl(); lcdNl(); bytes=0; lcdPrint(IntToStr(bytes,5,F_LONG)); lcdPrint(" bytes..."); lcdNl(); #define WAIT_LOOP_DELAY (6000000) #define ALL_LEDS (PIN_LED1|PIN_LED2|PIN_LED3) int i; int error; FRESULT res; res=f_open(&file, "cpld.xsv", FA_OPEN_EXISTING|FA_READ); if(res!=FR_OK){ lcdPrintln("FOPEN ERROR"); lcdPrintln(f_get_rc_string(res)); lcdDisplay(); getInputWait(); return; }; refill_cpld_buffer_fs(); error = cpld_jtag_program(sizeof(cpld_xsvf_buffer), cpld_xsvf_buffer, refill_cpld_buffer_fs); if(error){ lcdPrintln("Programming failed!"); lcdPrintln(IntToStr(error,5,0)); lcdDisplay(); /* LED3 (Red) steady on error */ ON(LED3); while (1); }; lcdPrintln("Success."); lcdDisplay(); for (res=0;res<10;res++){ /* blink LED1, LED2, and LED3 on success */ TOGGLE(LED1); TOGGLE(LED2); TOGGLE(LED3); for (i = 0; i < WAIT_LOOP_DELAY; i++) /* Wait a bit. */ __asm__("nop"); }; /* XXX: Maybe power toggle needed to start CPLD? */ OFF(EN_1V8); };
void set_overclock(int activate) { uintptr_t tempCore2, tempMemory; if (activate) { if (is_lcd_active()) { cpu_clock_set(430000000); REG_CPM_LPCDR = 11; } else { cpu_clock_set(410000000); REG_CPM_LPCDR = 11; } cpu_clock_get(&tempCore2, &tempMemory); } else { cpu_clock_set(tempCore); REG_CPM_LPCDR = tempLcd; } }
//# MENU ws2812b void ws1812b_menu(){ uint8_t pattern[] = { 255, 255, 0, 255, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 0 }; uint8_t green[] = {255, 0, 0}; getInputWaitRelease(); //cpu_clock_set(17); cpu_clock_set(51); SETUPgout(RGB_LED); while(1){ lcdClear(0xff); lcdPrintln("WS2812B test"); lcdPrintln("UP: pattern"); lcdPrintln("DOWN: green"); lcdPrintln("ENTER: exit"); lcdDisplay(); switch(getInput()){ case BTN_UP: ws2812_sendarray(pattern, sizeof(pattern)); break; case BTN_DOWN: ws2812_sendarray(green, sizeof(green)); break; case BTN_LEFT: break; case BTN_RIGHT: break; case BTN_ENTER: return; break; }; }; return; };
//# MENU BPSK void bfsk_menu() { lcdClear(); lcdPrintln("ENTER to go back"); lcdPrintln("L/R/U/D to xmit"); rflib_lcdDisplay(); getInputWaitRelease(); cpu_clock_set(204); CDCenable(); rflib_init(); rflib_bfsk_init(); rflib_set_freq(FREQSTART); rflib_bfsk_receive(); while(1) { switch (getInputRaw()) { case BTN_UP: transmit("up"); break; case BTN_DOWN: transmit("down"); break; case BTN_RIGHT: transmit("right"); break; case BTN_LEFT: transmit("left"); break; case BTN_ENTER: goto stop; } if(vcom_connected()) { /* check if we got data from USB-CDC, transmit it, if so. */ uint8_t sendbuf[255]; uint32_t read = vcom_bread(sendbuf, 255); if(read > 0) rflib_bfsk_transmit(sendbuf, read, true); } receive(); } stop: rflib_shutdown(); return; }
void doADC(){ int32_t vBat=0; int32_t vIn=0; int32_t RSSI=0; int32_t LED=0; int32_t MIC=0; int v; int df=0; //#define LED4 PB_6, SCU_CONF_FUNCTION4, GPIO5, GPIOPIN26 SETUPadc(LED4); while(1){ lcdClear(0xff); lcdPrintln("ADC-Test v1"); lcdPrintln(""); lcdPrint("vBat: "); lcdPrint(IntToStr(vBat,4,F_ZEROS));lcdNl(); lcdPrint("vIn: "); lcdPrint(IntToStr(vIn ,4,F_ZEROS));lcdNl(); lcdPrint("RSSI: "); lcdPrint(IntToStr(RSSI ,4,F_ZEROS));lcdNl(); lcdPrint("LED: "); lcdPrint(IntToStr(LED ,4,F_ZEROS));lcdNl(); lcdPrint("Mic: "); lcdPrint(IntToStr(MIC ,4,F_ZEROS));lcdNl(); df++; lcdPrint("df: "); lcdPrint(IntToStr(df,4,F_ZEROS));lcdNl(); lcdPrint("ctr: "); lcdPrint(IntToStr(_timectr,6,0));lcdNl(); lcdNl(); /* lcdPrint("U ADC3/vBat");lcdNl(); lcdPrint("D ADC4/vIn ");lcdNl(); lcdPrint("L ADC0/RSSI");lcdNl(); lcdPrint("R ADC7/Mic ");lcdNl(); */ lcdDisplay(); vBat=adc_get_single(ADC0,ADC_CR_CH3)*2*330/1023; vIn=adc_get_single(ADC0,ADC_CR_CH4)*2*330/1023; RSSI=adc_get_single(ADC0,ADC_CR_CH0)*2*330/1023; LED=adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023; MIC=adc_get_single(ADC0,ADC_CR_CH7)*2*330/1023; switch(getInput()){ case BTN_UP: vBat=adc_get_single(ADC0,ADC_CR_CH3)*2*330/1023; cpu_clock_set(204); break; case BTN_DOWN: vIn=adc_get_single(ADC0,ADC_CR_CH4)*2*330/1023; cpu_clock_set(102); break; case BTN_LEFT: RSSI=adc_get_single(ADC0,ADC_CR_CH0)*2*330/1023; cpu_clock_set(12); break; case BTN_RIGHT: LED=adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023; MIC=adc_get_single(ADC0,ADC_CR_CH7)*2*330/1023; break; case BTN_ENTER: return; break; }; }; };
void doSpeed(){ SETUPgout(LCD_BL_EN); SETUPgout(EN_1V8); SETUPgout(LED4); int mhz=102; while(1){ TOGGLE(LED1); lcdClear(0xff); lcdPrint("speed: "); lcdPrint(IntToStr(mhz,3,0));lcdNl(); lcdDisplay(); switch(getInput()){ case BTN_UP: // mhz=204; // cpu_clock_set(mhz); #define PD0_SLEEP0_HW_ENA MMIO32(0x40042000) #define PD0_SLEEP0_MODE MMIO32(0x4004201C) PD0_SLEEP0_HW_ENA = 1; PD0_SLEEP0_MODE = 0x003000AA; SCB_SCR|=SCB_SCR_SLEEPDEEP; ON(LED1); CGU_BASE_M4_CLK = (CGU_BASE_M4_CLK_CLK_SEL(CGU_SRC_IRC) | CGU_BASE_M4_CLK_AUTOBLOCK(1)); CGU_PLL1_CTRL= CGU_PLL1_CTRL_PD(1); CGU_PLL0USB_CTRL= CGU_PLL1_CTRL_PD(1); CGU_PLL0AUDIO_CTRL= CGU_PLL1_CTRL_PD(1); CGU_XTAL_OSC_CTRL &= ~(CGU_XTAL_OSC_CTRL_ENABLE_MASK); #define __WFI() __asm__("wfi") while(1){ TOGGLE(LED1); __WFI(); }; break; case BTN_DOWN: mhz=12; cpu_clock_set(mhz); break; case BTN_LEFT: while(1){ cpu_clock_set(102); TOGGLE(LED1); delayNop(1000); cpu_clock_set(12); TOGGLE(LED1); delayNop(1000); }; break; case BTN_RIGHT: TOGGLE(LCD_BL_EN); OFF(BY_MIX_N); OFF(BY_MIX); OFF(BY_AMP_N); OFF(BY_AMP); OFF(TX_RX_N); OFF(TX_RX); OFF(LOW_HIGH_FILT_N); OFF(LOW_HIGH_FILT); OFF(TX_AMP); OFF(RX_LNA); OFF(MIXER_EN); OFF(CE_VCO); // cpu_clock_set(mhz); break; case BTN_ENTER: // turnoff(&CCU1_CLK_APB3_BUS_CFG); turnoff(&CCU1_CLK_APB3_I2C1_CFG); turnoff(&CCU1_CLK_APB3_DAC_CFG); turnoff(&CCU1_CLK_APB3_ADC0_CFG); turnoff(&CCU1_CLK_APB3_ADC1_CFG); turnoff(&CCU1_CLK_APB3_CAN0_CFG); // turnoff(&CCU1_CLK_APB1_BUS_CFG); turnoff(&CCU1_CLK_APB1_MOTOCONPWM_CFG); turnoff(&CCU1_CLK_APB1_I2C0_CFG); turnoff(&CCU1_CLK_APB1_I2S_CFG); turnoff(&CCU1_CLK_APB1_CAN1_CFG); turnoff(&CCU1_CLK_SPIFI_CFG); // turnoff(&CCU1_CLK_M4_BUS_CFG); turnoff(&CCU1_CLK_M4_SPIFI_CFG); // turnoff(&CCU1_CLK_M4_GPIO_CFG); turnoff(&CCU1_CLK_M4_LCD_CFG); turnoff(&CCU1_CLK_M4_ETHERNET_CFG); turnoff(&CCU1_CLK_M4_USB0_CFG); turnoff(&CCU1_CLK_M4_EMC_CFG); turnoff(&CCU1_CLK_M4_SDIO_CFG); turnoff(&CCU1_CLK_M4_DMA_CFG); // turnoff(&CCU1_CLK_M4_M4CORE_CFG); turnoff(&CCU1_CLK_M4_SCT_CFG); turnoff(&CCU1_CLK_M4_USB1_CFG); turnoff(&CCU1_CLK_M4_EMCDIV_CFG); turnoff(&CCU1_CLK_M4_M0APP_CFG); turnoff(&CCU1_CLK_M4_VADC_CFG); turnoff(&CCU1_CLK_M4_WWDT_CFG); turnoff(&CCU1_CLK_M4_USART0_CFG); turnoff(&CCU1_CLK_M4_UART1_CFG); turnoff(&CCU1_CLK_M4_SSP0_CFG); turnoff(&CCU1_CLK_M4_TIMER0_CFG); turnoff(&CCU1_CLK_M4_TIMER1_CFG); // turnoff(&CCU1_CLK_M4_SCU_CFG); // turnoff(&CCU1_CLK_M4_CREG_CFG); turnoff(&CCU1_CLK_M4_RITIMER_CFG); turnoff(&CCU1_CLK_M4_USART2_CFG); turnoff(&CCU1_CLK_M4_USART3_CFG); turnoff(&CCU1_CLK_M4_TIMER2_CFG); turnoff(&CCU1_CLK_M4_TIMER3_CFG); // turnoff(&CCU1_CLK_M4_SSP1_CFG); turnoff(&CCU1_CLK_M4_QEI_CFG); // turnoff(&CCU1_CLK_PERIPH_BUS_CFG); turnoff(&CCU1_CLK_PERIPH_CORE_CFG); turnoff(&CCU1_CLK_PERIPH_SGPIO_CFG); turnoff(&CCU1_CLK_USB0_CFG); turnoff(&CCU1_CLK_USB1_CFG); // turnoff(&CCU1_CLK_SPI_CFG); turnoff(&CCU1_CLK_VADC_CFG); turnoff(&CCU2_CLK_APLL_CFG); turnoff(&CCU2_CLK_APB2_USART3_CFG); turnoff(&CCU2_CLK_APB2_USART2_CFG); turnoff(&CCU2_CLK_APB0_UART1_CFG); turnoff(&CCU2_CLK_APB0_USART0_CFG); // turnoff(&CCU2_CLK_APB2_SSP1_CFG); turnoff(&CCU2_CLK_APB0_SSP0_CFG); turnoff(&CCU2_CLK_SDIO_CFG); // clkoff(& CGU_BASE_SAFE_CLK); clkoff(& CGU_BASE_USB0_CLK); clkoff(& CGU_BASE_PERIPH_CLK); clkoff(& CGU_BASE_USB1_CLK); // clkoff(& CGU_BASE_M4_CLK); clkoff(& CGU_BASE_SPIFI_CLK); clkoff(& CGU_BASE_SPI_CLK); clkoff(& CGU_BASE_PHY_RX_CLK); clkoff(& CGU_BASE_PHY_TX_CLK); clkoff(& CGU_BASE_APB1_CLK); clkoff(& CGU_BASE_APB3_CLK); clkoff(& CGU_BASE_LCD_CLK); clkoff(& CGU_BASE_VADC_CLK); clkoff(& CGU_BASE_SDIO_CLK); clkoff(& CGU_BASE_SSP0_CLK); clkoff(& CGU_BASE_SSP1_CLK); clkoff(& CGU_BASE_UART0_CLK); clkoff(& CGU_BASE_UART1_CLK); clkoff(& CGU_BASE_UART2_CLK); clkoff(& CGU_BASE_UART3_CLK); clkoff(& CGU_BASE_AUDIO_CLK); clkoff(& CGU_BASE_CGU_OUT0_CLK); clkoff(& CGU_BASE_CGU_OUT1_CLK); // return; break; }; }; };
int menu_options(){ struct pal_s *palp=0; int pal=0, skip=0, ret=0, cfilter=0, sfps=0, upscale=0, speed=0, i=0; char *tmp=0, *romdir=0; FILE *file; #ifdef DINGOO_NATIVE /* ** 100Mhz once caused Dingoo A320 MIPS to hang, ** when 100Mhz worked BW GB (Adjustris) game was running at 32 fps (versus 60 at 200Mhz). ** 150Mhz has never worked on my Dingoo A320. */ uintptr_t dingoo_clock_speeds[] = { 200000000, 250000000, 300000000, 336000000, 360000000, 400000000 /* , 430000000 Should not be needed */ }; /* ** under-under clock option is for GB games. ** GB games can often be ran under the already ** underclocked Dingoo speed of 336Mhz */ bool dingoo_clock_change_result; uintptr_t tempCore=336000000; /* default Dingoo A320 clock speed */ uintptr_t tempMemory=112000000; /* default Dingoo A320 memory speed */ cpu_clock_get(&tempCore, &tempMemory); #endif /* DINGOO_NATIVE */ pal = findpal(); cfilter = rc_getint("colorfilter"); if(cfilter && !rc_getint("filterdmg")) cfilter = 2; upscale = rc_getint("upscaler"); skip = rc_getint("frameskip")+1; sfps = rc_getint("showfps"); #ifdef DINGOO_NATIVE speed = 0; #else speed = rc_getint("cpuspeed")/50 - 4; #endif /* DINGOO_NATIVE */ if(speed<0) speed = 0; if(speed>11) speed = 11; romdir = rc_getstr("romdir"); romdir = romdir ? strdup(romdir) : strdup("."); start: dialog_begin("Options",NULL); dialog_option("Mono Palette",lpalettes,&pal); /* 1 */ dialog_option("Color Filter",lcolorfilter,&cfilter); /* 2 */ dialog_option("Upscaler",lupscaler,&upscale); /* 3 */ dialog_option("Frameskip",lframeskip,&skip); /* 4 */ dialog_option("Show FPS",lsdl_showfps,&sfps); /* 5 */ #if defined(WIZ) || defined(DINGOO_NATIVE) dialog_option("Clock Speed",lclockspeeds,&speed); /* 6 */ #else dialog_text("Clock Speed","Default",0); /* 6 */ #endif dialog_text("Rom Path",romdir,FIELD_SELECTABLE); /* 7 */ #ifdef GNUBOY_HARDWARE_VOLUME dialog_option("Volume", volume_levels, &volume_hardware); /* 8 */ /* this is not the OSD volume.. */ #else dialog_text("Volume", "Default", 0); /* 8 */ /* this is not the OSD volume.. */ #endif /* GNBOY_HARDWARE_VOLUME */ dialog_text(NULL,NULL,0); /* 9 */ dialog_text("Apply",NULL,FIELD_SELECTABLE); /* 10 */ dialog_text("Apply & Save",NULL,FIELD_SELECTABLE); /* 11 */ dialog_text("Cancel",NULL,FIELD_SELECTABLE); /* 12 */ switch(ret=dialog_end()){ case 7: /* "Rom Path" romdir */ tmp = menu_requestdir("Select Rom Directory",romdir); if(tmp){ free(romdir); romdir = tmp; } goto start; case 12: /* Cancel */ return ret; break; case 10: /* Apply */ case 11: /* Apply & Save */ #ifdef GNUBOY_HARDWARE_VOLUME pcm_volume(volume_hardware * 10); #endif /* GNBOY_HARDWARE_VOLUME */ palp = &gbpal[pal]; if(speed) { #ifdef DINGOO_NATIVE /* ** For now do NOT plug in into settings system, current ** (Wiz) speed system is focused on multiples of 50Mhz. ** Dingoo default clock speed is 336Mhz (CPU certified for ** 360, 433MHz is supposed to be possible). ** Only set clock speed if changed in options each and ** everytime - do not use config file */ --speed; /* check menu response is withing the preset array range/size */ if (speed > (sizeof(dingoo_clock_speeds)/sizeof(uintptr_t) - 1) ) speed = 0; tempCore = dingoo_clock_speeds[speed]; dingoo_clock_change_result = cpu_clock_set(tempCore); tempCore=tempMemory=0; cpu_clock_get(&tempCore, &tempMemory); /* currently unused */ /* TODO display clock speed next to on screen FPS indicator */ #endif /* DINGOO_NATIVE */ speed = speed*50 + 200; } sprintf(config[0],"set dmg_bgp 0x%.6x 0x%.6x 0x%.6x 0x%.6x", palp->dmg_bgp[0], palp->dmg_bgp[1], palp->dmg_bgp[2], palp->dmg_bgp[3]); sprintf(config[1],"set dmg_wndp 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_wndp[0],palp->dmg_wndp[1],palp->dmg_wndp[2],palp->dmg_wndp[3]); sprintf(config[2],"set dmg_obp0 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_obp0[0],palp->dmg_obp0[1],palp->dmg_obp0[2],palp->dmg_obp0[3]); sprintf(config[3],"set dmg_obp1 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_obp1[0],palp->dmg_obp1[1],palp->dmg_obp1[2],palp->dmg_obp1[3]); sprintf(config[4],"set colorfilter %i",cfilter!=0); sprintf(config[5],"set filterdmg %i",cfilter==1); sprintf(config[6],"set upscaler %i",upscale); sprintf(config[7],"set frameskip %i",skip-1); sprintf(config[8],"set showfps %i",sfps); sprintf(config[9],"set cpuspeed %i",speed); #ifdef DINGOO_NATIVE /* FIXME Windows too..... if (DIRSEP_CHAR == '\\').... */ { char tmp_path[PATH_MAX]; char *dest, *src; dest = &tmp_path[0]; src = romdir; /* escape the path seperator (should escape other things too.) */ while(*dest = *src++) { if (*dest == DIRSEP_CHAR) { dest++; *dest = DIRSEP_CHAR; } dest++; } sprintf(config[10], "set romdir \"%s\"", tmp_path); scaler_init(0); } #else sprintf(config[10],"set romdir \"%s\"",romdir); scaler_init(0); #endif /* DINGOO_NATIVE */ for(i=0; i<11; i++) rc_command(config[i]); pal_dirty(); if (ret == 11){ /* Apply & Save */ file = fopen("ohboy.rc","w"); for(i=0; i<11; i++){ fputs(config[i],file); fputs("\n",file); } fclose(file); } break; } free(romdir); return ret; }