; ---------------------------------------------------------------------------
; prepare_itm_os_pc.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
; prepare trace-port (SWO)
  TPIU.PortSize SWV
  TPIU.PortMode NRZ

; ---------------------------------------------------------------------------
; prepare trace
  Trace.METHOD CAnalyzer
  Trace.AutoInit ON
  Trace.CLOCK 160.MHz
  Trace.TraceCLOCK 10.MHz
  CAnalyzer.AutoFocus

  GOSUB trigger_via_cti CATRIGGER

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

  ITM.DataTrace CorrelatedData
  ITM.PCSampler 1/128
 ;ITM.PCSampler OFF
  ITM.InterruptTrace ON
  ITM.CycleAccurate ON
  ITM.CLOCK 160MHz
  ITM.ON

  ETM.Trace OFF
  ETM.OFF

  GOSUB prepare_task_trace

  ENDDO

; ---------------------------------------------------------------------------
; prepare task trace
prepare_task_trace:

  TASK.ORTI ..\config\Os_FLM3.ORT

 ;Break.Set TASK.CONFIG(magic) /Write /TraceEnable
  Break.Set TASK.CONFIG(magic) /Write /TraceData

  Trace.STATistic.TASK
 ;Trace.STATistic.Func
 ;Trace.STATistic.Symbol %DEF %TimeAuto /SplitTask
 ;Trace.STATistic.TREE /TASK "OsTask_10ms"

 ;Trace.PROfileSTATistic.TASK
 ;Trace.PROfileChart.TASK

 ;Trace.List List.TASK DEFault /Track
  Trace.List List.Task List.Address DEFault Time.Ref Time.Zero /Track
 ;Trace.ListNesting /Track

  Trace.Chart.TASK /Track
 ;Trace.Chart.Func /Track

  Trace.State

  RETURN

; --------------------------------------------------------------------------------
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.

  ; Reset the trigger channel from CM4_TRCCTI to TPIU
  ; CM4_TRCCTI_CTIINTACK: acknowledge TPIU trigger
  Data.Set ESD:0xE0080010 %Long 1.<<3.

  RETURN


