Skip to content

Commit d97fec7

Browse files
akkakokaidegit
authored andcommitted
hslink: gpio mode swd timing optimize
1 parent 8417057 commit d97fec7

1 file changed

Lines changed: 10 additions & 27 deletions

File tree

projects/HSLink-Pro/src/DAP_config.h

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,10 @@ __STATIC_INLINE uint8_t DAP_GetProductFirmwareVersionString(char *str)
309309
#define PIN_GPIO HPM_FGPIO
310310
#define PIN_GPIOM gpiom_core0_fast
311311

312+
#define PIN_TCK_SLV IOC_PAD_PA27
312313
#define PIN_TCK IOC_PAD_PB11
313314
#define PIN_TMS IOC_PAD_PA29
315+
#define PIN_TMS_IN IOC_PAD_PA28
314316
#define PIN_TDI IOC_PAD_PB13
315317
#define PIN_TDO IOC_PAD_PB12
316318

@@ -399,12 +401,11 @@ __STATIC_INLINE void PORT_OFF(void)
399401
HPM_IOC->PAD[PIN_JTAG_TRST].PAD_CTL = IOC_PAD_PAD_CTL_PRS_SET(2);
400402
HPM_IOC->PAD[PIN_JTAG_TRST].FUNC_CTL = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(0);
401403

402-
HPM_IOC->PAD[IOC_PAD_PA27].PAD_CTL = IOC_PAD_PAD_CTL_PRS_SET(2);
403-
HPM_IOC->PAD[IOC_PAD_PA27].FUNC_CTL = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(0); // SWD SPI SCLK
404-
gpio_set_pin_input(PIN_GPIO, GPIO_GET_PORT_INDEX(IOC_PAD_PA27), GPIO_GET_PIN_INDEX(IOC_PAD_PA27));
405-
gpio_disable_pin_interrupt(PIN_GPIO, GPIO_GET_PORT_INDEX(IOC_PAD_PA27), GPIO_GET_PIN_INDEX(IOC_PAD_PA27));
406-
gpiom_set_pin_controller(HPM_GPIOM, GPIO_GET_PORT_INDEX(IOC_PAD_PA27), GPIO_GET_PIN_INDEX(IOC_PAD_PA27),
407-
PIN_GPIOM);
404+
HPM_IOC->PAD[PIN_TCK_SLV].PAD_CTL = IOC_PAD_PAD_CTL_PRS_SET(2);
405+
HPM_IOC->PAD[PIN_TCK_SLV].FUNC_CTL = IOC_PAD_FUNC_CTL_ALT_SELECT_SET(0); // SWD SPI SCLK
406+
gpio_set_pin_input(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TCK_SLV), GPIO_GET_PIN_INDEX(PIN_TCK_SLV));
407+
gpio_disable_pin_interrupt(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TCK_SLV), GPIO_GET_PIN_INDEX(PIN_TCK_SLV));
408+
gpiom_set_pin_controller(HPM_GPIOM, GPIO_GET_PORT_INDEX(PIN_TCK_SLV), GPIO_GET_PIN_INDEX(PIN_TCK_SLV), PIN_GPIOM);
408409

409410
gpio_set_pin_input(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TCK), GPIO_GET_PIN_INDEX(PIN_TCK));
410411
gpio_disable_pin_interrupt(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TCK), GPIO_GET_PIN_INDEX(PIN_TCK));
@@ -471,7 +472,6 @@ __STATIC_FORCEINLINE void PIN_SWCLK_TCK_CLR(void)
471472
*/
472473
__STATIC_FORCEINLINE uint32_t PIN_SWDIO_TMS_IN(void)
473474
{
474-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(SWDIO_DIR), GPIO_GET_PIN_INDEX(SWDIO_DIR), 0);
475475
uint32_t sta = gpio_read_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS));
476476
__asm volatile("fence io, io");
477477
return sta;
@@ -482,7 +482,6 @@ Set the SWDIO/TMS DAP hardware I/O pin to high level.
482482
*/
483483
__STATIC_FORCEINLINE void PIN_SWDIO_TMS_SET(void)
484484
{
485-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(SWDIO_DIR), GPIO_GET_PIN_INDEX(SWDIO_DIR), 1);
486485
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS), true);
487486
__asm volatile("fence io, io");
488487
}
@@ -492,7 +491,6 @@ Set the SWDIO/TMS DAP hardware I/O pin to low level.
492491
*/
493492
__STATIC_FORCEINLINE void PIN_SWDIO_TMS_CLR(void)
494493
{
495-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(SWDIO_DIR), GPIO_GET_PIN_INDEX(SWDIO_DIR), 1);
496494
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS), false);
497495
__asm volatile("fence io, io");
498496
}
@@ -502,7 +500,6 @@ __STATIC_FORCEINLINE void PIN_SWDIO_TMS_CLR(void)
502500
*/
503501
__STATIC_FORCEINLINE uint32_t PIN_SWDIO_IN(void)
504502
{
505-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(SWDIO_DIR), GPIO_GET_PIN_INDEX(SWDIO_DIR), 0);
506503
uint32_t sta = gpio_read_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS));
507504
__asm volatile("fence io, io");
508505
return sta;
@@ -513,12 +510,7 @@ __STATIC_FORCEINLINE uint32_t PIN_SWDIO_IN(void)
513510
*/
514511
__STATIC_FORCEINLINE void PIN_SWDIO_OUT(uint32_t bit)
515512
{
516-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(SWDIO_DIR), GPIO_GET_PIN_INDEX(SWDIO_DIR), 1);
517-
if (bit & 0x01) {
518-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS), true);
519-
} else {
520-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS), false);
521-
}
513+
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TMS), GPIO_GET_PIN_INDEX(PIN_TMS), bit & 0x01);
522514
__asm volatile("fence io, io");
523515
}
524516

@@ -567,12 +559,7 @@ __STATIC_FORCEINLINE uint32_t PIN_TDI_IN(void)
567559
*/
568560
__STATIC_FORCEINLINE void PIN_TDI_OUT(uint32_t bit)
569561
{
570-
571-
if (bit & 0x01) {
572-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TDI), GPIO_GET_PIN_INDEX(PIN_TDI), true);
573-
} else {
574-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TDI), GPIO_GET_PIN_INDEX(PIN_TDI), false);
575-
}
562+
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_TDI), GPIO_GET_PIN_INDEX(PIN_TDI), bit & 0x01);
576563
__asm volatile("fence io, io");
577564
}
578565

@@ -609,11 +596,7 @@ __STATIC_FORCEINLINE uint32_t PIN_nTRST_IN(void)
609596
*/
610597
__STATIC_FORCEINLINE void PIN_nTRST_OUT(uint32_t bit)
611598
{
612-
if (bit & 0x01) {
613-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_JTAG_TRST), GPIO_GET_PIN_INDEX(PIN_JTAG_TRST), true);
614-
} else {
615-
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_JTAG_TRST), GPIO_GET_PIN_INDEX(PIN_JTAG_TRST), false);
616-
}
599+
gpio_write_pin(PIN_GPIO, GPIO_GET_PORT_INDEX(PIN_JTAG_TRST), GPIO_GET_PIN_INDEX(PIN_JTAG_TRST), bit & 0x01);
617600
__asm volatile("fence io, io");
618601
}
619602

0 commit comments

Comments
 (0)