stlink: add hardware srst functions to stlink/v2

Change-Id: Ib82b6a1116b9f396f1933cc5526733334254fd62
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/579
Tested-by: jenkins
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
__archive__
Spencer Oliver 2012-04-19 15:45:06 +01:00
parent 9cc733ae31
commit 5d1cabb142
2 changed files with 32 additions and 0 deletions

View File

@ -719,6 +719,8 @@ static enum target_state stlink_usb_v2_get_status(void *handle)
if (status & S_HALT)
return TARGET_HALTED;
else if (status & S_RESET_ST)
return TARGET_RESET;
return TARGET_RUNNING;
}
@ -783,6 +785,32 @@ static int stlink_usb_reset(void *handle)
return h->databuf[0] == STLINK_DEBUG_ERR_OK ? ERROR_OK : ERROR_FAIL;
}
static int stlink_usb_assert_srst(void *handle, int srst)
{
int res;
struct stlink_usb_handle_s *h;
assert(handle != NULL);
h = (struct stlink_usb_handle_s *)handle;
if (h->jtag_api == STLINK_JTAG_API_V1)
return ERROR_COMMAND_NOTFOUND;
stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_DRIVE_NRST;
h->cmdbuf[h->cmdidx++] = srst;
res = stlink_usb_xfer(handle, h->databuf, 2);
if (res != ERROR_OK)
return res;
return h->databuf[0] == STLINK_DEBUG_ERR_OK ? ERROR_OK : ERROR_FAIL;
}
/** */
static int stlink_usb_run(void *handle)
{
@ -1223,6 +1251,8 @@ struct stlink_layout_api_s stlink_usb_layout_api = {
/** */
.reset = stlink_usb_reset,
/** */
.assert_srst = stlink_usb_assert_srst,
/** */
.run = stlink_usb_run,
/** */
.halt = stlink_usb_halt,

View File

@ -37,6 +37,8 @@ struct stlink_layout_api_s {
/** */
int (*reset) (void *fd);
/** */
int (*assert_srst) (void *fd, int srst);
/** */
int (*run) (void *fd);
/** */
int (*halt) (void *fd);