From 5dff26307861e05c765a7d245a99eed120513ca7 Mon Sep 17 00:00:00 2001 From: Gareth McMullin Date: Sun, 1 Jul 2012 22:40:43 +1200 Subject: Add delay after reset request. Hopefully this fixes problems observed with failing vFlashWrite. --- src/cortexm.c | 2 ++ src/platforms/libftdi/platform.c | 6 ++++++ src/platforms/libftdi/platform.h | 1 + src/platforms/native/platform.c | 6 ++++++ src/platforms/native/platform.h | 1 + src/platforms/stlink/platform.c | 6 ++++++ src/platforms/stlink/platform.h | 1 + 7 files changed, 23 insertions(+) diff --git a/src/cortexm.c b/src/cortexm.c index 0cab4cf..e6f2a99 100644 --- a/src/cortexm.c +++ b/src/cortexm.c @@ -526,6 +526,8 @@ cortexm_reset(struct target_s *target) while(adiv5_ap_mem_read(ap, CORTEXM_AIRCR) & (CORTEXM_AIRCR_VECTRESET | CORTEXM_AIRCR_SYSRESETREQ)); + platform_delay(2); + /* Reset DFSR flags */ adiv5_ap_mem_write(ap, CORTEXM_DFSR, CORTEXM_DFSR_RESETALL); } diff --git a/src/platforms/libftdi/platform.c b/src/platforms/libftdi/platform.c index a120228..915753b 100644 --- a/src/platforms/libftdi/platform.c +++ b/src/platforms/libftdi/platform.c @@ -24,6 +24,7 @@ #include #include #include +#include struct ftdi_context *ftdic; @@ -126,3 +127,8 @@ const char *platform_target_voltage(void) return "not supported"; } +void platform_delay(uint32_t delay) +{ + usleep(delay * 10000000); +} + diff --git a/src/platforms/libftdi/platform.h b/src/platforms/libftdi/platform.h index 325f67b..5639358 100644 --- a/src/platforms/libftdi/platform.h +++ b/src/platforms/libftdi/platform.h @@ -47,6 +47,7 @@ extern struct ftdi_context *ftdic; int platform_init(void); const char *platform_target_voltage(void); +void platform_delay(uint32_t delay); void platform_buffer_flush(void); int platform_buffer_write(const uint8_t *data, int size); diff --git a/src/platforms/native/platform.c b/src/platforms/native/platform.c index 8c6bb7a..fe47ba0 100644 --- a/src/platforms/native/platform.c +++ b/src/platforms/native/platform.c @@ -125,6 +125,12 @@ int platform_init(void) return 0; } +void platform_delay(uint32_t delay) +{ + timeout_counter = delay; + while(timeout_counter); +} + void sys_tick_handler(void) { if(running_status) diff --git a/src/platforms/native/platform.h b/src/platforms/native/platform.h index 1c97c9c..ea11be3 100644 --- a/src/platforms/native/platform.h +++ b/src/platforms/native/platform.h @@ -135,6 +135,7 @@ int platform_init(void); void morse(const char *msg, char repeat); const char *platform_target_voltage(void); int platform_hwversion(void); +void platform_delay(uint32_t delay); /* */ void cdcacm_init(void); diff --git a/src/platforms/stlink/platform.c b/src/platforms/stlink/platform.c index fbc1337..836a2e9 100644 --- a/src/platforms/stlink/platform.c +++ b/src/platforms/stlink/platform.c @@ -73,6 +73,12 @@ int platform_init(void) return 0; } +void platform_delay(uint32_t delay) +{ + timeout_counter = delay; + while(timeout_counter); +} + void sys_tick_handler(void) { if(running_status) diff --git a/src/platforms/stlink/platform.h b/src/platforms/stlink/platform.h index 311889e..fb55441 100644 --- a/src/platforms/stlink/platform.h +++ b/src/platforms/stlink/platform.h @@ -105,6 +105,7 @@ extern const char *morse_msg; int platform_init(void); void morse(const char *msg, char repeat); const char *platform_target_voltage(void); +void platform_delay(uint32_t delay); /* */ void cdcacm_init(void); -- cgit v1.2.3