75
76
bool jtag2::resetProgram(void)
77
uchar cmd[2] = { CMND_RESET, 0x01 };
81
bool rv = doJtagCommand(cmd, 2, resp, respSize);
79
/* The JTAG ICE mkII and Dragon do not respond correctly to
80
* the CMND_RESET command while in debugWire mode. */
81
return interruptProgram()
82
&& setProgramCounter(0);
84
uchar cmd[2] = { CMND_RESET, 0x01 };
88
bool rv = doJtagCommand(cmd, 2, resp, respSize);
87
95
bool jtag2::interruptProgram(void)
140
void jtag2::parseEvents(const char *evtlist)
142
memset(nonbreaking_events, 0, sizeof nonbreaking_events);
150
{ EVT_BREAK, "break" },
151
{ EVT_DEBUG, "debug" },
152
{ EVT_ERROR_PHY_FORCE_BREAK_TIMEOUT, "error_phy_force_break_timeout" },
153
{ EVT_ERROR_PHY_MAX_BIT_LENGTH_DIFF, "error_phy_max_bit_length_diff" },
154
{ EVT_ERROR_PHY_OPT_RECEIVE_TIMEOUT, "error_phy_opt_receive_timeout" },
155
{ EVT_ERROR_PHY_OPT_RECEIVED_BREAK, "error_phy_opt_received_break" },
156
{ EVT_ERROR_PHY_RECEIVED_BREAK, "error_phy_received_break" },
157
{ EVT_ERROR_PHY_RECEIVE_TIMEOUT, "error_phy_receive_timeout" },
158
{ EVT_ERROR_PHY_RELEASE_BREAK_TIMEOUT, "error_phy_release_break_timeout" },
159
{ EVT_ERROR_PHY_SYNC_OUT_OF_RANGE, "error_phy_sync_out_of_range" },
160
{ EVT_ERROR_PHY_SYNC_TIMEOUT, "error_phy_sync_timeout" },
161
{ EVT_ERROR_PHY_SYNC_TIMEOUT_BAUD, "error_phy_sync_timeout_baud" },
162
{ EVT_ERROR_PHY_SYNC_WAIT_TIMEOUT, "error_phy_sync_wait_timeout" },
163
{ EVT_RESULT_PHY_NO_ACTIVITY, "result_phy_no_activity" },
164
{ EVT_EXT_RESET, "ext_reset" },
165
{ EVT_ICE_POWER_ERROR_STATE, "ice_power_error_state" },
166
{ EVT_ICE_POWER_OK, "ice_power_ok" },
167
{ EVT_IDR_DIRTY, "idr_dirty" },
168
{ EVT_NONE, "none" },
169
{ EVT_PDSB_BREAK, "pdsb_break" },
170
{ EVT_PDSMB_BREAK, "pdsmb_break" },
171
{ EVT_PROGRAM_BREAK, "program_break" },
173
{ EVT_TARGET_POWER_OFF, "target_power_off" },
174
{ EVT_TARGET_POWER_ON, "target_power_on" },
175
{ EVT_TARGET_SLEEP, "target_sleep" },
176
{ EVT_TARGET_WAKEUP, "target_wakeup" },
179
// parse the given comma-separated string
180
const char *cp1, *cp2;
184
while (isspace(*cp1) || *cp1 == ',')
187
while (*cp2 != '\0' && *cp2 != ',')
189
size_t l = cp2 - cp1;
192
// Now, cp1 points to the name to parse, of length l
193
for (int i = 0; i < sizeof evttable / sizeof evttable[0]; i++)
195
if (strncmp(evttable[i].name, cp1, l) == 0)
197
evtval = evttable[i].num;
203
fprintf(stderr, "Warning: event name %.*s not matched\n",
208
nonbreaking_events[evtval - EVT_BREAK] = true;
132
215
bool jtag2::jtagContinue(void)
134
217
updateBreakpoints(); // download new bp configuration