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

  TPIU.PortSize SWV
  TPIU.PortMode Continuous

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

//  GOSUB trigger_via_cti CATRIGGER

; ---------------------------------------------------------------------------
;
  InterCom M0 Trace.METHOD NONE

  ITM.DataTrace CorrelatedData
  ITM.ON

//  ETM.Trace ON
//  ETM.ON
//  ETM.STALL ON  //dtg hopefully temporary !!!

//  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 DEFault /SplitTask
  Trace.STATistic.Symbol DEFault /MergeTASK
  Trace.STATistic.TREE /TASK "OsTask_10ms"

  Trace.STATistic.AddressDIStance BswM_MainFunction
  Trace.STATistic.AddressDURation TASK_OsConf_OsTask_OsTask_BswTiming_0 TASK_OsConf_OsTask_OsTask_BswTiming_0\82+0x4
 ;Trace.FindAll Address TASK_OsConf_OsTask_OsTask_BswTiming_0\82+0x4 TIme.AddressBack TASK_OsConf_OsTask_OsTask_BswTiming_0 800.us--900.us

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

 ;Trace.List List.TASK DEFault /Track

  Trace.List List.Task List.SYMBOL DEFault Time.Zero Time.Ref /Track
  Trace.ListNesting DEFault TIme.REF TIme.FUNC /Track

  List.Mix /Track

  Trace.Chart.TASK /TimeREF /Track
  Trace.Chart.sYmbol /TimeREF /SplitTASK /Sort Window


  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.
  GLOBALON &trigger DO &ppd/../scripts/reset_tpiu_cti_trigger.cmm

  RETURN


