Merge commit '7a7266a0f7e38a9359f84fe1fb34453e8b2b16ae' into sam-update
# Conflicts: # src/platforms/common/swdptap.c
This commit is contained in:
commit
9c33ce7979
@ -78,7 +78,9 @@ void platform_init(void)
|
|||||||
GPIOC_OSPEEDR |= 0xA20;
|
GPIOC_OSPEEDR |= 0xA20;
|
||||||
gpio_mode_setup(JTAG_PORT, GPIO_MODE_OUTPUT,
|
gpio_mode_setup(JTAG_PORT, GPIO_MODE_OUTPUT,
|
||||||
GPIO_PUPD_NONE,
|
GPIO_PUPD_NONE,
|
||||||
TMS_PIN | TCK_PIN | TDI_PIN);
|
TCK_PIN | TDI_PIN);
|
||||||
|
gpio_mode_setup(JTAG_PORT, GPIO_MODE_INPUT,
|
||||||
|
GPIO_PUPD_NONE, TMS_PIN);
|
||||||
|
|
||||||
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT,
|
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT,
|
||||||
GPIO_PUPD_NONE,
|
GPIO_PUPD_NONE,
|
||||||
|
@ -63,7 +63,9 @@ void platform_init(void)
|
|||||||
GPIOC_OSPEEDR |= 0xA20;
|
GPIOC_OSPEEDR |= 0xA20;
|
||||||
gpio_mode_setup(JTAG_PORT, GPIO_MODE_OUTPUT,
|
gpio_mode_setup(JTAG_PORT, GPIO_MODE_OUTPUT,
|
||||||
GPIO_PUPD_NONE,
|
GPIO_PUPD_NONE,
|
||||||
TMS_PIN | TCK_PIN | TDI_PIN);
|
TCK_PIN | TDI_PIN);
|
||||||
|
gpio_mode_setup(JTAG_PORT, GPIO_MODE_INPUT,
|
||||||
|
GPIO_PUPD_NONE, TMS_PIN);
|
||||||
|
|
||||||
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT,
|
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT,
|
||||||
GPIO_PUPD_NONE,
|
GPIO_PUPD_NONE,
|
||||||
|
@ -62,7 +62,7 @@ platform_init(void)
|
|||||||
|
|
||||||
gpio_enable_ahb_aperture();
|
gpio_enable_ahb_aperture();
|
||||||
|
|
||||||
gpio_mode_setup(TMS_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, TMS_PIN);
|
gpio_mode_setup(TMS_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, TMS_PIN);
|
||||||
gpio_mode_setup(TCK_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, TCK_PIN);
|
gpio_mode_setup(TCK_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, TCK_PIN);
|
||||||
gpio_mode_setup(TDI_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, TDI_PIN);
|
gpio_mode_setup(TDI_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, TDI_PIN);
|
||||||
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, TDO_PIN);
|
gpio_mode_setup(TDO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, TDO_PIN);
|
||||||
|
@ -113,6 +113,11 @@ void platform_init(void)
|
|||||||
gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL,
|
GPIO_CNF_OUTPUT_PUSHPULL,
|
||||||
TMS_DIR_PIN | TMS_PIN | TCK_PIN | TDI_PIN);
|
TMS_DIR_PIN | TMS_PIN | TCK_PIN | TDI_PIN);
|
||||||
|
gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
|
GPIO_CNF_OUTPUT_PUSHPULL,
|
||||||
|
TMS_DIR_PIN | TCK_PIN | TDI_PIN);
|
||||||
|
gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
|
GPIO_CNF_INPUT_FLOAT, TMS_PIN);
|
||||||
/* This needs some fixing... */
|
/* This needs some fixing... */
|
||||||
/* Toggle required to sort out line drivers... */
|
/* Toggle required to sort out line drivers... */
|
||||||
gpio_port_write(GPIOA, 0x8102);
|
gpio_port_write(GPIOA, 0x8102);
|
||||||
|
@ -108,20 +108,27 @@
|
|||||||
#define LED_IDLE_RUN LED_1
|
#define LED_IDLE_RUN LED_1
|
||||||
#define LED_ERROR LED_2
|
#define LED_ERROR LED_2
|
||||||
|
|
||||||
|
# define SWD_CR GPIO_CRL(SWDIO_PORT)
|
||||||
|
# define SWD_CR_MULT (1 << (4 << 2))
|
||||||
|
|
||||||
#define TMS_SET_MODE() do { \
|
#define TMS_SET_MODE() do { \
|
||||||
gpio_set(TMS_DIR_PORT, TMS_DIR_PIN); \
|
gpio_set(TMS_DIR_PORT, TMS_DIR_PIN); \
|
||||||
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN); \
|
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN); \
|
||||||
} while(0)
|
} while(0)
|
||||||
#define SWDIO_MODE_FLOAT() do { \
|
#define SWDIO_MODE_FLOAT() do { \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_INPUT, \
|
uint32_t cr = SWD_CR; \
|
||||||
GPIO_CNF_INPUT_FLOAT, SWDIO_PIN); \
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
gpio_clear(SWDIO_DIR_PORT, SWDIO_DIR_PIN); \
|
cr |= (0x4 * SWD_CR_MULT); \
|
||||||
|
GPIO_BRR(SWDIO_DIR_PORT) = SWDIO_DIR_PIN; \
|
||||||
|
SWD_CR = cr; \
|
||||||
} while(0)
|
} while(0)
|
||||||
#define SWDIO_MODE_DRIVE() do { \
|
#define SWDIO_MODE_DRIVE() do { \
|
||||||
gpio_set(SWDIO_DIR_PORT, SWDIO_DIR_PIN); \
|
uint32_t cr = SWD_CR; \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, SWDIO_PIN); \
|
cr |= (0x1 * SWD_CR_MULT); \
|
||||||
|
GPIO_BSRR(SWDIO_DIR_PORT) = SWDIO_DIR_PIN; \
|
||||||
|
SWD_CR = cr; \
|
||||||
} while(0)
|
} while(0)
|
||||||
#define UART_PIN_SETUP() do { \
|
#define UART_PIN_SETUP() do { \
|
||||||
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
||||||
|
@ -63,7 +63,7 @@ void platform_init(void)
|
|||||||
}
|
}
|
||||||
/* Setup GPIO ports */
|
/* Setup GPIO ports */
|
||||||
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
GPIO_CNF_INPUT_FLOAT, TMS_PIN);
|
||||||
gpio_set_mode(TCK_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
gpio_set_mode(TCK_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TCK_PIN);
|
GPIO_CNF_OUTPUT_PUSHPULL, TCK_PIN);
|
||||||
gpio_set_mode(TDI_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
gpio_set_mode(TDI_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
|
@ -71,16 +71,24 @@
|
|||||||
#define PLATFORM_HAS_TRACESWO 1
|
#define PLATFORM_HAS_TRACESWO 1
|
||||||
#define NUM_TRACE_PACKETS (128) /* This is an 8K buffer */
|
#define NUM_TRACE_PACKETS (128) /* This is an 8K buffer */
|
||||||
|
|
||||||
|
# define SWD_CR GPIO_CRH(SWDIO_PORT)
|
||||||
|
# define SWD_CR_MULT (1 << ((14 - 8) << 2))
|
||||||
|
|
||||||
#define TMS_SET_MODE() \
|
#define TMS_SET_MODE() \
|
||||||
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
||||||
#define SWDIO_MODE_FLOAT() \
|
#define SWDIO_MODE_FLOAT() do { \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_INPUT, \
|
uint32_t cr = SWD_CR; \
|
||||||
GPIO_CNF_INPUT_FLOAT, SWDIO_PIN);
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
#define SWDIO_MODE_DRIVE() \
|
cr |= (0x4 * SWD_CR_MULT); \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
SWD_CR = cr; \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, SWDIO_PIN);
|
} while(0)
|
||||||
|
#define SWDIO_MODE_DRIVE() do { \
|
||||||
|
uint32_t cr = SWD_CR; \
|
||||||
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
|
cr |= (0x1 * SWD_CR_MULT); \
|
||||||
|
SWD_CR = cr; \
|
||||||
|
} while(0)
|
||||||
#define UART_PIN_SETUP() \
|
#define UART_PIN_SETUP() \
|
||||||
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
||||||
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN);
|
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USBUSART_TX_PIN);
|
||||||
|
@ -66,3 +66,63 @@ inline uint8_t jtagtap_next(uint8_t dTMS, uint8_t dTDI)
|
|||||||
return ret != 0;
|
return ret != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void jtagtap_tms_seq(uint32_t MS, int ticks)
|
||||||
|
{
|
||||||
|
gpio_set_val(TDI_PORT, TDI_PIN, 1);
|
||||||
|
int data = MS & 1;
|
||||||
|
while(ticks) {
|
||||||
|
gpio_set_val(TMS_PORT, TMS_PIN, data);
|
||||||
|
gpio_set(TCK_PORT, TCK_PIN);
|
||||||
|
MS >>= 1;
|
||||||
|
data = MS & 1;
|
||||||
|
ticks--;
|
||||||
|
gpio_clear(TCK_PORT, TCK_PIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
jtagtap_tdi_tdo_seq(uint8_t *DO, const uint8_t final_tms, const uint8_t *DI, int ticks)
|
||||||
|
{
|
||||||
|
uint8_t index = 1;
|
||||||
|
gpio_set_val(TMS_PORT, TMS_PIN, 0);
|
||||||
|
uint8_t res = 0;
|
||||||
|
while(ticks > 1) {
|
||||||
|
gpio_set_val(TDI_PORT, TDI_PIN, *DI & index);
|
||||||
|
gpio_set(TCK_PORT, TCK_PIN);
|
||||||
|
if (gpio_get(TDO_PORT, TDO_PIN)) {
|
||||||
|
res |= index;
|
||||||
|
}
|
||||||
|
if(!(index <<= 1)) {
|
||||||
|
*DO = res;
|
||||||
|
res = 0;
|
||||||
|
index = 1;
|
||||||
|
DI++; DO++;
|
||||||
|
}
|
||||||
|
ticks--;
|
||||||
|
gpio_clear(TCK_PORT, TCK_PIN);
|
||||||
|
}
|
||||||
|
gpio_set_val(TMS_PORT, TMS_PIN, final_tms);
|
||||||
|
gpio_set_val(TDI_PORT, TDI_PIN, *DI & index);
|
||||||
|
gpio_set(TCK_PORT, TCK_PIN);
|
||||||
|
if (gpio_get(TDO_PORT, TDO_PIN)) {
|
||||||
|
res |= index;
|
||||||
|
}
|
||||||
|
*DO = res;
|
||||||
|
gpio_clear(TCK_PORT, TCK_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
jtagtap_tdi_seq(const uint8_t final_tms, const uint8_t *DI, int ticks)
|
||||||
|
{
|
||||||
|
uint8_t index = 1;
|
||||||
|
while(ticks--) {
|
||||||
|
gpio_set_val(TMS_PORT, TMS_PIN, ticks? 0 : final_tms);
|
||||||
|
gpio_set_val(TDI_PORT, TDI_PIN, *DI & index);
|
||||||
|
gpio_set(TCK_PORT, TCK_PIN);
|
||||||
|
if(!(index <<= 1)) {
|
||||||
|
index = 1;
|
||||||
|
DI++;
|
||||||
|
}
|
||||||
|
gpio_clear(TCK_PORT, TCK_PIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -57,11 +57,11 @@ void platform_init(void)
|
|||||||
data |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_OFF;
|
data |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_OFF;
|
||||||
AFIO_MAPR = data;
|
AFIO_MAPR = data;
|
||||||
/* Setup JTAG GPIO ports */
|
/* Setup JTAG GPIO ports */
|
||||||
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_10_MHZ,
|
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
GPIO_CNF_INPUT_FLOAT, TMS_PIN);
|
||||||
gpio_set_mode(TCK_PORT, GPIO_MODE_OUTPUT_10_MHZ,
|
gpio_set_mode(TCK_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TCK_PIN);
|
GPIO_CNF_OUTPUT_PUSHPULL, TCK_PIN);
|
||||||
gpio_set_mode(TDI_PORT, GPIO_MODE_OUTPUT_10_MHZ,
|
gpio_set_mode(TDI_PORT, GPIO_MODE_OUTPUT_50_MHZ,
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TDI_PIN);
|
GPIO_CNF_OUTPUT_PUSHPULL, TDI_PIN);
|
||||||
|
|
||||||
gpio_set_mode(TDO_PORT, GPIO_MODE_INPUT,
|
gpio_set_mode(TDO_PORT, GPIO_MODE_INPUT,
|
||||||
|
@ -58,16 +58,24 @@
|
|||||||
#define LED_PORT_UART GPIOC
|
#define LED_PORT_UART GPIOC
|
||||||
#define LED_UART GPIO14
|
#define LED_UART GPIO14
|
||||||
|
|
||||||
|
# define SWD_CR GPIO_CRH(SWDIO_PORT)
|
||||||
|
# define SWD_CR_MULT (1 << ((13 - 8) << 2))
|
||||||
|
|
||||||
#define TMS_SET_MODE() \
|
#define TMS_SET_MODE() \
|
||||||
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
gpio_set_mode(TMS_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN);
|
||||||
#define SWDIO_MODE_FLOAT() \
|
#define SWDIO_MODE_FLOAT() do { \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_INPUT, \
|
uint32_t cr = SWD_CR; \
|
||||||
GPIO_CNF_INPUT_FLOAT, SWDIO_PIN);
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
#define SWDIO_MODE_DRIVE() \
|
cr |= (0x4 * SWD_CR_MULT); \
|
||||||
gpio_set_mode(SWDIO_PORT, GPIO_MODE_OUTPUT_50_MHZ, \
|
SWD_CR = cr; \
|
||||||
GPIO_CNF_OUTPUT_PUSHPULL, SWDIO_PIN);
|
} while(0)
|
||||||
|
#define SWDIO_MODE_DRIVE() do { \
|
||||||
|
uint32_t cr = SWD_CR; \
|
||||||
|
cr &= ~(0xf * SWD_CR_MULT); \
|
||||||
|
cr |= (0x1 * SWD_CR_MULT); \
|
||||||
|
SWD_CR = cr; \
|
||||||
|
} while(0)
|
||||||
#define UART_PIN_SETUP() do { \
|
#define UART_PIN_SETUP() do { \
|
||||||
AFIO_MAPR |= AFIO_MAPR_USART1_REMAP; \
|
AFIO_MAPR |= AFIO_MAPR_USART1_REMAP; \
|
||||||
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
gpio_set_mode(USBUSART_PORT, GPIO_MODE_OUTPUT_2_MHZ, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user