Ejemplo n.º 1
0
static int test_user_abort(void)
{
    char c;

    printf("Automatic boot in 2 seconds...\n");
    printf("Q/ESC: abort boot\n");
    printf("F7:    boot from serial\n");
#ifdef MINIMAC_BASE
    printf("F8:    boot from network\n");
#endif
    timer0_en_write(0);
    timer0_reload_write(0);
    timer0_load_write(identifier_frequency_read()*2);
    timer0_en_write(1);
    timer0_update_value_write(1);
    while(timer0_value_read()) {
        if(readchar_nonblock()) {
            c = readchar();
            if((c == 'Q')||(c == '\e')) {
                puts("Aborted");
                return 0;
            }
            if(c == 0x06) {
                serialboot();
                return 0;
            }
#ifdef MINIMAC_BASE
            if(c == 0x07) {
                netboot();
                return 0;
            }
#endif
        }
        timer0_update_value_write(1);
    }
Ejemplo n.º 2
0
Archivo: boot.c Proyecto: RP7/misoc
static int check_ack(void)
{
	int recognized;
	static const char str[SFL_MAGIC_LEN] = SFL_MAGIC_ACK;

	timer0_en_write(0);
	timer0_reload_write(0);
	timer0_load_write(identifier_frequency_read()/4);
	timer0_en_write(1);
	timer0_update_value_write(1);
	recognized = 0;
	while(timer0_value_read()) {
		if(uart_read_nonblock()) {
			char c;
			c = uart_read();
			if(c == str[recognized]) {
				recognized++;
				if(recognized == SFL_MAGIC_LEN)
					return 1;
			} else {
				if(c == str[0])
					recognized = 1;
				else
					recognized = 0;
			}
		}
		timer0_update_value_write(1);
	}
	return 0;
}
Ejemplo n.º 3
0
static void status_service(void)
{
	static int last_event;

	if(elapsed(&last_event, identifier_frequency_read())) {
		if(status_enabled) {
			status_print();
			printf("\r\n");
		}
	}
}
Ejemplo n.º 4
0
void encoder_service(void) {

	static int last_event;
	static int last_fps_event;
	static int frame_cnt;
	static int can_start;

	if(encoder_enabled) {
		if(elapsed(&last_event, identifier_frequency_read()/encoder_target_fps))
			can_start = 1;
		if(can_start & encoder_done()) {
				encoder_init(encoder_quality);
				encoder_start(processor_h_active, processor_v_active);
				encoder_reader_dma_length_write(processor_h_active*processor_v_active*2);
				encoder_reader_dma_shoot_write(1);
				frame_cnt++;
		}
		if(elapsed(&last_fps_event, identifier_frequency_read())) {
			encoder_fps = frame_cnt;
			frame_cnt = 0;
		}
	}
}
Ejemplo n.º 5
0
static int wait_idelays(void)
{
	int ev;

	ev = 0;
	elapsed(&ev, 1);
	while(hdmi_in1_data0_cap_dly_busy_read()
	  || hdmi_in1_data1_cap_dly_busy_read()
	  || hdmi_in1_data2_cap_dly_busy_read()) {
		if(elapsed(&ev, identifier_frequency_read() >> 6) == 0) {
			printf("dvisampler1: IDELAY busy timeout\r\n");
			return 0;
		}
	}
	return 1;
}
Ejemplo n.º 6
0
void hdmi_in1_service(void)
{
	static int last_event;

	if(hdmi_in1_connected) {
		if(!hdmi_in1_edid_hpd_notif_read()) {
			if(hdmi_in1_debug)
				printf("dvisampler1: disconnected\r\n");
			hdmi_in1_connected = 0;
			hdmi_in1_locked = 0;
			hdmi_in1_clocking_pll_reset_write(1);
			hdmi_in1_clear_framebuffers();
		} else {
			if(hdmi_in1_locked) {
				if(hdmi_in1_clocking_locked_filtered()) {
					if(elapsed(&last_event, identifier_frequency_read()/2)) {
						hdmi_in1_adjust_phase();
						if(hdmi_in1_debug)
							hdmi_in1_print_status();
					}
				} else {
					if(hdmi_in1_debug)
						printf("dvisampler1: lost PLL lock\r\n");
					hdmi_in1_locked = 0;
					hdmi_in1_clear_framebuffers();
				}
			} else {
				if(hdmi_in1_clocking_locked_filtered()) {
					if(hdmi_in1_debug)
						printf("dvisampler1: PLL locked\r\n");
					hdmi_in1_phase_startup();
					if(hdmi_in1_debug)
						hdmi_in1_print_status();
					hdmi_in1_locked = 1;
				}
			}
		}
	} else {
		if(hdmi_in1_edid_hpd_notif_read()) {
			if(hdmi_in1_debug)
				printf("dvisampler1: connected\r\n");
			hdmi_in1_connected = 1;
			hdmi_in1_clocking_pll_reset_write(0);
		}
	}
	hdmi_in1_check_overflow();
}
void dvisampler_service(void)
{
	static int last_event;

	if(dvisampler_connected) {
		if(!dvisampler_edid_hpd_notif_read()) {
			if(dvisampler_debug)
				printf("dvisampler: disconnected\n");
			dvisampler_connected = 0;
			dvisampler_locked = 0;
			dvisampler_clocking_pll_reset_write(1);
			dvisampler_clear_framebuffers();
		} else {
			if(dvisampler_locked) {
				if(dvisampler_clocking_locked_filtered()) {
					if(elapsed(&last_event, identifier_frequency_read()/2)) {
						dvisampler_adjust_phase();
						if(dvisampler_debug)
							dvisampler_print_status();
					}
				} else {
					if(dvisampler_debug)
						printf("dvisampler: lost PLL lock\n");
					dvisampler_locked = 0;
					dvisampler_clear_framebuffers();
				}
			} else {
				if(dvisampler_clocking_locked_filtered()) {
					if(dvisampler_debug)
						printf("dvisampler: PLL locked\n");
					dvisampler_phase_startup();
					if(dvisampler_debug)
						dvisampler_print_status();
					dvisampler_locked = 1;
				}
			}
		}
	} else {
		if(dvisampler_edid_hpd_notif_read()) {
			if(dvisampler_debug)
				printf("dvisampler: connected\n");
			dvisampler_connected = 1;
			dvisampler_clocking_pll_reset_write(0);
		}
	}
	dvisampler_check_overflow();
}
Ejemplo n.º 8
0
static int hdmi_in1_clocking_locked_filtered(void)
{
	static int lock_start_time;
	static int lock_status;

	if(hdmi_in1_clocking_locked_read()) {
		switch(lock_status) {
			case 0:
				elapsed(&lock_start_time, -1);
				lock_status = 1;
				break;
			case 1:
				if(elapsed(&lock_start_time, identifier_frequency_read()/4))
					lock_status = 2;
				break;
			case 2:
				return 1;
		}
	} else
		lock_status = 0;
	return 0;
}
Ejemplo n.º 9
0
unsigned int get_system_frequency(void)
{
    return identifier_frequency_read();
}