From: Spencer Oliver Date: Tue, 8 May 2012 12:51:09 +0000 (+0100) Subject: stlink: fix stlink api2 single step X-Git-Tag: v0.6.0-rc1~91 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=c102e448c3e1f58b09d9375d421087c5155e5be6 stlink: fix stlink api2 single step This makes the newer v2 api behave as per the v1 api, eg. single stepping masks all interrupts. A better long term solution is to use same behaviour as a cortex-m3 target, see CORTEX_M3_ISRMASK_AUTO. Change-Id: Iaf9f9adf225cf274faaac938050bb996582aa98f Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/621 Tested-by: jenkins --- diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c index b4944f56cd..708b24b41c 100644 --- a/src/jtag/drivers/stlink_usb.c +++ b/src/jtag/drivers/stlink_usb.c @@ -872,8 +872,13 @@ static int stlink_usb_step(void *handle) h = (struct stlink_usb_handle_s *)handle; - if (h->jtag_api == STLINK_JTAG_API_V2) - return stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_STEP|C_DEBUGEN); + if (h->jtag_api == STLINK_JTAG_API_V2) { + /* TODO: this emulates the v1 api, it should really use a similar auto mask isr + * that the cortex-m3 currently does. */ + stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_MASKINTS|C_DEBUGEN); + stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_STEP|C_MASKINTS|C_DEBUGEN); + return stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_DEBUGEN); + } stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);