code: def init(self, sys_clock, swo_clock, console):
          
          self._swo_clock = swo_clock
          
          if not self._session.probe.has_swo():
              LOG.warning("Probe %s does not support SWO", self._session.probe.unique_id)
              return
          
          self._session.target.trace_start()
          
          itm = self._session.target.get_first_child_of_type(ITM)
          tpiu = self._session.target.get_first_child_of_type(TPIU)
  
          itm.init()
          itm.enable()
          tpiu.init()
  
          if tpiu.set_swo_clock(swo_clock, sys_clock):
              LOG.info("Set SWO clock to %d", swo_clock)
          else:
              LOG.warning("Failed to set SWO clock rate")
              return
  
          self._parser = SWOParser(self._session.target.cores[self._core_number])
          self._sink = SWVEventSink(console)
          self._parser.connect(self._sink)
          
          self.start()
docs: ! @brief Configures trace graph and starts thread.
          
          This method performs all steps required to start up SWV. It first calls the target's
          trace_start() method, which allows for target-specific trace initialization. Then it
          configures the TPIU and ITM modules. A simple trace data processing graph is created that
          connects an SWVEventSink with a SWOParser. Finally, the reader thread is started.
          
          If the debug probe does not support SWO, a warning is printed but nothing else is done.
          
          @param self
          @param sys_clock
          @param swo_clock
          @param console