etm trace for nrf52840
This commit is contained in:
		@@ -36,7 +36,7 @@
 | 
			
		||||
#define LED_STATE_ON          0
 | 
			
		||||
 | 
			
		||||
// Button
 | 
			
		||||
#define BUTTON_PIN            11
 | 
			
		||||
#define BUTTON_PIN            25 // button 4
 | 
			
		||||
#define BUTTON_STATE_ACTIVE   0
 | 
			
		||||
 | 
			
		||||
// 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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)
 | 
			
		||||
{
 | 
			
		||||
  trace_etm_init();
 | 
			
		||||
 | 
			
		||||
  // stop LF clock just in case we jump from application without reset
 | 
			
		||||
  NRF_CLOCK->TASKS_LFCLKSTOP = 1UL;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user