<?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: KSDK v2 SAI driver problem in Kinetis Software Development Kit</title>
    <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515737#M5366</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've checked under debugger.&lt;/P&gt;&lt;P&gt;@120MHz FRACT = 32, DIVIDE = 625, so clock is exact 6,144MHz&lt;/P&gt;&lt;P&gt;@168MHz FRACT = 32, DIVIDE = 875, exact 6,144MHz&lt;/P&gt;&lt;P&gt;@180MHz FRACT = 64, DIVIDE = 1875, same 6,144MHz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, the function you paste is OK. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you suggest I set clock/system speed at 180MHz &lt;/P&gt;&lt;P&gt;and SAI clock settings&lt;/P&gt;&lt;P class="p1"&gt;base-&amp;gt;&lt;SPAN class="s1"&gt;MDR&lt;/SPAN&gt; = I2S_MDR_DIVIDE(29);&lt;/P&gt;&lt;P&gt;... and still noise. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 13 Jun 2016 10:34:39 GMT</pubDate>
    <dc:creator>jankedzierski</dc:creator>
    <dc:date>2016-06-13T10:34:39Z</dc:date>
    <item>
      <title>KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515734#M5363</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Community,&lt;/P&gt;&lt;P&gt;I have following problems with SAI examples on my board (custom).&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Configuration is: &lt;/P&gt;&lt;P&gt;KSDK build with online builder: SDK_2.0_MK26FN2M0xxx18&lt;/P&gt;&lt;P&gt;Demo runs under FreeRTOS (I copied examples code to created sound task).&lt;/P&gt;&lt;P&gt;Hardware: Kinetis K26, XTAL 8MHz run at 180MHz in PEE mode, codec - SGTL5000.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Clocks are configured as followed:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_SetSimSafeDivs();&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; oscConfig.&lt;SPAN class="s2"&gt;freq&lt;/SPAN&gt; = BOARD_XTAL0_CLK_HZ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; oscConfig.&lt;SPAN class="s2"&gt;capLoad&lt;/SPAN&gt; = 0U;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p4" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; oscConfig.&lt;/SPAN&gt;workMode&lt;SPAN class="s1"&gt; = &lt;/SPAN&gt;kOSC_ModeOscLowPower&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p4" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; oscConfig.&lt;/SPAN&gt;oscerConfig&lt;SPAN class="s1"&gt;.&lt;/SPAN&gt;enableMode&lt;SPAN class="s1"&gt; = &lt;/SPAN&gt;kOSC_ErClkEnable&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_InitOsc0(&amp;amp;oscConfig);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_SetXtal0Freq(BOARD_XTAL0_CLK_HZ);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; g_pllConfig.&lt;SPAN class="s2"&gt;enableMode&lt;/SPAN&gt; = 0U;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_CalcPllDiv(g_xtal0Freq, BOARD_MCGOUTCLK_FREQ, &amp;amp;g_pllConfig.&lt;SPAN class="s2"&gt;prdiv&lt;/SPAN&gt;, &amp;amp;g_pllConfig.&lt;SPAN class="s2"&gt;vdiv&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_BootToPeeMode(&lt;SPAN class="s2"&gt;kMCG_OscselOsc&lt;/SPAN&gt;, &lt;SPAN class="s2"&gt;kMCG_PllClkSelPll0&lt;/SPAN&gt;, &amp;amp;g_pllConfig);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; assert(&lt;SPAN class="s2"&gt;kMCG_ModePEE&lt;/SPAN&gt; == CLOCK_GetMode());&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; simConfig.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;pllFllSel&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; = 1U;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* PLLFLLSEL select PLL. */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; simConfig.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;pllFllDiv&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; = 0U;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* PLLFLLSEL clock divider divisor */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; simConfig.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;pllFllFrac&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; = 0U;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* PLLFLLSEL clock divider fraction */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; simConfig.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;er32kSrc&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; = 2U;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* ERCLK32K selection, use RTC. */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; simConfig.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;clkdiv1&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; = 0x02260000U; &lt;/SPAN&gt;/* CKLDIV1 = 1,&amp;nbsp; CKLDIV2 = 3,&amp;nbsp; CKLDIV3 = 3,&amp;nbsp; CKLDIV4 = 7,&amp;nbsp; */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; CLOCK_SetSimConfig(&amp;amp;simConfig);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; SystemCoreClockUpdate();&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've checked all three examples (boards/twrk65f180m/driver_examples/sai ) and in all cases had some problems.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ex 1 &amp;amp; 2.&amp;nbsp; interrupt &amp;amp; interrupt transfer&lt;/P&gt;&lt;P&gt;I can not play music.h clear at 180MHz. I heard some noises and after few playing loops like this&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;while (1)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; PRINTF("Play ");&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; SAI_TransferSendNonBlocking(DEMO_SAI, &amp;amp;txHandle, &amp;amp;xfer);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; /* Wait until finished */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; isFinished = false;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; /* Wait until finished */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; while (isFinished != true)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; { vTaskDelay(100); }&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; PRINTF("Stop ");&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; vTaskDelay(200);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;it hangs. At 168MHz and lower everything runs ok for a long time.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ex. 3 dma_transfer&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here I have the same problem with noises at coreClock &amp;gt;168MHz, moreover i can play sound only once&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;while&lt;SPAN class="s1"&gt; (1)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; PRINTF(&lt;SPAN class="s2"&gt;"Play "&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; isFinished = false;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; SAI_TransferSendEDMA(DEMO_SAI, &amp;amp;txHandle, &amp;amp;xfer);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p4" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN class="s1"&gt;&amp;nbsp; &lt;/SPAN&gt;/* Wait until finished */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;SPAN class="s3"&gt;while&lt;/SPAN&gt; (isFinished != true)&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; { vTaskDelay(100); }&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt; PRINTF(&lt;SPAN class="s2"&gt;"Stop "&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; vTaskDelay(2000);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="padding-left: 30px;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2" style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;it stopes on second isFinished loop.&lt;/P&gt;&lt;P class="p2"&gt;What Am I doing wrong? Do I need any additional configuration?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Jun 2016 06:18:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515734#M5363</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-06-07T06:18:37Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515735#M5364</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Jan,&lt;/P&gt;&lt;P&gt;As you described that the codec generates noise when the core/system frequency exceeds 168mHz, I suppose that the bit clock frequency of codec is incorrect.&lt;/P&gt;&lt;P&gt;I have checked both the code and the schematics of TWR-Audio-SGTL board, the SGTL5000 codec works in slave mode and synchronous mode, in other words, the Kinetis I2S interface genertates both the bit clock and frame clock, the receiver/transmitter of the codec use the same frame/bit clock. It also means that the core/system clock generates the bit/frame clock by a divider, the divider is only specified by the I2Sx_MDR.&lt;/P&gt;&lt;P&gt;for example, if you use 168MHz core/ssytem clock, the bit clock frequency is 32*2*16K=1.024MHz(sampling frequency is 16KHz), the diviedr should be 168MHz/1.024Mhz=164;&lt;/P&gt;&lt;P&gt;I suggest you set the core/system clock in 172MHz, in the case, if the set the divider as 168, the bit clcok will be 1.024Mhz approximatively.&lt;/P&gt;&lt;P&gt;I think you can write the I2Sx_MDR register dierctly with the code in&amp;nbsp; SAI_SetMasterClockDivider() in fsl_sai.c:&lt;/P&gt;&lt;P&gt;/* Fill the computed fract and divider to registers */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base-&amp;gt;MDR = I2S_MDR_DIVIDE(167);&amp;nbsp;&amp;nbsp; /// | I2S_MDR_FRACT(current_fract - 1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you want to research the divider, pls read the the function I pasted in fsk_sai.c,&amp;nbsp; but the code is not easy to understand:&lt;/P&gt;&lt;P&gt;You can also check the I2S_MDR register value in debugger.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it can help you.&lt;/P&gt;&lt;P&gt;BR&lt;/P&gt;&lt;P&gt;Xiangjun rong&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static void SAI_SetMasterClockDivider(I2S_Type *base, uint32_t mclk_Hz, uint32_t mclkSrcClock_Hz)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t freq = mclkSrcClock_Hz;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t fract, divide;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t remaind = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t current_remainder = 0xFFFFFFFFU;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t current_fract = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t current_divide = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t mul_freq = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t max_fract = 256;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*In order to prevent overflow */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; freq /= 100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mclk_Hz /= 100;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Compute the max fract number */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_fract = mclk_Hz * 4096 / freq + 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (max_fract &amp;gt; 256)&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;&amp;nbsp;&amp;nbsp; max_fract = 256;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Looking for the closet frequency */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (fract = 1; fract &amp;lt; max_fract; fract++)&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;&amp;nbsp;&amp;nbsp; mul_freq = freq * fract;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remaind = mul_freq % mclk_Hz;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; divide = mul_freq / mclk_Hz;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Find the exactly frequency */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (remaind == 0)&lt;/P&gt;&lt;P&gt;&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; current_fract = fract;&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; current_divide = mul_freq / mclk_Hz;&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; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Closer to next one, set the closest to next data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (remaind &amp;gt; mclk_Hz / 2)&lt;/P&gt;&lt;P&gt;&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; remaind = mclk_Hz - remaind;&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; divide += 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Update the closest div and fract */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (remaind &amp;lt; current_remainder)&lt;/P&gt;&lt;P&gt;&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; current_fract = fract;&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; current_divide = divide;&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; current_remainder = remaind;&lt;/P&gt;&lt;P&gt;&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; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Fill the computed fract and divider to registers */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base-&amp;gt;MDR = I2S_MDR_DIVIDE(current_divide - 1) | I2S_MDR_FRACT(current_fract - 1);&amp;nbsp; //Rong wrote, change the value here directly&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Waiting for the divider updated */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (base-&amp;gt;MCR &amp;amp; I2S_MCR_DUF_MASK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;#endif /* FSL_FEATURE_SAI_HAS_MCLKDIV_REGISTER */&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jun 2016 08:18:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515735#M5364</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2016-06-13T08:18:06Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515736#M5365</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK,&lt;/P&gt;&lt;P&gt;I will check it. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jun 2016 08:27:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515736#M5365</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-06-13T08:27:28Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515737#M5366</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've checked under debugger.&lt;/P&gt;&lt;P&gt;@120MHz FRACT = 32, DIVIDE = 625, so clock is exact 6,144MHz&lt;/P&gt;&lt;P&gt;@168MHz FRACT = 32, DIVIDE = 875, exact 6,144MHz&lt;/P&gt;&lt;P&gt;@180MHz FRACT = 64, DIVIDE = 1875, same 6,144MHz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, the function you paste is OK. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you suggest I set clock/system speed at 180MHz &lt;/P&gt;&lt;P&gt;and SAI clock settings&lt;/P&gt;&lt;P class="p1"&gt;base-&amp;gt;&lt;SPAN class="s1"&gt;MDR&lt;/SPAN&gt; = I2S_MDR_DIVIDE(29);&lt;/P&gt;&lt;P&gt;... and still noise. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jun 2016 10:34:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515737#M5366</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-06-13T10:34:39Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515738#M5367</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;One update.&lt;/P&gt;&lt;P&gt;It also run stable at 172MHz. Probably it's a PLL stability issue. I will change XTAL from 8 to 16 MHz and check again.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jun 2016 11:00:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515738#M5367</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-06-13T11:00:06Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515739#M5368</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK,&lt;/P&gt;&lt;P&gt;I found a solution.&lt;/P&gt;&lt;P&gt;The problem was with high speed mode. &lt;/P&gt;&lt;P&gt;If you want to use max CPU speed (180MHz in this case) you have to set high speed mode in the SMC module.&lt;/P&gt;&lt;P&gt;Like this (SMC-&amp;gt;PMCTRL = ...)&lt;/P&gt;&lt;P&gt;Using KSDK 2.0 fsl_smc.h driver:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SMC_SetPowerModeHsrun(SMC);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateHsrun)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And now sound works clear and stable. &lt;/P&gt;&lt;P&gt;Please if anyone could confirm my investigation, just write sth. here.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 25 Jun 2016 09:44:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515739#M5368</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-06-25T09:44:32Z</dc:date>
    </item>
    <item>
      <title>Re: KSDK v2 SAI driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515740#M5369</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Solution to the Ex.3 appeared here:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/thread/429152"&gt;How to reuse SAI_TransferSendEDMA in KSDK 2.0&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 02 Jul 2016 18:29:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/KSDK-v2-SAI-driver-problem/m-p/515740#M5369</guid>
      <dc:creator>jankedzierski</dc:creator>
      <dc:date>2016-07-02T18:29:20Z</dc:date>
    </item>
  </channel>
</rss>

