From 3ecf4954a0b72e9b2ba6fba3793ce53fb30d2cf8 Mon Sep 17 00:00:00 2001 From: ikari Date: Wed, 29 Feb 2012 21:54:48 +0100 Subject: [PATCH] firmware: add some FPGA sanity checks; fix led_panic behavior --- src/fpga.c | 12 ++++++++++++ src/led.c | 15 +++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/fpga.c b/src/fpga.c index f6f7cf5..da0157f 100644 --- a/src/fpga.c +++ b/src/fpga.c @@ -102,6 +102,10 @@ void fpga_pgm(uint8_t* filename) { i=0; timeout = getticks() + 100; fpga_set_prog_b(0); +if(BITBAND(PROGBREG->FIOPIN, PROGBBIT)) { + printf("PROGB is stuck high!\n"); + led_panic(); +} uart_putc('P'); fpga_set_prog_b(1); while(!fpga_get_initb()){ @@ -110,6 +114,10 @@ void fpga_pgm(uint8_t* filename) { led_panic(); } }; + if(fpga_get_done()) { + printf("DONE is stuck high!\n"); + led_panic(); + } LPC_GPIO2->FIOMASK1 = ~(BV(0)); uart_putc('p'); @@ -160,6 +168,10 @@ void fpga_rompgm() { led_panic(); } }; + if(fpga_get_done()) { + printf("DONE is stuck high!\n"); + led_panic(); + } LPC_GPIO2->FIOMASK1 = ~(BV(0)); uart_putc('p'); diff --git a/src/led.c b/src/led.c index d3da43b..9fe5aea 100644 --- a/src/led.c +++ b/src/led.c @@ -86,13 +86,16 @@ void toggle_write_led() { } void led_panic() { + led_std(); while(1) { - LPC_GPIO2->FIODIR |= BV(4) | BV(5); - LPC_GPIO1->FIODIR |= BV(23); - delay_ms(350); - LPC_GPIO2->FIODIR &= ~(BV(4) | BV(5)); - LPC_GPIO1->FIODIR &= ~BV(23); - delay_ms(350); + rdyled(1); + readled(1); + writeled(1); + delay_ms(100); + rdyled(0); + readled(0); + writeled(0); + delay_ms(100); cli_entrycheck(); } }