Beispiel #1
0
void lcdInit(void) {
	SETUPgout(LCD_BL_EN);
	SETUPgout(LCD_RESET);
	SETUPgout(LCD_CS);

	/* prepare SPI */
	SETUPpin(LCD_MOSI);
	SETUPpin(LCD_SCK);

	// Reset the display
    OFF(LCD_RESET);
    delayms(100); /* 1 ms */
    ON(LCD_RESET);
    delayms(100); /* 5 ms */

    lcd_select();

	static uint8_t initseq_d[] = {
		/* The controller is a PCF8833 -
		   documentation can be found online.
		 */
		0x11,              // SLEEP_OUT  (wake up)
		0x3A, 2,           // mode 8bpp  (2= 8bpp, 3= 12bpp, 5= 16bpp)
		0x36, 0b11000000,  // my,mx,v,lao,rgb,x,x,x
		0x25, 0x3a,        // set contrast
		0x29,              // display on 
		0x03,              // BSTRON (booster voltage)
		0x2A, 1, RESX,
		0x2B, 1, RESY
	};
	uint16_t initseq_c = ~  (  /* commands: 1, data: 0 */
			(1<< 0) |
			(1<< 1) | (0<< 2) |
			(1<< 3) | (0<< 4) |
			(1<< 5) | (0<< 6) |
			(1<< 7) |
			(1<< 8) |
			(1<< 9) | (0<<10) | (0<<11) |
			(1<<12) | (0<<13) | (0<<14) |
			0);
	int i = 0;

	lcdWrite(0, 0x01); /* most color displays need the pause */
	delayms(10);

	while(i<sizeof(initseq_d)){
		lcdWrite(initseq_c&1, initseq_d[i++]);
		initseq_c = initseq_c >> 1;
	}
    lcd_deselect();
	lcdFill(0xff); /* Clear display buffer */
	setSystemFont();
}
Beispiel #2
0
//# MENU led
void led_menu(){
	getInputWaitRelease();

	uint8_t leds=0;
	uint8_t adc=0;
	while(1){
		lcdClear();
		lcdPrintln("LED:");
		lcdPrintln("");
		lcdPrintln("U Toggle LEDs");
		lcdPrintln("D Toggle ADC");
		lcdPrintln("");
		lcdDisplay();
		switch(getInput()){
			case BTN_UP:
				adc=0;
				leds=1-leds;
				SETUPgout(LED4);
				if(leds){
					ON(LED1);
					ON(LED2);
					ON(LED3);
					ON(LED4);
				}else{
					OFF(LED1);
					OFF(LED2);
					OFF(LED3);
					OFF(LED4);
				};
				break;
			case BTN_DOWN:
				adc=1;
				SETUPadc(LED4);
				break;
			case BTN_ENTER:
				SETUPgout(LED1);
				SETUPgout(LED2);
				SETUPgout(LED3);
				SETUPgout(LED4);
				return;
		};
		if(adc){
			lcdPrint("LED4: ");
			lcdPrint(IntToStr(adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023,4,F_LONG));
			lcdNl();
			lcdDisplay();
		};
		getInputWaitRelease();
	};
};
Beispiel #3
0
//# 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);
};
Beispiel #4
0
void assert_die(void) {
    SETUPgout(LED4);
    while(1) {
        TOGGLE(LED4);
        delay(3000000);
    };
};
Beispiel #5
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);
};
Beispiel #6
0
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;
}
Beispiel #7
0
int main(void) {
	cpuClockInit(); /* CPU Clock is now 104 MHz */
	ssp_clock_init();
	systickInit();

//	cpu_clock_set(204);

	SETUPgout(EN_VDD);
	SETUPgout(MIXER_EN);
	SETUPgout(MIC_AMP_DIS);

	SETUPgout(LED1);
	SETUPgout(LED2);
	SETUPgout(LED3);
	SETUPgout(LED4);

	inputInit();
	lcdInit();
	fsInit(); 
	lcdFill(0xff);
	readConfig();

	generated_init();

	while(1) {
        handleMenu(&menu_main);
        getInputWaitRelease();
	}
	return 0;
}
Beispiel #8
0
int main(uint32_t startloc) {
	cpu_clock_init();
	ssp_clock_init();
	systickInit();

//	cpu_clock_set(204);

	SETUPgout(EN_VDD);
	SETUPgout(MIXER_EN);
	SETUPgout(MIC_AMP_DIS);

	SETUPgout(LED1);
	SETUPgout(LED2);
	SETUPgout(LED3);
	SETUPgout(LED4);
	inputInit();
	flashInit();

	lcdInit();
	fsInit();
	lcdFill(0xff); /* Display BL Image here */

	sli=startloc;

	if (startloc != (uintptr_t)&_app_start){ /* not booted via DFU, do autoboot */ 
        char filename[FLEN];
        switch(getInputRaw()){
            case BTN_LEFT:
                getInputWaitRelease();
                doRealExec(1);
                break;
            case BTN_UP:
                doMSC();
            default:
            case BTN_NONE:
                readTextFile(BOOTCFG, filename, FLEN);
                lcdPrintln("Booting:");
                lcdPrintln(filename);
                bootFile(filename);
                break;
		};
	};
	static const struct MENU main={ "Bootloader", {
		{ "Exec Firmware", &doExec},
		{ "MSC", &doMSC},
		{ "Flash Boot Ldr", &doFlash},
		{ "Info", &doInfo},
		{NULL,NULL}
	}};
	do {
		handleMenu(&main);
	}while(1);
}
Beispiel #9
0
//# 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;
};
Beispiel #10
0
int main(uint32_t startloc) {
	cpu_clock_init();
	ssp_clock_init();
	systick_set_reload(208000);
	systick_set_clocksource(0);
	systick_interrupt_enable();
	systick_counter_enable();

//	cpu_clock_pll1_max_speed();

	SETUPgout(EN_VDD);
	SETUPgout(MIXER_EN);

	SETUPgout(LED1);
	SETUPgout(LED2);
	SETUPgout(LED3);
	SETUPgout(LED4);
	inputInit();
	flashInit();

    lcdInit();
	fsInit();
    lcdFill(0xff); /* Display BL Image here */

	sli=startloc;

	if (startloc != (uintptr_t)&_app_start){ /* not booted via DFU, do autoboot */ 
		if (getInputRaw()!=BTN_LEFT){
			char filename[FLEN];
			readTextFile(BOOTCFG, filename, FLEN);
			lcdPrintln("Fname");
			lcdPrintln(filename);
			bootFile(filename,0);
		};
	};
	static const struct MENU main={ "Bootloader", {
		{ "Info", &doInfo},
		{ "Exec", &doExec},
		{ "Flash", &doFlash},
		{NULL,NULL}
	}};
	handleMenu(&main);
	return 0;
}
Beispiel #11
0
int main(void) {
	cpu_clock_init_();
	ssp_clock_init();

	systickInit();

//	cpu_clock_pll1_max_speed();

	SETUPgout(EN_VDD);
	SETUPgout(MIXER_EN);

	SETUPgout(LED1);
	SETUPgout(LED2);
	SETUPgout(LED3);
	SETUPgout(LED4);

	inputInit();
	feldInit();

    lcdInit();
	fsInit(); 
    lcdFill(0xff);

	static const struct MENU main={ "main 1", {
		{ "FS", &doFS},
		{ "MSC", &doMSC},
		{ "flash", &doFlash},
		{ "LCD", &doLCD},
		{ "speed", &doSpeed},
		{ "ADC", &doADC},
		{ "feld", &doFeld},
		{ "chrg", &doChrg},
		{NULL,NULL}
	}};
	handleMenu(&main);
	return 0;
}
Beispiel #12
0
void doChrg(){
SETUPgin(BC_DONE);
SETUPgout(BC_CEN);
SETUPgout(BC_PEN2);
SETUPgout(BC_USUS);
SETUPgout(BC_THMEN);
SETUPgin(BC_IND);
SETUPgin(BC_OT);
SETUPgin(BC_DOK);
SETUPgin(BC_UOK);
SETUPgin(BC_FLT);

#define GETg(x...) gpio_get(_GPIO(x))

char ct=0;
	int32_t vBat=0;
	int32_t vIn=0;

	while(1){
		lcdClear(0xff);
		lcdPrintln("Charger-Test v1");
		lcdPrintln("");

		lcdPrint("BC_DONE ~");lcdPrint(IntToStr(GETg(BC_DONE),1,F_HEX));lcdNl();
		lcdPrint("BC_IND  ~");lcdPrint(IntToStr(GETg(BC_IND ),1,F_HEX));lcdNl();
		lcdPrint("BC_OT   ~");lcdPrint(IntToStr(GETg(BC_OT  ),1,F_HEX));lcdNl();
		lcdPrint("BC_DOK  ~");lcdPrint(IntToStr(GETg(BC_DOK ),1,F_HEX));lcdNl();
		lcdPrint("BC_UOK  ~");lcdPrint(IntToStr(GETg(BC_UOK ),1,F_HEX));lcdNl();
		lcdPrint("BC_FLT  ~");lcdPrint(IntToStr(GETg(BC_FLT ),1,F_HEX));lcdNl();
		lcdNl();

		lcdPrint("U BC_CEN   ~");lcdPrint(IntToStr(GETg(BC_CEN  ),1,F_HEX));lcdNl();
		lcdPrint("D BC_PEN2  ");lcdPrint(IntToStr(GETg(BC_PEN2 ),1,F_HEX));lcdNl();
		lcdPrint("L BC_USUS  ~");lcdPrint(IntToStr(GETg(BC_USUS ),1,F_HEX));lcdNl();
		lcdPrint("R BC_THMEN ");lcdPrint(IntToStr(GETg(BC_THMEN),1,F_HEX));lcdNl();
		lcdNl();
		vBat=adc_get_single(ADC0,ADC_CR_CH3)*2*330/1023;
		vIn=adc_get_single(ADC0,ADC_CR_CH4)*2*330/1023;
		lcdPrint("vBat: "); lcdPrint(IntToStr(vBat,4,F_ZEROS));lcdNl();
		lcdPrint("vIn:  "); lcdPrint(IntToStr(vIn ,4,F_ZEROS));lcdNl();
		lcdDisplay(); 
		switch(getInput()){
			case BTN_UP:
				TOGGLE(BC_CEN);
				break;
			case BTN_DOWN:
				TOGGLE(BC_PEN2);
				break;
			case BTN_LEFT:
				TOGGLE(BC_USUS);
				break;
			case BTN_RIGHT:
				TOGGLE(BC_THMEN);
				break;
			case BTN_ENTER:
				return;
				break;
		};
	};
	return;
};
Beispiel #13
0
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;
		};
	};
};
Beispiel #14
0
//# MENU feldtest
void feld_menu(){
	getInputWaitRelease();

	SETUPgout(BY_AMP);
	SETUPgout(BY_AMP_N);
	SETUPgout(TX_RX);
	SETUPgout(TX_RX_N);
	SETUPgout(BY_MIX);
	SETUPgout(BY_MIX_N);
	SETUPgout(LOW_HIGH_FILT);
	SETUPgout(LOW_HIGH_FILT_N);
	SETUPgout(TX_AMP);
	SETUPgout(RX_LNA);
	SETUPgout(CE_VCO);
	SETUPgout(MIXER_EN);

	char tu=0,td=0,tl=0,tr=0;
	char tuN=0,tdN=0,tlN=0,trN=0;
	char page=0;
	char tu2=0,td2=0,td2N=0,tl2=0,tr2=0;
	uint16_t sf=3500;
	char tu3=0,td3=0,tl3=0,tr3=0;

	int ctr=0;
	while (1) {
		lcdClear(0xff);
		lcdPrintln("Feld-Test v12");
		lcdPrintln("");
		lcdPrint("Page ");lcdPrintln(IntToStr(page,2,0));
		if (page==0){
			tu=GET(BY_MIX); tuN=GET(BY_MIX_N);
			lcdPrint(IntToStr(tu,1,F_HEX)); lcdPrint(IntToStr(tuN,1,F_HEX)); lcdPrintln(" Up BY_MIX/_N");
			td=GET(BY_AMP); tdN=GET(BY_AMP_N);
			lcdPrint(IntToStr(td,1,F_HEX)); lcdPrint(IntToStr(tdN,1,F_HEX)); lcdPrintln(" Dn BY_AMP/_N");
			tl=GET(TX_RX);tlN=GET(TX_RX_N);
			lcdPrint(IntToStr(tl,1,F_HEX)); lcdPrint(IntToStr(tlN,1,F_HEX)); lcdPrintln(" Lt TX_RX/_N");
			tr=GET(LOW_HIGH_FILT); trN=GET(LOW_HIGH_FILT_N);
			lcdPrint(IntToStr(tr,1,F_HEX)); lcdPrint(IntToStr(trN,1,F_HEX)); lcdPrintln(" Rt LOW_HIGH_FILT/_N");
			lcdPrintln("Enter for next page");
			lcdDisplay(); 
			switch(getInput()){
				case BTN_UP:
					tu=1-tu;
					if (tu){
						OFF(BY_MIX_N);
						ON(BY_MIX);
					}else{
						OFF(BY_MIX);
						ON(BY_MIX_N);
					};
					break;
				case BTN_DOWN:
					td=1-td;
					if (td){
						OFF(BY_AMP_N);
						ON(BY_AMP);
					}else{
						OFF(BY_AMP);
						ON(BY_AMP_N);
					};
					break;
				case BTN_LEFT:
					tl=1-tl;
					if (tl){
						OFF(TX_RX_N);
						ON(TX_RX);
					}else{
						OFF(TX_RX);
						ON(TX_RX_N);
					};
					break;
				case BTN_RIGHT:
					tr=1-tr;
					if (tr){
						OFF(LOW_HIGH_FILT_N);
						ON(LOW_HIGH_FILT);
					}else{
						OFF(LOW_HIGH_FILT);
						ON(LOW_HIGH_FILT_N);
					};
					break;
				case BTN_ENTER:
					page++;
					break;
			};
		}else if (page==1){
			lcdPrint("  "); lcdPrintln(" Up   ");
			td2=GET(RX_LNA);td2N=GET(TX_AMP);
			lcdPrint(IntToStr(td2,1,F_HEX)); lcdPrint(IntToStr(td2N,1,F_HEX)); lcdPrintln(" Dn RX/TX");
			lcdPrint(IntToStr(tl2,1,F_HEX)); lcdPrint(" ");                    lcdPrintln(" Lt MIXER_EN");
			lcdPrint(IntToStr(tr2,1,F_HEX)); lcdPrint(" ");
			if(tr2){
				lcdPrintln(" Rt SI-clk_dis");
			}else{
				lcdPrintln(" Rt SI-clk_en");
			};
			lcdPrintln("Enter for next page");
			lcdDisplay(); 
			switch(getInput()){
				case BTN_UP:
					tu2=1-tu2;
					if (tu2){
						;
					}else{
						;
					};
					break;
				case BTN_DOWN:
					td2=td2+2*td2N;
					td2++;
					td2=td2%3;
					switch (td2){
						case(0):
							OFF(RX_LNA);
							OFF(TX_AMP);
							break;
						case(1):
							ON(RX_LNA);
							OFF(TX_AMP);
							break;
						case(2):
							OFF(RX_LNA);
							ON(TX_AMP);
							break;
					};
					break;
				case BTN_LEFT:
					tl2=1-tl2;
					if (tl2){
						ON(MIXER_EN);
					}else{
						OFF(MIXER_EN);
					};
					break;
				case BTN_RIGHT:
					tr2=1-tr2;
					if (tr2){
						si5351c_power_down_all_clocks();
					}else{
						si5351c_set_clock_source(PLL_SOURCE_XTAL);
					};
					break;
				case BTN_ENTER:
					page++;
					break;
			};

		}else if (page==2){
			lcdPrint("SF: ");lcdPrint(IntToStr(sf,4,F_LONG)); lcdPrintln(" MHz");
			tl3=GET(CE_VCO);
			lcdPrint(IntToStr(tl3,1,F_HEX)); lcdPrint(" "); lcdPrintln(" Lt CE_VCO");
			lcdPrint("  "); lcdPrintln(" Rt ");
			lcdPrintln("Enter for next page");
			lcdDisplay(); 
			switch(getInput()){
				case BTN_UP:
					sf+=100;
					mixer_set_frequency(sf);
					break;
				case BTN_DOWN:
					sf-=100;
					mixer_set_frequency(sf);
					break;
				case BTN_LEFT:
					tl3=1-tl3;
					if (tl3){
						ON(CE_VCO);
						mixer_setup();
						mixer_set_frequency(sf);
					}else{
						OFF(CE_VCO);
					};
					break;
				case BTN_RIGHT:
					tr3=1-tr3;
					if (tr3){
						;
					}else{
						;
					};
					break;
				case BTN_ENTER:
					page++;
					break;
			};

		};
		if (page>2){page=0;}

		ON(LED1);
		delay(200000);
		OFF(LED1);
		delay(200000);

//		ctr++; lcdNl(); lcdPrint(IntToStr(ctr,4,F_HEX)); lcdDisplay();
	}
};