static int generic_sw(unsigned int b) { char c; printf("Press the button. f to fail test, s to skip.\n"); if(CSR_GPIO_IN & b) return TEST_STATUS_FAILED; while(!(CSR_GPIO_IN & b)) { if(readchar_nonblock()) { c = readchar(); if(c == 'f') return TEST_STATUS_FAILED; if(c == 's') return TEST_STATUS_NOT_DONE; } } while((CSR_GPIO_IN & b)) { if(readchar_nonblock()) { c = readchar(); if(c == 'f') return TEST_STATUS_FAILED; if(c == 's') return TEST_STATUS_NOT_DONE; } } return TEST_STATUS_PASSED; }
static void dvidump(void) { unsigned int counter; while(1) { printf("waiting for PLL lock...\n"); while(!dvisampler0_clocking_locked_read()); printf("PLL locked\n"); calibrate_delays(); if(init_phase()) printf("Phase init OK\n"); else printf("Phase did not settle\n"); print_status(); counter = 0; while(dvisampler0_clocking_locked_read()) { counter++; if(counter == 2000000) { print_status(); adjust_phase(); counter = 0; } if(readchar_nonblock() && (readchar() == 'c')) capture_raw(); } printf("PLL unlocked\n"); } }
void rofreq() { int val; int last; int t; /* reset into debug mode, so this will always work */ tdc->DCTL = TDC_DCTL_REQ; tdc->CS = TDC_CS_RST; while(!(tdc->DCTL & TDC_DCTL_ACK)); while(!readchar_nonblock()) { t = gettemp(); printf("%d.%04d", t/16, (t%16)*625); do { tdc->FCC = TDC_FCC_ST; while(!(tdc->FCC & TDC_FCC_RDY)); val = tdc->FCR; printf(",%d", val); last = tdc->CSEL & TDC_CSEL_LAST; tdc->CSEL = TDC_CSEL_NEXT; } while(!last); printf("\n"); } tdc->DCTL = 0; tdc->CS = TDC_CS_RST; }
static int check_test_mode(void) { char c; long long int t; t = clock_get_ms(); while(clock_get_ms() < t + 1000) { if(readchar_nonblock()) { c = readchar(); if((c == 't')||(c == 'T')) return 1; } } return 0; }
void mraw() { if(!(tdc->CS & TDC_CS_RDY)) { printf("Startup calibration not done\n"); return; } tdc->EIC_IER = TDC_EIC_IER_IE0; while(1) { while(!(tdc->EIC_ISR & TDC_EIC_ISR_IE0)) { if(readchar_nonblock()) return; } printf("%d[%d]\n", tdc->RAW0, tdc->POL & 0x01); tdc->EIC_ISR = TDC_EIC_ISR_IE0; } }
static int test_user_abort() { unsigned int i; char c; puts("I: Press Q to abort boot"); for(i=0;i<4000000;i++) { if(readchar_nonblock()) { c = readchar(); if(c == 'Q') { puts("I: Aborted boot on user request"); return 0; } } } return 1; }
void diff() { int pol0, pol1; unsigned int rts0, rts1; unsigned int ts0, ts1; #ifndef CSV int diff; int rdiff; #endif if(!(tdc->CS & TDC_CS_RDY)) { printf("Startup calibration not done\n"); return; } tdc->EIC_IER = TDC_EIC_IER_IE0|TDC_EIC_IER_IE1; while(1) { while((tdc->EIC_ISR & (TDC_EIC_ISR_IE0|TDC_EIC_IER_IE1)) != (TDC_EIC_ISR_IE0|TDC_EIC_IER_IE1)) { if(readchar_nonblock()) return; } pol0 = pol1 = tdc->POL; pol0 = !!(pol0 & 0x01); pol1 = !!(pol1 & 0x02); ts0 = tdc->MESL0; ts1 = tdc->MESL1; rts0 = tdc->RAW0; rts1 = tdc->RAW1; #ifdef CSV printf("%u,%u,%u,%u,%u,%u\n", pol0, rts0, ts0, pol1, rts1, ts1); #else diff = ts0 - ts1; if(diff < 0) diff = -diff; rdiff = rts0 - rts1; if(rdiff < 0) rdiff = -rdiff; printf("0: %dps [%d/%d] 1: %dps [%d/%d] diff: %dps [%d]\n", ts0*977/1000, rts0, pol0, ts1*977/1000, rts1, pol1, diff*977/1000, rdiff); #endif if(pol0 != pol1) printf("Inconsistent polarities!\n"); tdc->EIC_ISR = TDC_EIC_ISR_IE0|TDC_EIC_ISR_IE1; } }
static int loopback(void) { unsigned int c = 0; char e; int timeout; int result = TEST_STATUS_PASSED; if(CSR_MIDI_STAT & MIDI_STAT_RX_EVT) CSR_MIDI_STAT = MIDI_STAT_RX_EVT; printf("Press 'e' to terminate the MIDI test\n"); while(1) { if(c == 256) { printf("Sending 0 ~ 255...\n"); c = 0; } CSR_MIDI_RXTX = c; while(!(CSR_MIDI_STAT & MIDI_STAT_TX_EVT)) { if(readchar_nonblock()) { e = readchar(); if(e == 'e') return result; } } CSR_MIDI_STAT = MIDI_STAT_TX_EVT; timeout = 10000; while(!(CSR_MIDI_STAT & MIDI_STAT_RX_EVT)) { if(timeout-- == 0) { printf("Test failed: RX timeout\n"); result = TEST_STATUS_FAILED; break; } } if(timeout > 0) { if(CSR_MIDI_RXTX != c) { printf("Failed: TX: %d, but RX: %d\n", c, CSR_MIDI_RXTX); result = TEST_STATUS_FAILED; } CSR_MIDI_STAT = MIDI_STAT_RX_EVT; } c++; } return result; }
int main() { #ifdef EMULATION emu_init(); #endif irq_setmask(0); irq_enable(1); uart_async_init(); banner(); brd_init(); cpustats_init(); time_init(); mem_init(); vga_init(); snd_init(); pfpu_init(); tmu_init(); renderer_init(); apipe_init(); rpipe_init(); slowout_init(); hdlcd_init(); ui_init(); shell_init(); while(1) { if(readchar_nonblock()) shell_input(readchar()); apipe_service(); rpipe_service(); #ifdef EMULATION emu_service(); #endif } return 0; }