<?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 SPI data delay problem in Kinetis Software Development Kit</title>
    <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SPI-data-delay-problem/m-p/807656#M7852</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I am using SPI0 (interrupt based) on the KEA128 MCU. I am trying to transmit 4 bytes of data in buffer to the slave device using SPI mode 0. There are delays between each byte that are being transmitted. The attached image shows my SPI transmission captured using a Digital Oscilloscope; I have captured only the SlaveSelect and Clock waveforms. The MCU is running at 48 MHz with SPI of 12 MHz. I used KEAZ128 SDK for SPI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Initialization:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_PINSEL0&amp;nbsp; |= SIM_SCGC_SPI0_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI_ConfigType sSPIConfig = {{0}};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.u32BitRate = 12000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.u32BusClkHz = 24000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bModuleEn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bMasterMode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bClkPhase1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bClkPolarityLow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bMasterAutoDriveSS&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bTxIntEn&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bIntEn&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; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_SetCallback(SPI0,SPI0_ISR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_Init(SPI0, &amp;amp;sSPIConfig);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;ISR:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile uint8_t index = 0;&lt;/P&gt;&lt;P&gt;void SPI0_ISR()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(void)SPI0_S;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((SPI0_S &amp;amp; SPI_S_SPTEF_MASK))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check Tx buffer staus flag@@@ is empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( index == 4)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI0_C1 &amp;amp;=~ SPI_C1_SPTIE_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI0_D = tx_buffer[index++];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Main:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I initialized SPI then I started the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; volatile uint8_t tx_buffer[4] = {0};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; tx_buffer[0] = 0x12;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[1] = 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[2] = 0x11;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[3] = 0x15&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SPI0_C1 &amp;amp;=~ SPI_C1_SPIE_MASK&amp;nbsp;; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Disable Receiver&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SPI0_C1 |= SPI_C1_SPTIE_MASK ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable only transmitter interrupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The Result of the above program is attached below.The Blue coloured waveform is the SlaveSelect and the Yellow is the SPI Clock Pulses. As you see the SPI for transmitting 32 bit should be (1/(12 Mhz)) * 32 Bit&amp;nbsp; =&amp;nbsp; 3 u-sec(microseconds), but the actual time taken to transmit is 10 u-sec as seen with the Oscilloscope . The maximum observed delay between bytes is&amp;nbsp; 2.3 u-sec. In my program it is processing only SPI Interrupt as I hold the processor (after enabling interrupt). I am not running any timer. Please help me to resolve delay issue between bytes and also overall time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/nxp-community-experts"&gt;nxp-community-experts&lt;/A&gt;‌&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/Monica"&gt;Monica&lt;/A&gt;‌&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/pavel.krenek"&gt;pavel.krenek&lt;/A&gt;‌&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 18 Oct 2018 09:52:49 GMT</pubDate>
    <dc:creator>elangom</dc:creator>
    <dc:date>2018-10-18T09:52:49Z</dc:date>
    <item>
      <title>SPI data delay problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SPI-data-delay-problem/m-p/807656#M7852</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I am using SPI0 (interrupt based) on the KEA128 MCU. I am trying to transmit 4 bytes of data in buffer to the slave device using SPI mode 0. There are delays between each byte that are being transmitted. The attached image shows my SPI transmission captured using a Digital Oscilloscope; I have captured only the SlaveSelect and Clock waveforms. The MCU is running at 48 MHz with SPI of 12 MHz. I used KEAZ128 SDK for SPI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Initialization:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_PINSEL0&amp;nbsp; |= SIM_SCGC_SPI0_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI_ConfigType sSPIConfig = {{0}};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.u32BitRate = 12000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.u32BusClkHz = 24000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bModuleEn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bMasterMode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bClkPhase1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bClkPolarityLow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bMasterAutoDriveSS&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bTxIntEn&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSPIConfig.sSettings.bIntEn&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; = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_SetCallback(SPI0,SPI0_ISR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_Init(SPI0, &amp;amp;sSPIConfig);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;ISR:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile uint8_t index = 0;&lt;/P&gt;&lt;P&gt;void SPI0_ISR()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(void)SPI0_S;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((SPI0_S &amp;amp; SPI_S_SPTEF_MASK))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check Tx buffer staus flag@@@ is empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( index == 4)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp; = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI0_C1 &amp;amp;=~ SPI_C1_SPTIE_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI0_D = tx_buffer[index++];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Main:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I initialized SPI then I started the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; volatile uint8_t tx_buffer[4] = {0};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; tx_buffer[0] = 0x12;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[1] = 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[2] = 0x11;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; tx_buffer[3] = 0x15&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SPI0_C1 &amp;amp;=~ SPI_C1_SPIE_MASK&amp;nbsp;; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Disable Receiver&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SPI0_C1 |= SPI_C1_SPTIE_MASK ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable only transmitter interrupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The Result of the above program is attached below.The Blue coloured waveform is the SlaveSelect and the Yellow is the SPI Clock Pulses. As you see the SPI for transmitting 32 bit should be (1/(12 Mhz)) * 32 Bit&amp;nbsp; =&amp;nbsp; 3 u-sec(microseconds), but the actual time taken to transmit is 10 u-sec as seen with the Oscilloscope . The maximum observed delay between bytes is&amp;nbsp; 2.3 u-sec. In my program it is processing only SPI Interrupt as I hold the processor (after enabling interrupt). I am not running any timer. Please help me to resolve delay issue between bytes and also overall time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/nxp-community-experts"&gt;nxp-community-experts&lt;/A&gt;‌&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/Monica"&gt;Monica&lt;/A&gt;‌&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/pavel.krenek"&gt;pavel.krenek&lt;/A&gt;‌&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2018 09:52:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SPI-data-delay-problem/m-p/807656#M7852</guid>
      <dc:creator>elangom</dc:creator>
      <dc:date>2018-10-18T09:52:49Z</dc:date>
    </item>
    <item>
      <title>Re: SPI data delay problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SPI-data-delay-problem/m-p/807657#M7853</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Elango M,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thank you for your testing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I also test your code today.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Actually, even use this code directly:&lt;/P&gt;&lt;P&gt;void SPI0_ISR (void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)SPI0_S;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((SPI0_S &amp;amp; SPI_S_SPTEF_MASK))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check Tx buffer staus flag@@@ is empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; SPI0_D = 0x55;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;I also can find about 1us delay in the SPI bus!&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76202iFDA89C39CBD73879/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76155i3026F066D43641A4/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;You can find the intervals is about 1us.&lt;/P&gt;&lt;P&gt;Actually, this is normal, let me tell you the details.&lt;/P&gt;&lt;P&gt;As you know, the system clock is just 48Mhz, but your SPI baudrate is 12Mhz.&lt;/P&gt;&lt;P&gt;From the ARM CortexM0+ core document, you can know, the Interrupt Latency is 16cycles.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_3.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76320i5EA9FED12AC899BF/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_3.png" alt="pastedImage_3.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Then debug the code, you can find the ISR asm code:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_4.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76369iE3D3F027A370DF58/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_4.png" alt="pastedImage_4.png" /&gt;&lt;/span&gt;Each asm code line also have the clock cycle, about the detail cycle you can refer to ARM core document:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_5.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76419i240F9B28B0DA13E3/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_5.png" alt="pastedImage_5.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;So, just add the whole ISR asm code execution time, also add your callback time:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_6.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/76463i34E34EA25BB5647C/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_6.png" alt="pastedImage_6.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As I know, it is about 50 cycles core clock, now ,just take 50cycles as an example.&lt;/P&gt;&lt;P&gt;50*(1/48Mhz)=1.04us.&lt;/P&gt;&lt;P&gt;This is the root reason why you have this gap between the SPI bytes, it is caused by the system clock can't too be high, and your SPI baudrate is very high.&lt;/P&gt;&lt;P&gt;So, if you don't want to have the gap, you can minimize the SPI baudrate, or delete the callback, just add the code in SPI0_IRQHandler, but this also have gap, just cut down.&lt;/P&gt;&lt;P&gt;As I know, 1Mhz won't have the gap.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Kerry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Oct 2018 06:47:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SPI-data-delay-problem/m-p/807657#M7853</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2018-10-19T06:47:24Z</dc:date>
    </item>
  </channel>
</rss>

