mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-25 01:43:47 +00:00
etm trace for nrf52840
This commit is contained in:
parent
1b658ae109
commit
19c99d3b42
hw/bsp
@ -43,6 +43,15 @@
|
|||||||
|
|
||||||
static inline void board_lpc18_pinmux(void) {
|
static inline void board_lpc18_pinmux(void) {
|
||||||
const PINMUX_GRP_T pinmuxing[] = {
|
const PINMUX_GRP_T pinmuxing[] = {
|
||||||
|
// ETM Trace
|
||||||
|
#ifdef TRACE_ETM
|
||||||
|
{ 0xF, 4, SCU_MODE_FUNC2 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
||||||
|
{ 0xF, 5, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
||||||
|
{ 0xF, 6, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
||||||
|
{ 0xF, 7, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
||||||
|
{ 0xF, 8, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
||||||
|
#endif
|
||||||
|
|
||||||
// LEDs
|
// LEDs
|
||||||
{ 0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4) },
|
{ 0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4) },
|
||||||
{ 0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
|
{ 0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN) },
|
||||||
@ -65,15 +74,6 @@ static inline void board_lpc18_pinmux(void) {
|
|||||||
|
|
||||||
{ 0x9, 5, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2 }, // P9_5 USB1_VBUS_EN, USB1 VBus function
|
{ 0x9, 5, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2 }, // P9_5 USB1_VBUS_EN, USB1 VBus function
|
||||||
{ 0x2, 5, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2 }, // P2_5 USB1_VBUS, MUST CONFIGURE THIS SIGNAL FOR USB1 NORMAL OPERATION
|
{ 0x2, 5, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2 }, // P2_5 USB1_VBUS, MUST CONFIGURE THIS SIGNAL FOR USB1 NORMAL OPERATION
|
||||||
|
|
||||||
// ETM Trace
|
|
||||||
#ifdef TRACE_ETM
|
|
||||||
{ 0xF, 4, SCU_MODE_FUNC2 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
|
||||||
{ 0xF, 5, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
|
||||||
{ 0xF, 6, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
|
||||||
{ 0xF, 7, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
|
||||||
{ 0xF, 8, SCU_MODE_FUNC3 | SCU_MODE_HIGHSPEEDSLEW_EN },
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Chip_SCU_SetPinMuxing(pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
|
Chip_SCU_SetPinMuxing(pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#define LED_STATE_ON 0
|
#define LED_STATE_ON 0
|
||||||
|
|
||||||
// Button
|
// Button
|
||||||
#define BUTTON_PIN 11
|
#define BUTTON_PIN 25 // button 4
|
||||||
#define BUTTON_STATE_ACTIVE 0
|
#define BUTTON_STATE_ACTIVE 0
|
||||||
|
|
||||||
// UART
|
// UART
|
||||||
|
242
hw/bsp/nrf/boards/pca10056/ozone/nrf52840.jdebug
Normal file
242
hw/bsp/nrf/boards/pca10056/ozone/nrf52840.jdebug
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* OnProjectLoad
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Project load routine. Required.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
void OnProjectLoad (void) {
|
||||||
|
// Dialog-generated settings
|
||||||
|
Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M4F.svd");
|
||||||
|
Project.AddSvdFile ("$(InstallDir)/Config/Peripherals/ARMv7M.svd");
|
||||||
|
|
||||||
|
Project.SetDevice ("nRF52840_xxAA");
|
||||||
|
Project.SetHostIF ("USB", "");
|
||||||
|
Project.SetTargetIF ("SWD");
|
||||||
|
Project.SetTIFSpeed ("8 MHz");
|
||||||
|
Project.SetTraceSource ("Trace Pins");
|
||||||
|
Project.SetTracePortWidth (4);
|
||||||
|
|
||||||
|
// User settings
|
||||||
|
File.Open ("../../../../../../examples/device/cdc_msc/cmake-build-pca10056/cdc_msc.elf");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* TargetReset
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Replaces the default target device reset routine. Optional.
|
||||||
|
*
|
||||||
|
* Notes
|
||||||
|
* This example demonstrates the usage when
|
||||||
|
* debugging a RAM program on a Cortex-M target device
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void TargetReset (void) {
|
||||||
|
//
|
||||||
|
// unsigned int SP;
|
||||||
|
// unsigned int PC;
|
||||||
|
// unsigned int VectorTableAddr;
|
||||||
|
//
|
||||||
|
// Exec.Reset();
|
||||||
|
//
|
||||||
|
// VectorTableAddr = Elf.GetBaseAddr();
|
||||||
|
//
|
||||||
|
// if (VectorTableAddr != 0xFFFFFFFF) {
|
||||||
|
//
|
||||||
|
// Util.Log("Resetting Program.");
|
||||||
|
//
|
||||||
|
// SP = Target.ReadU32(VectorTableAddr);
|
||||||
|
// Target.SetReg("SP", SP);
|
||||||
|
//
|
||||||
|
// PC = Target.ReadU32(VectorTableAddr + 4);
|
||||||
|
// Target.SetReg("PC", PC);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetReset
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void BeforeTargetReset (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetReset
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine.
|
||||||
|
* - Sets the PC register to program reset value.
|
||||||
|
* - Sets the SP register to program reset value on Cortex-M.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
void AfterTargetReset (void) {
|
||||||
|
unsigned int SP;
|
||||||
|
unsigned int PC;
|
||||||
|
unsigned int VectorTableAddr;
|
||||||
|
|
||||||
|
VectorTableAddr = Elf.GetBaseAddr();
|
||||||
|
|
||||||
|
if (VectorTableAddr == 0xFFFFFFFF) {
|
||||||
|
Util.Log("Project file error: failed to get program base");
|
||||||
|
} else {
|
||||||
|
SP = Target.ReadU32(VectorTableAddr);
|
||||||
|
Target.SetReg("SP", SP);
|
||||||
|
|
||||||
|
PC = Target.ReadU32(VectorTableAddr + 4);
|
||||||
|
Target.SetReg("PC", PC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* DebugStart
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Replaces the default debug session startup routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void DebugStart (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* TargetConnect
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Replaces the default target IF connection routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void TargetConnect (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetConnect
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
void BeforeTargetConnect (void) {
|
||||||
|
//
|
||||||
|
// Trace pin init is done by J-Link script file as J-Link script files are IDE independent
|
||||||
|
//
|
||||||
|
Project.SetJLinkScript("./Nordic_nRF52840_TraceExample.pex");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetConnect
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void AfterTargetConnect (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* TargetDownload
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Replaces the default program download routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void TargetDownload (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetDownload
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void BeforeTargetDownload (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetDownload
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine.
|
||||||
|
* - Sets the PC register to program reset value.
|
||||||
|
* - Sets the SP register to program reset value on Cortex-M.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
void AfterTargetDownload (void) {
|
||||||
|
unsigned int SP;
|
||||||
|
unsigned int PC;
|
||||||
|
unsigned int VectorTableAddr;
|
||||||
|
|
||||||
|
VectorTableAddr = Elf.GetBaseAddr();
|
||||||
|
|
||||||
|
if (VectorTableAddr == 0xFFFFFFFF) {
|
||||||
|
Util.Log("Project file error: failed to get program base");
|
||||||
|
} else {
|
||||||
|
SP = Target.ReadU32(VectorTableAddr);
|
||||||
|
Target.SetReg("SP", SP);
|
||||||
|
|
||||||
|
PC = Target.ReadU32(VectorTableAddr + 4);
|
||||||
|
Target.SetReg("PC", PC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetDisconnect
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void BeforeTargetDisconnect (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetDisconnect
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void AfterTargetDisconnect (void) {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetHalt
|
||||||
|
*
|
||||||
|
* Function description
|
||||||
|
* Event handler routine. Optional.
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
//void AfterTargetHalt (void) {
|
||||||
|
//}
|
@ -93,8 +93,33 @@ TU_ATTR_UNUSED static void power_event_handler(nrfx_power_usb_evt_t event)
|
|||||||
tusb_hal_nrf_power_event((uint32_t) event);
|
tusb_hal_nrf_power_event((uint32_t) event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TRACE_ETM
|
||||||
|
void trace_etm_init(void) {
|
||||||
|
#ifdef NRF52840_XXAA
|
||||||
|
// Trace clk: P0.7, Trace D0..D3: P1.0, P0.11, P0.12, P1.09
|
||||||
|
// Setting drive strength to H0H1
|
||||||
|
uint32_t const pin_cnf = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) |
|
||||||
|
(GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos);
|
||||||
|
NRF_P0->PIN_CNF[ 7] = pin_cnf; // CLK
|
||||||
|
NRF_P1->PIN_CNF[ 0] = pin_cnf; // D0
|
||||||
|
NRF_P0->PIN_CNF[11] = pin_cnf; // D1
|
||||||
|
NRF_P0->PIN_CNF[12] = pin_cnf; // D2
|
||||||
|
NRF_P1->PIN_CNF[ 9] = pin_cnf; // D3
|
||||||
|
|
||||||
|
// trace clock = 16 Mhz, Trace mux = parallel
|
||||||
|
NRF_CLOCK->TRACECONFIG = (CLOCK_TRACECONFIG_TRACEPORTSPEED_32MHz << CLOCK_TRACECONFIG_TRACEPORTSPEED_Pos) |
|
||||||
|
(CLOCK_TRACECONFIG_TRACEMUX_Parallel << CLOCK_TRACECONFIG_TRACEMUX_Pos);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define trace_etm_init()
|
||||||
|
#endif
|
||||||
|
|
||||||
void board_init(void)
|
void board_init(void)
|
||||||
{
|
{
|
||||||
|
trace_etm_init();
|
||||||
|
|
||||||
// stop LF clock just in case we jump from application without reset
|
// stop LF clock just in case we jump from application without reset
|
||||||
NRF_CLOCK->TASKS_LFCLKSTOP = 1UL;
|
NRF_CLOCK->TASKS_LFCLKSTOP = 1UL;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ void trace_etm_init(void) {
|
|||||||
DBGMCU->CR |= DBGMCU_CR_DBG_TRACECKEN | DBGMCU_CR_DBG_CKD1EN | DBGMCU_CR_DBG_CKD3EN;
|
DBGMCU->CR |= DBGMCU_CR_DBG_TRACECKEN | DBGMCU_CR_DBG_CKD1EN | DBGMCU_CR_DBG_CKD3EN;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define etm_trace_init()
|
#define trace_etm_init()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void board_init(void)
|
void board_init(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user