CMSIS-DAP plumbing

This commit is contained in:
Triss 2021-09-20 20:26:32 +02:00
parent a539988745
commit 808b7b1a8f
5 changed files with 11 additions and 9 deletions

View File

@ -236,6 +236,7 @@ typedef struct {
uint8_t fast_clock; // Fast Clock Flag uint8_t fast_clock; // Fast Clock Flag
uint8_t padding[2]; uint8_t padding[2];
uint32_t clock_delay; // Clock Delay uint32_t clock_delay; // Clock Delay
uint32_t clock_freq; // Clock Frequency
uint32_t timestamp; // Last captured Timestamp uint32_t timestamp; // Last captured Timestamp
struct { // Transfer Configuration struct { // Transfer Configuration
uint8_t idle_cycles; // Idle cycles after transfer uint8_t idle_cycles; // Idle cycles after transfer

View File

@ -398,6 +398,7 @@ static uint32_t DAP_SWJ_Clock(const uint8_t *request, uint8_t *response) {
return ((4U << 16) | 1U); return ((4U << 16) | 1U);
} }
DAP_Data.clock_freq = clock;
if (clock >= MAX_SWJ_CLOCK(DELAY_FAST_CYCLES)) { if (clock >= MAX_SWJ_CLOCK(DELAY_FAST_CYCLES)) {
DAP_Data.fast_clock = 1U; DAP_Data.fast_clock = 1U;
DAP_Data.clock_delay = 1U; DAP_Data.clock_delay = 1U;

View File

@ -45,7 +45,7 @@ file to the MDK-ARM project under the file group Configuration.
\return number of bytes in response (lower 16 bits) \return number of bytes in response (lower 16 bits)
number of bytes in request (upper 16 bits) number of bytes in request (upper 16 bits)
*/ */
uint32_t DAP_ProcessVendorCommand(const uint8_t *request, uint8_t *response) { __WEAK uint32_t DAP_ProcessVendorCommand(const uint8_t *request, uint8_t *response) {
uint32_t num = (1U << 16) | 1U; uint32_t num = (1U << 16) | 1U;
*response++ = *request; // copy Command ID *response++ = *request; // copy Command ID

View File

@ -75,7 +75,7 @@
// tdi: pointer to TDI generated data // tdi: pointer to TDI generated data
// tdo: pointer to TDO captured data // tdo: pointer to TDO captured data
// return: none // return: none
void JTAG_Sequence (uint32_t info, const uint8_t *tdi, uint8_t *tdo) { __WEAK void JTAG_Sequence (uint32_t info, const uint8_t *tdi, uint8_t *tdo) {
uint32_t i_val; uint32_t i_val;
uint32_t o_val; uint32_t o_val;
uint32_t bit; uint32_t bit;
@ -264,7 +264,7 @@ JTAG_TransferFunction(Slow)
// JTAG Read IDCODE register // JTAG Read IDCODE register
// return: value read // return: value read
uint32_t JTAG_ReadIDCode (void) { __WEAK uint32_t JTAG_ReadIDCode (void) {
uint32_t bit; uint32_t bit;
uint32_t val; uint32_t val;
uint32_t n; uint32_t n;
@ -300,7 +300,7 @@ uint32_t JTAG_ReadIDCode (void) {
// JTAG Write ABORT register // JTAG Write ABORT register
// data: value to write // data: value to write
// return: none // return: none
void JTAG_WriteAbort (uint32_t data) { __WEAK void JTAG_WriteAbort (uint32_t data) {
uint32_t n; uint32_t n;
PIN_TMS_SET(); PIN_TMS_SET();
@ -345,7 +345,7 @@ void JTAG_WriteAbort (uint32_t data) {
// JTAG Set IR // JTAG Set IR
// ir: IR value // ir: IR value
// return: none // return: none
void JTAG_IR (uint32_t ir) { __WEAK void JTAG_IR (uint32_t ir) {
if (DAP_Data.fast_clock) { if (DAP_Data.fast_clock) {
JTAG_IR_Fast(ir); JTAG_IR_Fast(ir);
} else { } else {
@ -358,7 +358,7 @@ void JTAG_IR (uint32_t ir) {
// request: A[3:2] RnW APnDP // request: A[3:2] RnW APnDP
// data: DATA[31:0] // data: DATA[31:0]
// return: ACK[2:0] // return: ACK[2:0]
uint8_t JTAG_Transfer(uint32_t request, uint32_t *data) { __WEAK uint8_t JTAG_Transfer(uint32_t request, uint32_t *data) {
if (DAP_Data.fast_clock) { if (DAP_Data.fast_clock) {
return JTAG_TransferFast(request, data); return JTAG_TransferFast(request, data);
} else { } else {

View File

@ -62,7 +62,7 @@
// data: pointer to sequence bit data // data: pointer to sequence bit data
// return: none // return: none
#if ((DAP_SWD != 0) || (DAP_JTAG != 0)) #if ((DAP_SWD != 0) || (DAP_JTAG != 0))
void SWJ_Sequence (uint32_t count, const uint8_t *data) { __WEAK void SWJ_Sequence (uint32_t count, const uint8_t *data) {
uint32_t val; uint32_t val;
uint32_t n; uint32_t n;
@ -274,7 +274,7 @@ SWD_TransferFunction(Slow)
// request: A[3:2] RnW APnDP // request: A[3:2] RnW APnDP
// data: DATA[31:0] // data: DATA[31:0]
// return: ACK[2:0] // return: ACK[2:0]
uint8_t SWD_Transfer(uint32_t request, uint32_t *data) { __WEAK uint8_t SWD_Transfer(uint32_t request, uint32_t *data) {
if (DAP_Data.fast_clock) { if (DAP_Data.fast_clock) {
return SWD_TransferFast(request, data); return SWD_TransferFast(request, data);
} else { } else {