; ---------------------------------------------------------------------------
; prepare_traceclock.cmm
; ---------------------------------------------------------------------------
  PMACRO.EXPLICIT

  GLOBAL &ttype

  LOCAL &tpara
  ENTRY &tpara

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

  IF ((&tpara=="SWV")||(&tpara=="TP4"))
  (
     &ttype=&tpara
  )

  IF ("&ttype"=="SWV")
  (
    ECHO %COLOR.GREEN "TraceClock SWV"

    TPIU.PortSize SWV
    TPIU.PortMode NRZ

    GOSUB PrepareTraceClock_D16 15. 4.
  )
  ELSE IF ("&ttype"=="TP4")
  (
    ECHO %COLOR.GREEN "TraceClock TP4"

    TPIU.PortSize 4
    TPIU.PortMode Continuous

    GOSUB PrepareTracePort_TP4
    GOSUB PrepareTraceClock_D16 15. 1.
  )

  ENDDO


//; ---------------------------------------------------------------------------
//; Prepare trace clock (8-Bit divider)
//
//PrepareTraceClock_D08:
//  PRIVATE &div_nr &div_value
//  ENTRY &div_nr &div_value
//
//  ; select 8bit divider - PERI_PCLK_GR0_CLOCK_CTL
//  Data.Set EAD:0x40000C00 %Long (0<<8.)|(&div_nr<<0.)
//  ; configure 8bit divider: divide by &div_value + enablelist - PERI_PCLK_GR0_DIV_8_CTL
//  Data.Set EAD:0x40001000+(&div_nr<<2) %Long ((&div_value-1)<<8.)
//  ; enable 8bit divider - PERI_PCLK_GR0_DIV_CMD
//  Data.Set EAD:0x40000400 %Long (1<<31.)|(3<<24.)|(0xff<<16.)|(0<<8.)|(&div_nr<<0.)
//
//  RETURN


; ---------------------------------------------------------------------------
; Prepare trace clock (16-Bit divider)
PrepareTraceClock_D16:

  PRIVATE &div_nr &div_value
  ENTRY &div_nr &div_value

  ; select 16bit divider - PERI_PCLK_GR0_CLOCK_CTL
  Data.Set EAD:0x40000C00 %Long (1<<8.)|(&div_nr<<0.)

  ; configure 16bit divide: divide by &div_value + enablelist - PERI_PCLK_GR0_DIV_16_CTL
  Data.Set EAD:0x40001400+(&div_nr<<2) %Long (0<<16)|((&div_value-1)<<8.)

  ; enable 16bit divider - PERI_PCLK_GR0_DIV_CMD
  Data.Set EAD:0x40000400 %Long (1<<31.)|(3<<24.)|(0xff<<16.)|(1<<8.)|(&div_nr<<0.)

  RETURN


; ---------------------------------------------------------------------------
; Prepare trace port pins TP4 (TraceData0..4, TraceClock)
PrepareTracePort_TP4:

  ; TraceClock : 18.3
  Data.Set AD:0x40300120 %Long 0x1bXXXXXX ; HSIOM_PRT18_PORT_SEL0.IO3_SEL = 0x1b (Trace)
  Data.Set AD:0x40310944 %Long 0xXXXX6XXX ; GPIO_PRT18_CFG.DRIVE_MODE3 = 0x6 (Strong)

  ; TraceData0 : 18.4
  Data.Set AD:0x40300124 %Long 0xXXXXXX1b ; HSIOM_PRT18_PORT_SEL1.IO4_SEL = 0x1b (Trace)
  Data.Set AD:0x40310944 %Long 0xXXX6XXXX ; GPIO_PRT18_CFG.DRIVE_MODE4 = 0x6 (Strong)

  ; TraceData1 : 18.5
  Data.Set AD:0x40300124 %Long 0xXXXX1bXX ; HSIOM_PRT18_PORT_SEL1.IO5_SEL = 0x1b (Trace)
  Data.Set AD:0x40310944 %Long 0xXX6XXXXX ; GPIO_PRT18_CFG.DRIVE_MODE5 = 0x6 (Strong)

  ; TraceData2 : 18.6
  Data.Set AD:0x40300124 %Long 0xXX1bXXXX ; HSIOM_PRT18_PORT_SEL1.IO6_SEL = 0x1b (Trace)
  Data.Set AD:0x40310944 %Long 0xX6XXXXXX ; GPIO_PRT18_CFG.DRIVE_MODE6 = 0x6 (Strong)

  ; TraceData3 : 18.7
  Data.Set AD:0x40300124 %Long 0x1bXXXXXX ; HSIOM_PRT18_PORT_SEL1.IO7_SEL = 0x1b (Trace)
  Data.Set AD:0x40310944 %Long 0x6XXXXXXX ; GPIO_PRT18_CFG.DRIVE_MODE7 = 0x6 (Strong)

  RETURN