aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGareth McMullin2012-07-01 22:40:43 +1200
committerGareth McMullin2012-07-01 22:40:43 +1200
commit5dff26307861e05c765a7d245a99eed120513ca7 (patch)
treeebd3b4647536d8e3611767934f7005d0ca21ea73
parentd64cec686a8cabe4f727149356f9dbc9e8ff10fb (diff)
Add delay after reset request.
Hopefully this fixes problems observed with failing vFlashWrite.
-rw-r--r--src/cortexm.c2
-rw-r--r--src/platforms/libftdi/platform.c6
-rw-r--r--src/platforms/libftdi/platform.h1
-rw-r--r--src/platforms/native/platform.c6
-rw-r--r--src/platforms/native/platform.h1
-rw-r--r--src/platforms/stlink/platform.c6
-rw-r--r--src/platforms/stlink/platform.h1
7 files changed, 23 insertions, 0 deletions
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 <stdio.h>
#include <string.h>
#include <assert.h>
+#include <unistd.h>
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);
/* <cdcacm.c> */
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);
/* <cdcacm.c> */
void cdcacm_init(void);