; ---------------------------------------------------------------------------
; prepare_etm_onchip.cmm
; ---------------------------------------------------------------------------
  PMACRO.EXPLICIT

  ; show path and name of this script (present practice file)
  ECHO ""
  ECHO %COLOR.BLUE "### " OS.PPF() " ###"

; --------------------------------------------------------------------------------
  ;SYStem.CONFIG.CONNECTOR MIPI20T

  SYStem.MemAccess DAP
  SYStem.JtagClock CTCK 10MHz
  Trace.DISable

; ---------------------------------------------------------------------------
; prepare trace-clock
  DO "prepare_traceclock.cmm" "SWV"

; ---------------------------------------------------------------------------
; disable trace on Cortex-M0 to avoid conflicts
  InterCom M0 Trace.METHOD NONE

; ---------------------------------------------------------------------------
; disable local ITM trace
  ITM.OFF

; ---------------------------------------------------------------------------
; prepare trace
  Trace.METHOD Onchip
  Trace.AutoInit ON
  Trace.CLOCK 160.MHz

  ETM.Trace ON
  ETM.STALL OFF
  ETM.ON

; ---------------------------------------------------------------------------
; prepare trace-port (SWO)
//TPIU.PortSize SWV
//TPIU.PortMode NRZ

  GOSUB trigger_via_cti CATRIGGER

  Trace.List DEFault /Track
  Trace.ListNesting DEFault /Track
//symbol.marker.create FEXIT TerminateTask

  Trace

  ENDDO

; --------------------------------------------------------------------------------
trigger_via_cti:
  PRIVATE &trigger &ppd
  ENTRY &trigger

  &ppd=OS.PresentPracticeDirectory()

  ; Normally, trigger signals from the ETM are routed via the ATB, together
  ; with the trace data. However, this does not seem to work on this chip, so
  ; instead we route the trigger signal via the CoreSight cross trigger.

  ; CM4_CM4CTI_CTICONTROL: set GLBEN
  Data.Set AD:0xE0042000 %Long 1.<<0.
  ; CM4_CM4CTI_CTIINEN7: route ETM trigger output to CTM channel 3
  Data.Set AD:0xE004203C %Long 1.<<3.

  ; CM4_TRCCTI_CTICONTROL: set GLBEN
  Data.Set AD:0xE0080000 %Long 1.<<0.
  ; CM4_TRCCTI_CTIOUTEN3: route CTM channel 3 to TPIU trigger input
  Data.Set AD:0xE00800AC %Long 1.<<3.

  ; The Cortex-M TPIU lacks an acknowledge channel to the CTI. This means that
  ; the trigger channel never gets cleared automatically. Therefore, we clear
  ; the trigger manually each time we detect a trigger. This is somewhat
  ; fragile, but works for simple use cases.
  GLOBALON &trigger DO &ppd/../scripts/reset_tpiu_cti_trigger.cmm

  RETURN


