<?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 FTM DMA output jitter (ESC Dshot) in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM-DMA-output-jitter-ESC-Dshot/m-p/908891#M53297</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm trying to get RC ESC DSHOT protocol to work on a MK12DX256.&amp;nbsp; I'm usinf the FTM to trigger 3 DMA channels.&amp;nbsp; The first transition is triggered from the FTM output pin, the second (if it is a zero then the signal goes low early) by FTM0 ch 0, the second by ch 1 (if it's a one it is later).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm seeing two issues, firstly it looks to miss the first bit completely in terms of the line switching low, it goes high and stays high.&amp;nbsp; Secondly the rest of the data has jitter on the leading edges.&amp;nbsp; There isn't a lot else going on with the MCU so I wouldn't expect this much jitter considering it is DMA driven.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;dshot_init() sets up the DMA and FTM.&amp;nbsp; When you want to send the data you call send_shot().&amp;nbsp; There are other routines that populate dshot_data array that says if the bit is a one or a zero.&amp;nbsp; The mask determines what pins on the port are sending data, in this case it is set to 0xFF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm seeing the frequency bounce between 301.9kHz and 296.3kHz.&amp;nbsp; If I change the code to use three FTM channels to control the transitions it doesn't miss the first one but still has jitter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;dshot_init()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;ch[0].chnlNumber = 0;&lt;BR /&gt; ch[0].level = kFTM_HighTrue;&lt;BR /&gt; ch[0].dutyCyclePercent = 37;&lt;BR /&gt; ch[0].firstEdgeDelayPercent = 0;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; ch[1].chnlNumber = 1;&lt;BR /&gt; ch[1].level = kFTM_HighTrue;&lt;BR /&gt; ch[1].dutyCyclePercent = 74;&lt;BR /&gt; ch[1].firstEdgeDelayPercent = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FTM_GetDefaultConfig(&amp;amp;ftm_config);&lt;BR /&gt; ftm_config.prescale = kFTM_Prescale_Divide_1;&lt;/P&gt;&lt;P&gt;FTM_Init(FTM0, &amp;amp;ftm_config);&lt;BR /&gt; FTM_EnableInterrupts(FTM0, 7);&lt;/P&gt;&lt;P&gt;PORT_SetPinInterruptConfig(PORTC, 1, kPORT_DMARisingEdge);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DMAMUX_Init(DMAMUX);&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 0, kDmaRequestMux0PortC); //kDmaRequestMux0FTM0Channel0); //&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 1, kDmaRequestMux0FTM0Channel0);&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 2, kDmaRequestMux0FTM0Channel1);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(DMAMUX, 0);&lt;BR /&gt; DMAMUX_EnableChannel(DMAMUX, 1);&lt;BR /&gt; DMAMUX_EnableChannel(DMAMUX, 2);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;edma_config_t edma_config;&lt;/P&gt;&lt;P&gt;EDMA_GetDefaultConfig(&amp;amp;edma_config);&lt;BR /&gt; edma_config.enableDebugMode = false;&lt;BR /&gt; edma_config.enableRoundRobinArbitration = false;&lt;BR /&gt; EDMA_Init(DMA0, &amp;amp;edma_config);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[0], DMA0, 0);&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[1], DMA0, 1);&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[2], DMA0, 2);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[0].srcAddr = (uint32_t)&amp;amp;dshot_mask;&lt;BR /&gt; ds[0].srcOffset = 0;&lt;BR /&gt; ds[0].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PSOR;&lt;BR /&gt; ds[0].destOffset = 0;&lt;BR /&gt; ds[0].minorLoopBytes = 1;&lt;BR /&gt; ds[0].majorLoopCounts = 16;&lt;BR /&gt; ds[0].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[0].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[1].srcAddr = (uint32_t)&amp;amp;dshot_data[0];&lt;BR /&gt; ds[1].srcOffset = 1;&lt;BR /&gt; ds[1].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PCOR;&lt;BR /&gt; ds[1].destOffset = 0;&lt;BR /&gt; ds[1].minorLoopBytes = 1;&lt;BR /&gt; ds[1].majorLoopCounts = 16;&lt;BR /&gt; ds[1].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[1].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[2].srcAddr = (uint32_t)&amp;amp;dshot_mask;&lt;BR /&gt; ds[2].srcOffset = 0;&lt;BR /&gt; ds[2].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PCOR;&lt;BR /&gt; ds[2].destOffset = 0;&lt;BR /&gt; ds[2].minorLoopBytes = 1;&lt;BR /&gt; ds[2].majorLoopCounts = 16;&lt;BR /&gt; ds[2].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[2].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_SetCallback(&amp;amp;han[2], dshot_done_callback, NULL);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[0], &amp;amp;ds[0]);&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[1], &amp;amp;ds[1]);&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[2], &amp;amp;ds[2]);&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[1].SLAST = -16;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI0 = 0;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI1 = 1;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI2 = 2;&lt;/P&gt;&lt;P&gt;NVIC_SetPriority(DMA0_IRQn, 0);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void send_dshot()&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;FTM_StopTimer(FTM0);&lt;/P&gt;&lt;P&gt;FTM_EnableDmaTransfer(FTM0, 0, false);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 1, false);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 2, false);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FTM0-&amp;gt;SC = 0;&lt;BR /&gt; FTM0-&amp;gt;CNT = 100;&lt;BR /&gt; FTM0-&amp;gt;MOD = 0;&lt;BR /&gt; FTM0-&amp;gt;STATUS = 0;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; FTM_SetupPwm(FTM0, ch, 2, kFTM_EdgeAlignedPwm, 300000, CLOCK_GetFreq(kCLOCK_BusClk));&lt;/P&gt;&lt;P&gt;EDMA_StartTransfer(&amp;amp;han[0]);&lt;BR /&gt; EDMA_StartTransfer(&amp;amp;han[1]);&lt;BR /&gt; EDMA_StartTransfer(&amp;amp;han[2]);&lt;/P&gt;&lt;P&gt;FTM_EnableDmaTransfer(FTM0, 0, true);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 1, true);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 2, true);&lt;/P&gt;&lt;P&gt;dshot_done = 0;&lt;/P&gt;&lt;P&gt;FTM_StartTimer(FTM0, kFTM_SystemClock);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;static inline void FTM_EnableDmaTransfer(FTM_Type *base, ftm_chnl_t chnlNumber, bool enable)&lt;BR /&gt;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (enable)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Enable DMA transfer */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CONTROLS[chnlNumber].CnSC |= FTM_CnSC_DMA_MASK;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable DMA transfer */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CONTROLS[chnlNumber].CnSC &amp;amp;= ~FTM_CnSC_DMA_MASK;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 27 May 2019 04:36:41 GMT</pubDate>
    <dc:creator>christianlees</dc:creator>
    <dc:date>2019-05-27T04:36:41Z</dc:date>
    <item>
      <title>FTM DMA output jitter (ESC Dshot)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM-DMA-output-jitter-ESC-Dshot/m-p/908891#M53297</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm trying to get RC ESC DSHOT protocol to work on a MK12DX256.&amp;nbsp; I'm usinf the FTM to trigger 3 DMA channels.&amp;nbsp; The first transition is triggered from the FTM output pin, the second (if it is a zero then the signal goes low early) by FTM0 ch 0, the second by ch 1 (if it's a one it is later).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm seeing two issues, firstly it looks to miss the first bit completely in terms of the line switching low, it goes high and stays high.&amp;nbsp; Secondly the rest of the data has jitter on the leading edges.&amp;nbsp; There isn't a lot else going on with the MCU so I wouldn't expect this much jitter considering it is DMA driven.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;dshot_init() sets up the DMA and FTM.&amp;nbsp; When you want to send the data you call send_shot().&amp;nbsp; There are other routines that populate dshot_data array that says if the bit is a one or a zero.&amp;nbsp; The mask determines what pins on the port are sending data, in this case it is set to 0xFF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm seeing the frequency bounce between 301.9kHz and 296.3kHz.&amp;nbsp; If I change the code to use three FTM channels to control the transitions it doesn't miss the first one but still has jitter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;dshot_init()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;ch[0].chnlNumber = 0;&lt;BR /&gt; ch[0].level = kFTM_HighTrue;&lt;BR /&gt; ch[0].dutyCyclePercent = 37;&lt;BR /&gt; ch[0].firstEdgeDelayPercent = 0;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; ch[1].chnlNumber = 1;&lt;BR /&gt; ch[1].level = kFTM_HighTrue;&lt;BR /&gt; ch[1].dutyCyclePercent = 74;&lt;BR /&gt; ch[1].firstEdgeDelayPercent = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FTM_GetDefaultConfig(&amp;amp;ftm_config);&lt;BR /&gt; ftm_config.prescale = kFTM_Prescale_Divide_1;&lt;/P&gt;&lt;P&gt;FTM_Init(FTM0, &amp;amp;ftm_config);&lt;BR /&gt; FTM_EnableInterrupts(FTM0, 7);&lt;/P&gt;&lt;P&gt;PORT_SetPinInterruptConfig(PORTC, 1, kPORT_DMARisingEdge);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DMAMUX_Init(DMAMUX);&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 0, kDmaRequestMux0PortC); //kDmaRequestMux0FTM0Channel0); //&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 1, kDmaRequestMux0FTM0Channel0);&lt;BR /&gt; DMAMUX_SetSource(DMAMUX, 2, kDmaRequestMux0FTM0Channel1);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(DMAMUX, 0);&lt;BR /&gt; DMAMUX_EnableChannel(DMAMUX, 1);&lt;BR /&gt; DMAMUX_EnableChannel(DMAMUX, 2);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;edma_config_t edma_config;&lt;/P&gt;&lt;P&gt;EDMA_GetDefaultConfig(&amp;amp;edma_config);&lt;BR /&gt; edma_config.enableDebugMode = false;&lt;BR /&gt; edma_config.enableRoundRobinArbitration = false;&lt;BR /&gt; EDMA_Init(DMA0, &amp;amp;edma_config);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[0], DMA0, 0);&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[1], DMA0, 1);&lt;BR /&gt; EDMA_CreateHandle(&amp;amp;han[2], DMA0, 2);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[0].srcAddr = (uint32_t)&amp;amp;dshot_mask;&lt;BR /&gt; ds[0].srcOffset = 0;&lt;BR /&gt; ds[0].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PSOR;&lt;BR /&gt; ds[0].destOffset = 0;&lt;BR /&gt; ds[0].minorLoopBytes = 1;&lt;BR /&gt; ds[0].majorLoopCounts = 16;&lt;BR /&gt; ds[0].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[0].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[1].srcAddr = (uint32_t)&amp;amp;dshot_data[0];&lt;BR /&gt; ds[1].srcOffset = 1;&lt;BR /&gt; ds[1].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PCOR;&lt;BR /&gt; ds[1].destOffset = 0;&lt;BR /&gt; ds[1].minorLoopBytes = 1;&lt;BR /&gt; ds[1].majorLoopCounts = 16;&lt;BR /&gt; ds[1].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[1].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ds[2].srcAddr = (uint32_t)&amp;amp;dshot_mask;&lt;BR /&gt; ds[2].srcOffset = 0;&lt;BR /&gt; ds[2].destAddr = (uint32_t)&amp;amp;GPIOD-&amp;gt;PCOR;&lt;BR /&gt; ds[2].destOffset = 0;&lt;BR /&gt; ds[2].minorLoopBytes = 1;&lt;BR /&gt; ds[2].majorLoopCounts = 16;&lt;BR /&gt; ds[2].srcTransferSize = kEDMA_TransferSize1Bytes;&lt;BR /&gt; ds[2].destTransferSize = kEDMA_TransferSize1Bytes;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_SetCallback(&amp;amp;han[2], dshot_done_callback, NULL);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[0], &amp;amp;ds[0]);&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[1], &amp;amp;ds[1]);&lt;BR /&gt; EDMA_SubmitTransfer(&amp;amp;han[2], &amp;amp;ds[2]);&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[1].SLAST = -16;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI0 = 0;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI1 = 1;&lt;BR /&gt; DMA0-&amp;gt;DCHPRI2 = 2;&lt;/P&gt;&lt;P&gt;NVIC_SetPriority(DMA0_IRQn, 0);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void send_dshot()&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;FTM_StopTimer(FTM0);&lt;/P&gt;&lt;P&gt;FTM_EnableDmaTransfer(FTM0, 0, false);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 1, false);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 2, false);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FTM0-&amp;gt;SC = 0;&lt;BR /&gt; FTM0-&amp;gt;CNT = 100;&lt;BR /&gt; FTM0-&amp;gt;MOD = 0;&lt;BR /&gt; FTM0-&amp;gt;STATUS = 0;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; FTM_SetupPwm(FTM0, ch, 2, kFTM_EdgeAlignedPwm, 300000, CLOCK_GetFreq(kCLOCK_BusClk));&lt;/P&gt;&lt;P&gt;EDMA_StartTransfer(&amp;amp;han[0]);&lt;BR /&gt; EDMA_StartTransfer(&amp;amp;han[1]);&lt;BR /&gt; EDMA_StartTransfer(&amp;amp;han[2]);&lt;/P&gt;&lt;P&gt;FTM_EnableDmaTransfer(FTM0, 0, true);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 1, true);&lt;BR /&gt; FTM_EnableDmaTransfer(FTM0, 2, true);&lt;/P&gt;&lt;P&gt;dshot_done = 0;&lt;/P&gt;&lt;P&gt;FTM_StartTimer(FTM0, kFTM_SystemClock);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;static inline void FTM_EnableDmaTransfer(FTM_Type *base, ftm_chnl_t chnlNumber, bool enable)&lt;BR /&gt;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (enable)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Enable DMA transfer */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CONTROLS[chnlNumber].CnSC |= FTM_CnSC_DMA_MASK;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable DMA transfer */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CONTROLS[chnlNumber].CnSC &amp;amp;= ~FTM_CnSC_DMA_MASK;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 May 2019 04:36:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM-DMA-output-jitter-ESC-Dshot/m-p/908891#M53297</guid>
      <dc:creator>christianlees</dc:creator>
      <dc:date>2019-05-27T04:36:41Z</dc:date>
    </item>
    <item>
      <title>Re: FTM DMA output jitter (ESC Dshot)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM-DMA-output-jitter-ESC-Dshot/m-p/908892#M53298</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Christian&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Experiment with the crossbar switch settings to see whether you can optiise jitter for your requirement.&lt;/P&gt;&lt;P&gt;It my not be relevant if you don't have parallel DMA operation but may never the less be worth testing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My default setting is changed from the the chip's default to avoid memory to memory DMA busts from causing potentially high latency to peripheral DMA use (I find a round-robin strategy the best general compromise):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new, courier, monospace;"&gt;AXBS_CRS0 = AXBS_CRS_ARB_ROUND_ROBIN;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new, courier, monospace;"&gt;AXBS_CRS1 = AXBS_CRS_ARB_ROUND_ROBIN;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Complete Kinetis solutions for professional needs, training and support:http://www.utasker.com/kinetis.html&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;Kinetis K60/K10:&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;- &lt;A href="http://www.utasker.com/kinetis/TWR-K60N512.html" target="test_blank"&gt;http://www.utasker.com/kinetis/TWR-K60N512.html&lt;/A&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;- &lt;A href="http://www.utasker.com/kinetis/TWR-K60D100M.html" target="test_blank"&gt;http://www.utasker.com/kinetis/TWR-K60D100M.html&lt;/A&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;- &lt;A href="http://www.utasker.com/kinetis/TWR-K60F120M.html" target="test_blank"&gt;http://www.utasker.com/kinetis/TWR-K60F120M.html&lt;/A&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;- &lt;A href="http://www.utasker.com/kinetis/ELZET80_NET-KBED.html" target="test_blank"&gt;http://www.utasker.com/kinetis/ELZET80_NET-KBED.html&lt;/A&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;- &lt;A href="http://www.utasker.com/kinetis/ELZET80_NET-K60.html" target="test_blank"&gt;http://www.utasker.com/kinetis/ELZET80_NET-K60.html&lt;/A&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;uTasker: supporting &amp;gt;1'000 registered Kinetis users get products faster and cheaper to market&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 May 2019 08:26:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM-DMA-output-jitter-ESC-Dshot/m-p/908892#M53298</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2019-05-27T08:26:14Z</dc:date>
    </item>
  </channel>
</rss>

