diff --git a/CMSIS-DAP/Firmware/Include/DAP.h b/CMSIS-DAP/Firmware/Include/DAP.h index 9d8f7fd..24e2462 100644 --- a/CMSIS-DAP/Firmware/Include/DAP.h +++ b/CMSIS-DAP/Firmware/Include/DAP.h @@ -236,6 +236,7 @@ typedef struct { uint8_t fast_clock; // Fast Clock Flag uint8_t padding[2]; uint32_t clock_delay; // Clock Delay + uint32_t clock_freq; // Clock Frequency uint32_t timestamp; // Last captured Timestamp struct { // Transfer Configuration uint8_t idle_cycles; // Idle cycles after transfer diff --git a/CMSIS-DAP/Firmware/Source/DAP.c b/CMSIS-DAP/Firmware/Source/DAP.c index 530236e..111a075 100644 --- a/CMSIS-DAP/Firmware/Source/DAP.c +++ b/CMSIS-DAP/Firmware/Source/DAP.c @@ -227,7 +227,7 @@ static uint32_t DAP_Connect(const uint8_t *request, uint8_t *response) { } else { port = *request; } - + switch (port) { #if (DAP_SWD != 0) case DAP_PORT_SWD: @@ -398,6 +398,7 @@ static uint32_t DAP_SWJ_Clock(const uint8_t *request, uint8_t *response) { return ((4U << 16) | 1U); } + DAP_Data.clock_freq = clock; if (clock >= MAX_SWJ_CLOCK(DELAY_FAST_CYCLES)) { DAP_Data.fast_clock = 1U; DAP_Data.clock_delay = 1U; diff --git a/CMSIS-DAP/Firmware/Source/DAP_vendor.c b/CMSIS-DAP/Firmware/Source/DAP_vendor.c index a4ae496..11af5f2 100644 --- a/CMSIS-DAP/Firmware/Source/DAP_vendor.c +++ b/CMSIS-DAP/Firmware/Source/DAP_vendor.c @@ -45,7 +45,7 @@ file to the MDK-ARM project under the file group Configuration. \return number of bytes in response (lower 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; *response++ = *request; // copy Command ID diff --git a/CMSIS-DAP/Firmware/Source/JTAG_DP.c b/CMSIS-DAP/Firmware/Source/JTAG_DP.c index 24b1f3f..5730f1b 100644 --- a/CMSIS-DAP/Firmware/Source/JTAG_DP.c +++ b/CMSIS-DAP/Firmware/Source/JTAG_DP.c @@ -75,7 +75,7 @@ // tdi: pointer to TDI generated data // tdo: pointer to TDO captured data // 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 o_val; uint32_t bit; @@ -264,7 +264,7 @@ JTAG_TransferFunction(Slow) // JTAG Read IDCODE register // return: value read -uint32_t JTAG_ReadIDCode (void) { +__WEAK uint32_t JTAG_ReadIDCode (void) { uint32_t bit; uint32_t val; uint32_t n; @@ -300,7 +300,7 @@ uint32_t JTAG_ReadIDCode (void) { // JTAG Write ABORT register // data: value to write // return: none -void JTAG_WriteAbort (uint32_t data) { +__WEAK void JTAG_WriteAbort (uint32_t data) { uint32_t n; PIN_TMS_SET(); @@ -345,7 +345,7 @@ void JTAG_WriteAbort (uint32_t data) { // JTAG Set IR // ir: IR value // return: none -void JTAG_IR (uint32_t ir) { +__WEAK void JTAG_IR (uint32_t ir) { if (DAP_Data.fast_clock) { JTAG_IR_Fast(ir); } else { @@ -358,7 +358,7 @@ void JTAG_IR (uint32_t ir) { // request: A[3:2] RnW APnDP // data: DATA[31: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) { return JTAG_TransferFast(request, data); } else { diff --git a/CMSIS-DAP/Firmware/Source/SW_DP.c b/CMSIS-DAP/Firmware/Source/SW_DP.c index 803cf42..2e9087a 100644 --- a/CMSIS-DAP/Firmware/Source/SW_DP.c +++ b/CMSIS-DAP/Firmware/Source/SW_DP.c @@ -62,7 +62,7 @@ // data: pointer to sequence bit data // return: none #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 n; @@ -274,7 +274,7 @@ SWD_TransferFunction(Slow) // request: A[3:2] RnW APnDP // data: DATA[31: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) { return SWD_TransferFast(request, data); } else {