<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to Enable Kinetis Trace in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199553#M2845</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Both Segger and Keil said that enabling the trace pins is a low level function of the debugger/IDE.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Keil says that a debug script is added to the project and their U-link-Pro cable supports the parallel trace pins. The scripts are provided by Keil. The one described to me was named "Trace_port..." or something similar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Segger calls the trace enabling commands a Macro. It is placed at the DLL level. The Macro is executed when the debugger connects to the target. Segger said their J-Trace-Cortex 8.13.00 supports the parallel trace pins and works with either Keil or IAR tools.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 26 Sep 2012 02:38:02 GMT</pubDate>
    <dc:creator>future_boston</dc:creator>
    <dc:date>2012-09-26T02:38:02Z</dc:date>
    <item>
      <title>How to Enable Kinetis Trace</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199552#M2844</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;TRACE pins on the K20 power up to MUX function 5.&amp;nbsp; How is the part and signals set to allow trace?&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Is there a compile option in MQX to initialize these pins to MUX setting 7, or is up to the application to set them?&amp;nbsp; Some other boot option?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;These are the power up states, and MQX does not initialized them to the TRACE function, which is MUX setting = 7 (JTAG/TRACE)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On the K20DN512, 144 pin, these are:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;* Pin 58, PTA6, TRACE-CLKOUT --- documentation says default is "disabled", MUX setting 5 is undefined&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;* Pin 59, PTA7, TRACE-D3 ---- default is ADC0_SE10, MUX setting 5 is undefined&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;* Pin 60, PTA8, TRACE-D2 ---- default is ADC0_SE11, MUX setting 5 is undefined&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;* Pin 61, PTA9, TRACE-D1 ---- default is "disabled", MUX setting 5 is undefined&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;* Pin 62, PTA10, TRACE-D0 ---- default is "disabled", MUX setting 5 is undefined&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Sep 2012 16:19:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199552#M2844</guid>
      <dc:creator>future_boston</dc:creator>
      <dc:date>2012-09-24T16:19:53Z</dc:date>
    </item>
    <item>
      <title>Re: How to Enable Kinetis Trace</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199553#M2845</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Both Segger and Keil said that enabling the trace pins is a low level function of the debugger/IDE.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Keil says that a debug script is added to the project and their U-link-Pro cable supports the parallel trace pins. The scripts are provided by Keil. The one described to me was named "Trace_port..." or something similar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Segger calls the trace enabling commands a Macro. It is placed at the DLL level. The Macro is executed when the debugger connects to the target. Segger said their J-Trace-Cortex 8.13.00 supports the parallel trace pins and works with either Keil or IAR tools.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Sep 2012 02:38:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199553#M2845</guid>
      <dc:creator>future_boston</dc:creator>
      <dc:date>2012-09-26T02:38:02Z</dc:date>
    </item>
    <item>
      <title>Re: How to Enable Kinetis Trace</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199554#M2846</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We use the IAR toolchain here (IDE, J-Trace) and use this Kinetis_trace.mac file to command the Trace pins prior to debugger attempts to access:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;execUserReset() {&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__var __reset; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__reset = __readMemory32(4,"Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;#PC = __reset;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__reset = __readMemory32(0,"Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;#SP = __reset;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling internal clock to Port A ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0xFFFF,0x40048038, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling Trace Clock ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00001000,0x40048004, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling Trace Pin Function ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000740,0x40049018, "Memory"); // TraceClock, low drive strength&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000740,0x4004901C, "Memory"); // Trace data, High drive strength&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000740,0x40049020, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000740,0x40049024, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000740,0x40049028, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enable trace funtion ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x01000000,0xE000EDFC, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Unlock ETM ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0xC5ACCE55,0xE0041FB0, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__message "---- Set sync port size as 4 ----" ;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000008,0xE0040004, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000000,0xE00400F0, "Memory");&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00FFFF00,0xE0001004, "Memory"); // DWT_CYCCNT_REG = 0x00FFFF00;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000000,0xE0001000, "Memory"); // DWT_CTRL_REG = 0x00000401;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000401,0xE0001000, "Memory"); // DWT_CTRL_REG = 0x00000401;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000001,0xE0000E80, "Memory"); // ITM Trace control. Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000005,0xE0000E80, "Memory"); // ITM Trace control. Bit 2: SYNCENA, Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x0000000D,0xE0000E80, "Memory"); // ITM Trace control. Bit 2: SYNCENA, Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000400,0xE0000E90, "Memory"); // ITM Trace cycle count&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;SPAN lang="EN"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Oct 2012 17:10:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199554#M2846</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2012-10-04T17:10:40Z</dc:date>
    </item>
    <item>
      <title>Re: How to Enable Kinetis Trace</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199555#M2847</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Your mac file helped me get going with my new I-Jet Trace on a K64 100 pin part. Here's my modified version.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;execUserReset() {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__var __reset;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__reset = __readMemory32(4,"Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#PC = __reset;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__reset = __readMemory32(0,"Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#SP = __reset; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling internal clock to Port E ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0xFFFF,0x40048038, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling Trace Clock ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00001000,0x40048004, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enabling Trace Pin Function ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000540,0x4004D000, "Memory"); // TraceClock, low drive strength&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000540,0x4004D004, "Memory"); // Trace data, High drive strength&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000540,0x4004D008, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000540,0x4004D00C, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000540,0x4004D010, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Enable trace function ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x01000000,0xE000EDFC, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Unlock ETM ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0xC5ACCE55,0xE0041FB0, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__message "---- Set sync port size as 4 ----" ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000008,0xE0040004, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000000,0xE00400F0, "Memory");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00FFFF00,0xE0001004, "Memory"); // DWT_CYCCNT_REG = 0x00FFFF00;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;__writeMemory32(0x00000000,0xE0001000, "Memory"); // DWT_CTRL_REG = 0x00000401;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000401,0xE0001000, "Memory"); // DWT_CTRL_REG = 0x00000401;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000001,0xE0000E80, "Memory"); // ITM Trace control. Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000005,0xE0000E80, "Memory"); // ITM Trace control. Bit 2: SYNCENA, Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x0000000D,0xE0000E80, "Memory"); // ITM Trace control. Bit 2: SYNCENA, Bit 0: Global enable&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// __writeMemory32(0x00000400,0xE0000E90, "Memory"); // ITM Trace cycle count&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Mar 2015 19:36:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199555#M2847</guid>
      <dc:creator>williamely</dc:creator>
      <dc:date>2015-03-11T19:36:32Z</dc:date>
    </item>
    <item>
      <title>Re: How to Enable Kinetis Trace</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199556#M2848</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I thought I would add to this thread as I have just had over 4 days faff with the I-Jet Trace probe on the K64 and K24 Tower boards using IAR's Embedded Workbench 7.40.3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is what I've found:-&lt;/P&gt;&lt;P style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #51626f;"&gt;1. K64 code examples from both IAR and Freescale assign the wrong port in sysinit.c PTA6,alt7 instead of PTE0,alt5&lt;/P&gt;&lt;P style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #51626f;"&gt;2. The schematics showing port assignment for TRACECLOCKOUT are correct whilst the Tower user manual for the K64 is incorrect&lt;/P&gt;&lt;P style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #51626f;"&gt;3. The Kxx.dmac macro file supplied by IAR is has bugs for the K24 and K64 and most likely others&lt;/P&gt;&lt;P style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #51626f;"&gt;&lt;/P&gt;&lt;P&gt;This info below describes problem/solution for common debugger gotchas&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROBLEM - 1&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Warning - Skipping flash loading pass because there is no data in the&lt;/P&gt;&lt;P&gt;designated range: 0x10000000-0x13FFFFFF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Two flash ranges, 0-0x0FFF FFFF and 0x10000000-0x13FFFFFF&lt;/P&gt;&lt;P&gt;If nothing is placed in one of the ranges then there is a warning that despite being enabled the flash loader was not used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SOLUTION - 1&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In Project -&amp;gt; Options -&amp;gt; Debugger -&amp;gt; Download -&amp;gt; Check "Override default .board file" -&amp;gt; delete the line for the surplus&lt;/P&gt;&lt;P&gt;flash range to eliminate the problem, or just ignore this message.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROBLEM - 2&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;ETB trace and SWO cannot co-exist&lt;/P&gt;&lt;P&gt;ETM trace and SWO cannot co-exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If ETM or ETB trace is enabled then any SWO data (such as interrupt logging) is sent using the same data channel. IF the board actually allows ETM trace you will with some luck find the correct data being transferred after stopping, but the trace memory is limited, a few million bytes and logging on average one byte per instruction executed, so it fills in seconds.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SOLUTION - 2&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;So if you wish to use any SWO features set trace (Project -&amp;gt; Options -&amp;gt;Debugger -&amp;gt; I-jet -&amp;gt; Trace) to SWO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For Trace and SWO to work the latest unreleased Kxx.dmac file is required. This will be released in the next release of EWB (see attached)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The following settings get the SWO working on the TWR-K64F120M board:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Changes from the default:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. In Library config: Set library low level interface implementation, stdout/sterr to "via SWO"&lt;/P&gt;&lt;P&gt;2. Set debug driver to I-jet (under download enable Verify download)&lt;/P&gt;&lt;P&gt;3. In I-jet category, set Trace -&amp;gt; 'Trace Data collection' to serial (SWO), disable "Enable ETB"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I can see datalog, interrupt and others. I do not want to choke the thin data bus so I do not enable SWO trace.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note1:&lt;/P&gt;&lt;P&gt;1. Trace is not supported in hardware on K24 twr, and maybe some others&lt;/P&gt;&lt;P&gt;2. ETM and SWO can not be used at the same time&lt;/P&gt;&lt;P&gt;3. Only SWO will collect data for the timeline display&lt;/P&gt;&lt;P&gt;4. When using any live update feature it is best practice to limit the number of data eg dont have int and data loging on at the same time as there is a limited bandwidth&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note2:&lt;/P&gt;&lt;P&gt;Make sure the settings are correct,&lt;/P&gt;&lt;P&gt;1.Library config: Semihosting, via SWO&lt;/P&gt;&lt;P&gt;2.Set debugdriver to I-jet (under download I always enable Verify download)&lt;/P&gt;&lt;P&gt;3.In I-jet category, set Trace Data collection to SWO, disable "Enable ETB"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now SWO data features work fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROBLEM -3&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Trace does not work.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The K64 supports trace in hardware however TRACECLOCKOUT is routed on chip to PTE0,alt5 but the tower user manual is incorrect as it specifies PTA6, alt7&lt;/P&gt;&lt;P&gt;This is further complicated as all the example code provided by both Freescale and IAR specify PTA6,alt7 in the code examples.&amp;nbsp; This error has also propargated into the Kxx.dmac macro file&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SOLUTION&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1. Get new Kxx.dmac file from IAR&lt;/P&gt;&lt;P&gt;2. Recode sysinit() in sysinit.c to use PTE0,alt5&lt;/P&gt;&lt;P&gt;3. Make sure settings are correct. see above.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Lastly, the notes are for the IAR toolchain and probe however I think the same issues are likely to be found in other vendors kit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below are the contents of the Kxx.dmac (I don't know how to upload file so just cut n past and name it Kxx.dmac)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Trace control macro for KinetisK devices&lt;/P&gt;&lt;P&gt;// It has support for ETB (both ETM and ITM).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// All global variables are 0 when declared.&lt;/P&gt;&lt;P&gt;// All these variables are prefixed with kinetis_ ...&lt;/P&gt;&lt;P&gt;__var kinetis_etbmodeset;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set to 1 if 'kinetis_etbmode' is set&lt;/P&gt;&lt;P&gt;__var kinetis_etbmode;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Currently set Kinetis ETB mode&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;__var kinetis_calibrate;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Currenlty set calibration value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Low level write to ETB bits&lt;/P&gt;&lt;P&gt;Kinetis_EnableETB(mask) &lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var value;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var changed;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var bits;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; bits = 0x3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; changed = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = __readMemory32(0xE0043000, "Memory"); // Funnel&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((value &amp;amp; bits) != mask) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check if we need to change it&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value &amp;amp;= ~bits;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value |= mask;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeMemory32(value, 0xE0043000, "Memory");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; changed |= bits;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = __readMemory32(0xE0080014, "Memory"); // MCM_ETBCC&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((value &amp;amp; (bits &amp;lt;&amp;lt; 4)) != (mask &amp;lt;&amp;lt; 4)) { // Check if we need to change it&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value &amp;amp;= ~(bits &amp;lt;&amp;lt; 4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value |= (mask &amp;lt;&amp;lt; 4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeMemory32(value, 0xE0080014, "Memory");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; changed |= bits;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = value &amp;gt;&amp;gt; 4;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value &amp;amp;= 0x3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!kinetis_etbmodeset || value != kinetis_etbmode) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Display message, only when mode changes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This function is called before every 'go/step' and we do not want&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to see it too often.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; kinetis_etbmode = value;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; kinetis_etbmodeset = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Display message (so user can see when ETB gets enabled)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == 0x3) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Kinetis: ETB enabled (both ITM and ETM go to ETB)";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == 0x1) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Kinetis: ETB enabled (only ETM goes to ETB)";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == 0x2) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Kinetis: ETB enabled (only ITM goes to ETB)";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Kinetis: ETB not enabled";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kinetis_EnableGPIOForETM()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var value;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var enabled;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; enabled = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = __readMemory32(0x40048038, "Memory");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ReadRegister( SIM_SCGC5, &amp;amp;value);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((value &amp;amp; (1&amp;lt;&amp;lt;13)) == 0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value |= (1&amp;lt;&amp;lt;13);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enabling internal clock to Port E&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeMemory32(value, 0x40048038, "Memory");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // WriteRegister(SIM_SCGC5, value);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enabled = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value = __readMemory32(0x40048004, "Memory");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ReadRegister( SIM_SOPT2, &amp;amp;value);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((value &amp;amp; (1&amp;lt;&amp;lt;12)) == 0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value |= (1&amp;lt;&amp;lt;12);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Debug trace clock select = Core/system clock&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeMemory32(value, 0x40048004, "Memory");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // WriteRegister(SIM_SOPT2, value);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enabled = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // ---- Enabling Trace Pin Function ----&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Trace data and clock pins, high drive strength&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* TRACE CLK and TRACE D0*/;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __writeMemory32(0x00000540, 0x4004D000, "Memory");&amp;nbsp; // WriteRegister(PORTE_PCR0,&amp;nbsp; 0x00000700);&lt;/P&gt;&lt;P&gt;&amp;nbsp; __writeMemory32(0x00000540, 0x4004D010, "Memory");&amp;nbsp; // WriteRegister(PORTE_PCR4, 0x00000740);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( __getTracePortSize() &amp;gt;= 2 )&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable TRACE D1*/;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeMemory32(0x00000540, 0x4004D00C, "Memory");&amp;nbsp; // WriteRegister(PORTE_PCR3,&amp;nbsp; 0x00000740);&lt;/P&gt;&lt;P&gt;&amp;nbsp; } &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( __getTracePortSize() == 4 )&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable TRACE D2, D3*/;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __writeMemory32(0x00000540, 0x4004D008, "Memory");&amp;nbsp; // WriteRegister(PORTE_PCR2,&amp;nbsp; 0x00000740);&lt;/P&gt;&lt;P&gt;&amp;nbsp; __writeMemory32(0x00000540, 0x4004D004, "Memory");&amp;nbsp; // WriteRegister(PORTE_PCR1,&amp;nbsp; 0x00000740);&lt;/P&gt;&lt;P&gt;&amp;nbsp; } &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kinetis_DisableGPIOForETM()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; // TODO: Reverse actions above (back to defaults)?&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// This is common routine to configure trace on Kinetis&lt;/P&gt;&lt;P&gt;// Kinetis has 2 trace sources (ITM/ETM) and 3 export options (ETM/ETB/SWO).&lt;/P&gt;&lt;P&gt;// The following cases are possible:&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ETM to TPIU (with ITM)&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ETM to ETB, ITM to SWO&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ETM to TPIU, ITM to ETB&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;KinetisConfigureTrace()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var modemask;&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var etbena;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; modemask = __getTraceProperty(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get mask of selected modes&lt;/P&gt;&lt;P&gt;&amp;nbsp; etbena&amp;nbsp;&amp;nbsp; = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Mask of bits for TPIU&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (modemask &amp;amp; 0x6) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ETB (0x4) or SWO (0x2) are allowed&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (modemask &amp;amp; 0x2) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etbena = 0x1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Only ETM should go to ETB &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etbena = 0x1 | 0x2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Both ETM and ITM should go to ETB &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etbena = 0x0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Both ETM and SWO go to TPIU&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; /*Check device for ETB*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; if( __readMemory32(0xE00FF018,"Memory") &amp;amp; 0x1)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; Kinetis_EnableETB(etbena);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configure what goes to ETB&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (modemask &amp;amp; 0x10) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Is ETM enabled?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kinetis_EnableGPIOForETM();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Yes - enable GPIO for ETM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (kinetis_calibrate != 3) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set calibration (only once time)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kinetis_calibrate = 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (__probeType("JTAGJet"))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __probeCmd("trace calibrate 3");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // For Kinetis calibrate 3 works the best&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kinetis_DisableGPIOForETM();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable GPIO for ETM&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;execConfigureTraceETM()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!__driverType("ijet")) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Compatible mode (other probes)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kinetis_EnableGPIOForETM(); // Enable GPIO for ETM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; // This native (ijet) driver (extended functionality)&lt;/P&gt;&lt;P&gt;&amp;nbsp; KinetisConfigureTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Common configuration (for SWO and ETM)&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;execConfigureTraceSWO()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!__driverType("ijet")) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Compatible mode (other probes)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Nothing (as it was in original DMAC file).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; // This native (ijet) driver (extended functionality)&lt;/P&gt;&lt;P&gt;&amp;nbsp; KinetisConfigureTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Common configuration (for SWO and ETM)&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MassErase()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (__hasDAPRegs())&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __var mdm_ctrl;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Select bank 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeDPReg(0x01000000, 0x8);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (__readAPReg(0x0) &amp;amp; 0x20)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdm_ctrl = __readAPReg(0x4) | 0x1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Do mass erase&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __writeAPReg(mdm_ctrl, 0x4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Performing mass erase...";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Wait until finished&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __delay(100);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while(__readAPReg(0x4) &amp;amp; 0x1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Mass erase finished";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Mass erase is disabled";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __message "Mass erase cannot be performed";&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;getPersistentQuickLaunchMacros()&amp;nbsp;&amp;nbsp; // &amp;lt;-- Reserved name, debugger calls it to populate QuickLaunch view.&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; __message "getPersistentQuickLaunchMacros";&lt;/P&gt;&lt;P&gt;&amp;nbsp; __var macs;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; macs = "MassErase()";&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; return macs;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Jul 2015 08:36:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-Enable-Kinetis-Trace/m-p/199556#M2848</guid>
      <dc:creator>DaveTonyCook</dc:creator>
      <dc:date>2015-07-28T08:36:25Z</dc:date>
    </item>
  </channel>
</rss>

