SWJ Frequency: Implement for cmsis-dap
This commit is contained in:
parent
1ca9f234f7
commit
13e8a262e4
|
@ -271,7 +271,6 @@ int dap_enter_debug_swd(ADIv5_DP_t *dp)
|
||||||
if (!(dap_caps & DAP_CAP_SWD))
|
if (!(dap_caps & DAP_CAP_SWD))
|
||||||
return -1;
|
return -1;
|
||||||
mode = DAP_CAP_SWD;
|
mode = DAP_CAP_SWD;
|
||||||
dap_swj_clock(2000000);
|
|
||||||
dap_transfer_configure(2, 128, 128);
|
dap_transfer_configure(2, 128, 128);
|
||||||
dap_swd_configure(0);
|
dap_swd_configure(0);
|
||||||
dap_connect(false);
|
dap_connect(false);
|
||||||
|
@ -340,7 +339,6 @@ int cmsis_dap_jtagtap_init(jtag_proc_t *jtag_proc)
|
||||||
mode = DAP_CAP_JTAG;
|
mode = DAP_CAP_JTAG;
|
||||||
dap_disconnect();
|
dap_disconnect();
|
||||||
dap_connect(true);
|
dap_connect(true);
|
||||||
dap_swj_clock(2000000);
|
|
||||||
jtag_proc->jtagtap_reset = cmsis_dap_jtagtap_reset;
|
jtag_proc->jtagtap_reset = cmsis_dap_jtagtap_reset;
|
||||||
jtag_proc->jtagtap_next = cmsis_dap_jtagtap_next;
|
jtag_proc->jtagtap_next = cmsis_dap_jtagtap_next;
|
||||||
jtag_proc->jtagtap_tms_seq = cmsis_dap_jtagtap_tms_seq;
|
jtag_proc->jtagtap_tms_seq = cmsis_dap_jtagtap_tms_seq;
|
||||||
|
|
|
@ -29,6 +29,7 @@ void dap_exit_function(void);
|
||||||
void dap_adiv5_dp_defaults(ADIv5_DP_t *dp);
|
void dap_adiv5_dp_defaults(ADIv5_DP_t *dp);
|
||||||
int cmsis_dap_jtagtap_init(jtag_proc_t *jtag_proc);
|
int cmsis_dap_jtagtap_init(jtag_proc_t *jtag_proc);
|
||||||
int dap_jtag_dp_init(ADIv5_DP_t *dp);
|
int dap_jtag_dp_init(ADIv5_DP_t *dp);
|
||||||
|
uint32_t dap_swj_clock(uint32_t clock);
|
||||||
#else
|
#else
|
||||||
int dap_init(bmp_info_t *info)
|
int dap_init(bmp_info_t *info)
|
||||||
{
|
{
|
||||||
|
@ -36,19 +37,15 @@ int dap_init(bmp_info_t *info)
|
||||||
(void)info;
|
(void)info;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int dap_enter_debug_swd(ADIv5_DP_t *dp) {(void)dp; return -1;}
|
# pragma GCC diagnostic push
|
||||||
void dap_exit_function(void) {return;};
|
# pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
void dap_adiv5_dp_defaults(ADIv5_DP_t *dp) {(void)dp; return; }
|
int dap_enter_debug_swd(ADIv5_DP_t *dp) {return -1;}
|
||||||
int cmsis_dap_jtagtap_init(jtag_proc_t *jtag_proc)
|
uint32_t dap_swj_clock(uint32_t clock) {return 0;}
|
||||||
{
|
void dap_exit_function(void) {};
|
||||||
(void)jtag_proc;
|
void dap_adiv5_dp_defaults(ADIv5_DP_t *dp) {};
|
||||||
return -1;
|
int cmsis_dap_jtagtap_init(jtag_proc_t *jtag_proc) {return -1;}
|
||||||
}
|
int dap_jtag_dp_init(ADIv5_DP_t *dp) {return -1;}
|
||||||
int dap_jtag_dp_init(ADIv5_DP_t *dp)
|
# pragma GCC diagnostic pop
|
||||||
{
|
|
||||||
(void)dp;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -203,18 +203,27 @@ void dap_disconnect(void)
|
||||||
dbg_dap_cmd(buf, sizeof(buf), 1);
|
dbg_dap_cmd(buf, sizeof(buf), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
static uint32_t swj_clock;
|
||||||
void dap_swj_clock(uint32_t clock)
|
/* Set/Get JTAG/SWD clock frequency
|
||||||
|
*
|
||||||
|
* With clock == 0, return last set value.
|
||||||
|
*/
|
||||||
|
uint32_t dap_swj_clock(uint32_t clock)
|
||||||
{
|
{
|
||||||
|
if (clock == 0)
|
||||||
|
return swj_clock;
|
||||||
uint8_t buf[5];
|
uint8_t buf[5];
|
||||||
|
|
||||||
buf[0] = ID_DAP_SWJ_CLOCK;
|
buf[0] = ID_DAP_SWJ_CLOCK;
|
||||||
buf[1] = clock & 0xff;
|
buf[1] = clock & 0xff;
|
||||||
buf[2] = (clock >> 8) & 0xff;
|
buf[2] = (clock >> 8) & 0xff;
|
||||||
buf[3] = (clock >> 16) & 0xff;
|
buf[3] = (clock >> 16) & 0xff;
|
||||||
buf[4] = (clock >> 24) & 0xff;
|
buf[4] = (clock >> 24) & 0xff;
|
||||||
dbg_dap_cmd(buf, sizeof(buf), 5);
|
dbg_dap_cmd(buf, sizeof(buf), 5);
|
||||||
|
if (buf[0])
|
||||||
|
DEBUG_WARN("dap_swj_clock failed\n");
|
||||||
|
else
|
||||||
|
swj_clock = clock;
|
||||||
|
return swj_clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -65,7 +65,6 @@ enum
|
||||||
void dap_led(int index, int state);
|
void dap_led(int index, int state);
|
||||||
void dap_connect(bool jtag);
|
void dap_connect(bool jtag);
|
||||||
void dap_disconnect(void);
|
void dap_disconnect(void);
|
||||||
void dap_swj_clock(uint32_t clock);
|
|
||||||
void dap_transfer_configure(uint8_t idle, uint16_t count, uint16_t retry);
|
void dap_transfer_configure(uint8_t idle, uint16_t count, uint16_t retry);
|
||||||
void dap_swd_configure(uint8_t cfg);
|
void dap_swd_configure(uint8_t cfg);
|
||||||
int dap_info(int info, uint8_t *data, int size);
|
int dap_info(int info, uint8_t *data, int size);
|
||||||
|
|
|
@ -328,6 +328,9 @@ void platform_max_frequency_set(uint32_t freq)
|
||||||
case BMP_TYPE_BMP:
|
case BMP_TYPE_BMP:
|
||||||
remote_max_frequency_set(freq);
|
remote_max_frequency_set(freq);
|
||||||
break;
|
break;
|
||||||
|
case BMP_TYPE_CMSIS_DAP:
|
||||||
|
dap_swj_clock(freq);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DEBUG_WARN("Setting max SWJ frequency not yet implemented\n");
|
DEBUG_WARN("Setting max SWJ frequency not yet implemented\n");
|
||||||
break;
|
break;
|
||||||
|
@ -339,6 +342,9 @@ uint32_t platform_max_frequency_get(void)
|
||||||
switch (info.bmp_type) {
|
switch (info.bmp_type) {
|
||||||
case BMP_TYPE_BMP:
|
case BMP_TYPE_BMP:
|
||||||
return remote_max_frequency_get();
|
return remote_max_frequency_get();
|
||||||
|
case BMP_TYPE_CMSIS_DAP:
|
||||||
|
return dap_swj_clock(0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DEBUG_WARN("Reading max SWJ frequency not yet implemented\n");
|
DEBUG_WARN("Reading max SWJ frequency not yet implemented\n");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -290,7 +290,6 @@ void cl_init(BMP_CL_OPTIONS_t *opt, int argc, char **argv)
|
||||||
DEBUG_WARN("Ignoring filename in reset/test mode\n");
|
DEBUG_WARN("Ignoring filename in reset/test mode\n");
|
||||||
opt->opt_flash_file = NULL;
|
opt->opt_flash_file = NULL;
|
||||||
}
|
}
|
||||||
DEBUG_WARN("opt freq %" PRIu32 "\n", opt->opt_max_swj_frequency);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void display_target(int i, target *t, void *context)
|
static void display_target(int i, target *t, void *context)
|
||||||
|
|
Loading…
Reference in New Issue