<?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: Real-time DSP using the LPC55S69 i2s Examples in MCUXpresso SDK</title>
    <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070568#M2477</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sabina,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have finally taken some time to look at&amp;nbsp;the documents you have referenced. I have not read in detail, but they do appear to be useful. I am indeed familiar with ping-pong input and output buffers and the fact that the latency will be no less than the sum of the buffer lengths, say N_in + N_out. Without reading the papers in depth it is still unclear whether I need to create another IRQ to do my desired signal processing with the ping-pong buffers or have my processing integrated with either the Rx or Tx callbacks. I guess I need to read the referenced papers to understand this better.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the end I do think you have pushed me in the right direction and hopefully will reach may objective.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark Wickert&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 28 Jun 2020 13:14:11 GMT</pubDate>
    <dc:creator>mwickert</dc:creator>
    <dc:date>2020-06-28T13:14:11Z</dc:date>
    <item>
      <title>Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070564#M2473</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I currently experimenting with the LPC55S69 i2s examples i2s_interrupt_record_playback and i2s_dma_record_playback examples. My starting point has been the interrupt version example. I want low latency and the ability to perform DSP math on the signal samples arriving at the ADC side of the wm8904 codec and then send the modified signal samples to the DAC side of the wm8904 codec. The key code as I see it are the two callbacks:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;TxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue the same original s_Buffer all over again */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; *transfer = (&lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; *)userData;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxTransferNonBlocking(base, handle, *transfer);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;RxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue the same original s_Buffer all over again */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; *transfer = (&lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; *)userData;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxTransferNonBlocking(base, handle, *transfer);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Where should be I redoing the DSP math? What changes to to I2S code can/should be made to maximize the processing time available to the DSP math operations. I would ultimately like to be using the PowerQuad and related CMSIS-DSP functions. When I use a logic analyzer to monitor entry to the two callbacks I a lot of "thrashing" between the two callbacks. Do I or can I change the configuration of the callbacks to the Tx waits until the Rx is done with sample processing and can now update the Tx buffer? Out their app notes that I can read?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, I am using&amp;nbsp;MCUXpresso IDE v11.1.1 [Build 3241] [2020-03-02]&lt;/P&gt;&lt;P&gt;and 55S69 SDK 2.7.1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks any your help you can provide.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 08 Jun 2020 14:17:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070564#M2473</guid>
      <dc:creator>mwickert</dc:creator>
      <dc:date>2020-06-08T14:17:22Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070565#M2474</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mark,&lt;/P&gt;&lt;P&gt;Hope you are doing well.&lt;/P&gt;&lt;P&gt;The examples are created as a base/reference to begin your application. So, essentially yes you are able to modify the examples as you see fit, however please consider that customization may affect either positively or negatively the performance.In addition, any changes to the examples we cannot guarantee that the expected behavior will occur.&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example code and application note regarding the DSP using LPC55xx, please check the following links:&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/docs/en/application-note/AN12282.pdf" title="https://www.nxp.com/docs/en/application-note/AN12282.pdf"&gt;Digital Signal Processing for NXP LPC5500 Using PowerQuad&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/docs/en/application-note-software/AN12282SW.zip" title="https://www.nxp.com/docs/en/application-note-software/AN12282SW.zip"&gt;AN12282SW.zip&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Towards the end of the document you will find, a&amp;nbsp;demo project, a page is setup for the comparison between the PowerQuad and Arm CMSIS-DSP when they are running the same tasks, so that they can achieve the highest performance. You will find the considerations to take and where to place code based on those demos.&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Sabina&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 10 Jun 2020 15:34:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070565#M2474</guid>
      <dc:creator>Sabina_Bruce</dc:creator>
      <dc:date>2020-06-10T15:34:31Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070566#M2475</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sabina,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Both of the reference links are helpful as I have looked the PowerQuad vs CMSIS-DSP document shortly after&amp;nbsp;it&amp;nbsp;was posted. I also understand that I can customize the examples. This is what I started to do last fall, but had to step away for a while. Now that I have put the newest MCUXpresso on a new machine and have the newest LPC55S69 SDK I want to make headway on understanding how to code real-time DSP using I2S API (&lt;A class="link-titled" href="https://mcuxpresso.nxp.com/api_doc/dev/116/group__i2s__driver.html#ga8e341c9ce48e5be03e120ea332758048" title="https://mcuxpresso.nxp.com/api_doc/dev/116/group__i2s__driver.html#ga8e341c9ce48e5be03e120ea332758048"&gt;MCUXpresso SDK API Reference Manual: I2S Driver&lt;/A&gt;&amp;nbsp;). I need help in understanding how to work with the I2S API to manage signal sample flow using the TX and RX callbacks that I pasted in my original post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On other processors I have configured an interrupt (ISR) that fires when I2S codec data is ready to be processed by a DSP algorithm. In particular suppose there is one 32 bit I2S word of 4-bytes (left and right 16-bit audio samples) that needs to be sent through a DSP algorithm one sample at a time (perhaps CMSIS-DSP filters). When the ISR fires I write code in the ISR to process the two received 16-bit samples through a filter and then take the filters samples and return them to a 4-byte word for I2S transmission back to the codec. My question is how to I make this work using the NXP I2S API? I do not know how to use the two nonblocking callback functions in the example code with an ISR that I am describing in the paragraph. FYI, the "other" processor is a Cypress M4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope you or&amp;nbsp;someone on the forum can point me in the right direction.&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 11 Jun 2020 15:13:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070566#M2475</guid>
      <dc:creator>mwickert</dc:creator>
      <dc:date>2020-06-11T15:13:38Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070567#M2476</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mark,&lt;/P&gt;&lt;P&gt;Hope you are doing well.&lt;/P&gt;&lt;P&gt;To get started with the I2S API, I would have recommended the examples that you are already working with. We do not have a guide on how to begin making changes according to different needs. Based on what you comment on your first post and this last one I believe you should work with ping pong buffers for your data. The reason is, that if you wait for TX to finish before enabling RX and vice versa, you will have many delays and the time will not be used efficiently. However, implementing a sort of pin-pong logic you could be receiving or transferring data while working on the data in the background. Although we don't have an example of this using i2s, you can find the principal of it in the multicore examples which use this method. You can refer to this application which describes a bit of this topic using the Kinetis, but the concepts are what you will find useful I believe.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.nxp.com/docs/en/application-note/AN4520.pdf"&gt;An I2S (Inter-IC Sound Bus) Application on Kinetis&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.nxp.com/docs/en/application-note/AN4369.pdf"&gt;Audio Output Options for Kinetis&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.nxp.com/docs/en/application-note/AN12202.pdf"&gt;Using Synchronous Audio Interface (SAI) on S32K148&lt;/A&gt;&lt;/P&gt;&lt;P&gt;This thread has some example codes attached, you may also find useful for your application:&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/thread/81904"&gt;https://community.nxp.com/thread/81904&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Sabina&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Jun 2020 22:56:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070567#M2476</guid>
      <dc:creator>Sabina_Bruce</dc:creator>
      <dc:date>2020-06-15T22:56:16Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070568#M2477</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sabina,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have finally taken some time to look at&amp;nbsp;the documents you have referenced. I have not read in detail, but they do appear to be useful. I am indeed familiar with ping-pong input and output buffers and the fact that the latency will be no less than the sum of the buffer lengths, say N_in + N_out. Without reading the papers in depth it is still unclear whether I need to create another IRQ to do my desired signal processing with the ping-pong buffers or have my processing integrated with either the Rx or Tx callbacks. I guess I need to read the referenced papers to understand this better.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the end I do think you have pushed me in the right direction and hopefully will reach may objective.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark Wickert&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Jun 2020 13:14:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070568#M2477</guid>
      <dc:creator>mwickert</dc:creator>
      <dc:date>2020-06-28T13:14:11Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070569#M2478</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have moved forward with a ping-pong approach using I2S interrupts and placing the DSP workload (transfer and processing of input samples to output samples) in the while {} loop at the end of main {}. My thought was that the while the Tx() and Rx() I2S callbacks were doing their thing of shuffling ADC/DAC samples via I2S, there would be plenty of processor time to do some processing with the samples passing from input to output. This does not work as expected and now I am stuck on what to do try next. Samples are getting dropped regardless of the buffer length I choose, so the waveform is discontinuous. My code listing is below followed by a scope screenshot. Not here I am using a sinusoid LUT to send 1kHz and 2 kHz sinusoid samples to the output buffers, but input to output streaming works similarly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Copyright (c) 2016, &lt;SPAN style="text-decoration: underline;"&gt;Freescale&lt;/SPAN&gt; Semiconductor, Inc.&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Copyright 2016-2017 NXP&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* All rights reserved.&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;*&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* SPDX-License-Identifier: BSD-3-Clause&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;*/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*******************************************************************************&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Includes&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;******************************************************************************/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_device_registers.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_debug_console.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"board.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_i2c.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_i2s.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_wm8904.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"music.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_codec_common.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;&amp;lt;stdbool.h&amp;gt;&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"pin_mux.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_sysctl.h"&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#include&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;"fsl_codec_adapter.h"&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*******************************************************************************&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Definitions&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;******************************************************************************/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2C (I2C4)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_MASTER_CLOCK_FREQUENCY 24576000&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_TX (I2S7)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_RX (I2S6)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_CLOCK_DIVIDER (CLOCK_GetPll0OutFreq() / 48000U / 16U / 2U)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_RX_MODE (kI2S_MasterSlaveNormalSlave)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_I2S_TX_MODE (kI2S_MasterSlaveNormalMaster)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_AUDIO_BIT_WIDTH (16)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_AUDIO_SAMPLE_RATE (48000)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; DEMO_AUDIO_PROTOCOL kCODEC_BusI2S&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// total latency will be 2*&lt;SPAN style="text-decoration: underline;"&gt;Nsamps&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; NSAMPS 50&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// two 16-bit channels, i.e., left and right audio ++&amp;gt; 4*&lt;SPAN style="text-decoration: underline;"&gt;Nsamps&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; NBYTES 200&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;#define&lt;/STRONG&gt;&lt;/SPAN&gt; N_period 48&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// 48 sample cosine lookup table with &lt;SPAN style="text-decoration: underline;"&gt;Apeak&lt;/SPAN&gt; = 15000&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; onek_table[48] = {15000,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;14871,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;14488,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;13858,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;12990,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;11900,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;10606, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;9131, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;7500, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;5740,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;3882, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;1957,&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;0,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-1957,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-3882,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;-5740,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-7499,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-9131, -10606, -11900,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;-12990, -13858, -14488, -14871, -15000,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;-14871, -14488, -13858, -12990, -11900,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;-10606,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-9131,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-7500,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-5740,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;-3882,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;-1957,&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;0, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;1957, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;3882, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;5740,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;7500, &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;9131,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;10606,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;11900,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;12990,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&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; &lt;/SPAN&gt;13858,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;14488,&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;14871};&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; table_indexL = 0;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; table_indexR = 0;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*******************************************************************************&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Prototypes&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;******************************************************************************/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;StartDigitalLoopback&lt;/STRONG&gt;(&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;TxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;RxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*******************************************************************************&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Variables&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;******************************************************************************/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #005032;"&gt;wm8904_config_t&lt;/SPAN&gt; wm8904Config = {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.i2cConfig&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= {.codecI2CInstance = BOARD_CODEC_I2C_INSTANCE, .codecI2CSourceClock = BOARD_CODEC_I2C_CLOCK_FREQ},&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.recordSource = &lt;/SPAN&gt;&lt;EM&gt;kWM8904_RecordSourceLineInput&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.recordChannelLeft&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;= &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_RecordChannelLeft2&lt;/EM&gt;&lt;/SPAN&gt;,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.recordChannelRight = &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_RecordChannelRight2&lt;/EM&gt;&lt;/SPAN&gt;,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.playSource &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_PlaySourceDAC&lt;/EM&gt;&lt;/SPAN&gt;,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.slaveAddress &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= WM8904_I2C_ADDRESS,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.protocol &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_ProtocolI2S&lt;/EM&gt;&lt;/SPAN&gt;,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.format &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= {.sampleRate = &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_SampleRate48kHz&lt;/EM&gt;&lt;/SPAN&gt;, .bitWidth = &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kWM8904_BitWidth16&lt;/EM&gt;&lt;/SPAN&gt;},&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.mclk_HZ&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= DEMO_I2S_MASTER_CLOCK_FREQUENCY,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.master &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= false,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;};&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #005032;"&gt;codec_config_t&lt;/SPAN&gt; boardCodecConfig = {.codecDevType = &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCODEC_WM8904&lt;/EM&gt;&lt;/SPAN&gt;, .codecDevConfig = &amp;amp;wm8904Config};&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// Define ping/&lt;SPAN style="text-decoration: underline;"&gt;pong&lt;/SPAN&gt; &lt;SPAN style="text-decoration: underline;"&gt;Tx&lt;/SPAN&gt; and &lt;SPAN style="text-decoration: underline;"&gt;Rx&lt;/SPAN&gt; buffers (4 total).&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// Manipulate them using pointers&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *tx_buf;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *rx_buf;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;// Example started with N_bytes = 400&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;//__ALIGN_BEGIN static uint8_t s_Buffer[200] __ALIGN_END; /* 100 samples =&amp;gt; time about 2 &lt;SPAN style="text-decoration: underline;"&gt;ms&lt;/SPAN&gt; */&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;//&lt;SPAN style="text-decoration: underline;"&gt;Tx&lt;/SPAN&gt; transfer Pair&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; bool tx_pp = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; bool tx_ready = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;__ALIGN_BEGIN &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;uint8_t&lt;/SPAN&gt; tx_ping[NBYTES] __ALIGN_END;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;__ALIGN_BEGIN &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;uint8_t&lt;/SPAN&gt; tx_pong[NBYTES] __ALIGN_END;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;//&lt;SPAN style="text-decoration: underline;"&gt;Rx&lt;/SPAN&gt; transfer pair&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; bool rx_pp = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; bool rx_ready = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;__ALIGN_BEGIN &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;uint8_t&lt;/SPAN&gt; rx_ping[NBYTES] __ALIGN_END;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;__ALIGN_BEGIN &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;uint8_t&lt;/SPAN&gt; rx_pong[NBYTES] __ALIGN_END;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_config_t&lt;/SPAN&gt; s_TxConfig;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_config_t&lt;/SPAN&gt; s_RxConfig;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; s_TxHandle;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; s_RxHandle;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; s_TxTransfer_ping;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; s_RxTransfer_ping;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; s_TxTransfer_pong;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;i2s_transfer_t&lt;/SPAN&gt; s_RxTransfer_pong;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;extern&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;codec_config_t&lt;/SPAN&gt; boardCodecConfig;&lt;/P&gt;&lt;P style="color: #005032; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;codec_handle_t&lt;SPAN style="color: #000000;"&gt; codecHandle;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*******************************************************************************&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* Code&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;******************************************************************************/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;BOARD_InitSysctrl&lt;/STRONG&gt;(&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt;)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_Init(SYSCTL);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* select signal source for share set */&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSignalSrc(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_SharedCtrlSignalSCK&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm7&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSignalSrc(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_SharedCtrlSignalWS&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm7&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* select share set for special &lt;SPAN style="text-decoration: underline;"&gt;flexcomm&lt;/SPAN&gt; signal */&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSet(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm7&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_FlexcommSignalSCK&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSet(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm7&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_FlexcommSignalWS&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSet(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm6&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_FlexcommSignalSCK&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCTL_SetShareSet(SYSCTL, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_Flexcomm6&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_FlexcommSignalWS&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, &lt;/SPAN&gt;&lt;EM&gt;kSYSCTL_ShareSet0&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;/*!&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;* @brief Main function&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;*/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;int&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;main&lt;/STRONG&gt;(&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt;)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #005032; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; &lt;/SPAN&gt;int16_t&lt;SPAN style="color: #000000;"&gt; n;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_EnableClock(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_InputMux&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_EnableClock(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_Iocon&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_EnableClock(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_Gpio0&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_EnableClock(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_Gpio1&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* USART0 clock */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* I2C clock */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kFRO12M_to_FLEXCOMM4&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PMC-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;PDRUNCFGCLR0&lt;/SPAN&gt; |= PMC_PDRUNCFG0_PDEN_XTAL32M_MASK; &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;/*!&amp;lt; Ensure XTAL16M is on&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PMC-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;PDRUNCFGCLR0&lt;/SPAN&gt; |= PMC_PDRUNCFG0_PDEN_LDOXO32M_MASK;&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;/*!&amp;lt; Ensure XTAL16M is on&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCON-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;CLOCK_CTRL&lt;/SPAN&gt; |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK; &lt;SPAN style="color: #3f7f5f;"&gt;/*!&amp;lt; Ensure CLK_IN is on&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;ANACTRL-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;XO32M_CTRL&lt;/SPAN&gt; |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kEXT_CLK_to_PLL0&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;const&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #005032;"&gt;pll_setup_t&lt;/SPAN&gt; pll0Setup = {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(8U) | SYSCON_PLL0CTRL_SELP(31U),&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.pllndec = SYSCON_PLL0NDEC_NDIV(125U),&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.pllpdec = SYSCON_PLL0PDEC_PDIV(8U),&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.pllsscg = {0x0U, (SYSCON_PLL0SSCG1_MDIV_EXT(3072U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.pllRate = 24576000U,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;.flags &lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;= PLL_SETUPFLAG_WAITLOCK,&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;};&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/*!&amp;lt; Configure PLL to the desired values */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_SetPLL0Freq(&amp;amp;pll0Setup);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Attach PLL clock to MCLK for I2S, no divider */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kPLL0_to_MCLK&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCON-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;MCLKDIV&lt;/SPAN&gt; = SYSCON_MCLKDIV_DIV(0U);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;SYSCON-&amp;gt;&lt;SPAN style="color: #0000c0;"&gt;MCLKIO&lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;= 1U;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_SetClkDiv(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_DivPll0Clk&lt;/EM&gt;&lt;/SPAN&gt;, 0U, true);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_SetClkDiv(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kCLOCK_DivPll0Clk&lt;/EM&gt;&lt;/SPAN&gt;, 1U, false);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/*!&amp;lt; Switch PLL0 clock source selector to XTAL16M */&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* I2S clocks */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kPLL0_DIV_to_FLEXCOMM6&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CLOCK_AttachClk(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kPLL0_DIV_to_FLEXCOMM7&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* reset FLEXCOMM for I2C */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;RESET_PeripheralReset(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kFC4_RST_SHIFT_RSTn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* reset FLEXCOMM for I2S */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;RESET_PeripheralReset(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kFC6_RST_SHIFT_RSTn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;RESET_PeripheralReset(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kFC7_RST_SHIFT_RSTn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;NVIC_ClearPendingIRQ(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;FLEXCOMM6_IRQn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;NVIC_ClearPendingIRQ(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;FLEXCOMM7_IRQn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enable interrupts for I2S */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;EnableIRQ(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;FLEXCOMM6_IRQn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;EnableIRQ(&lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;FLEXCOMM7_IRQn&lt;/EM&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Initialize the rest */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;BOARD_InitPins();&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;BOARD_BootClockFROHF96M();&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;BOARD_InitDebugConsole();&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;BOARD_InitSysctrl();&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PRINTF(&lt;/SPAN&gt;"Configure WM8904 &lt;SPAN style="text-decoration: underline;"&gt;codec&lt;/SPAN&gt;\r\n"&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* protocol: i2s&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* sampleRate: 48K&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* &lt;SPAN style="text-decoration: underline;"&gt;bitwidth&lt;/SPAN&gt;:16&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;*/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt; (CODEC_Init(&amp;amp;codecHandle, &amp;amp;boardCodecConfig) != &lt;SPAN style="color: #0000c0;"&gt;&lt;EM&gt;kStatus_Success&lt;/EM&gt;&lt;/SPAN&gt;)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;{&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PRINTF(&lt;/SPAN&gt;"WM8904_Init failed!\r\n"&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Initial volume kept low for hearing safety. */&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Adjust it to your needs, 0x0006 for -51 dB, 0x0039 for 0 dB etc. */&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;CODEC_SetVolume(&amp;amp;codecHandle, &lt;/SPAN&gt;&lt;EM&gt;kCODEC_PlayChannelHeadphoneLeft&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt; | &lt;/SPAN&gt;&lt;EM&gt;kCODEC_PlayChannelHeadphoneRight&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;, 0x0030);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PRINTF(&lt;/SPAN&gt;"Configure I2S\r\n"&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;/*&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* masterSlave = kI2S_MasterSlaveNormalMaster;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* mode = kI2S_ModeI2sClassic;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* rightLow = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* leftJust = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* pdmData = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* sckPol = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* wsPol = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* divider = 1;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* oneChannel = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* dataLength = 16;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* frameLength = 32;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* position = 0;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* &lt;SPAN style="text-decoration: underline;"&gt;watermark&lt;/SPAN&gt; = 4;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* txEmptyZero = true;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* pack48 = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;*/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxGetDefaultConfig(&amp;amp;s_TxConfig);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_TxConfig.&lt;SPAN style="color: #0000c0;"&gt;divider&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= DEMO_I2S_CLOCK_DIVIDER;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_TxConfig.&lt;SPAN style="color: #0000c0;"&gt;masterSlave&lt;/SPAN&gt; = DEMO_I2S_TX_MODE;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;/*&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* masterSlave = kI2S_MasterSlaveNormalSlave;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* mode = kI2S_ModeI2sClassic;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* rightLow = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* leftJust = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* pdmData = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* sckPol = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* wsPol = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* divider = 1;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* oneChannel = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* dataLength = 16;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* frameLength = 32;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* position = 0;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* &lt;SPAN style="text-decoration: underline;"&gt;watermark&lt;/SPAN&gt; = 4;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* txEmptyZero = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;* pack48 = false;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;*/&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxGetDefaultConfig(&amp;amp;s_RxConfig);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_RxConfig.&lt;SPAN style="color: #0000c0;"&gt;divider&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= DEMO_I2S_CLOCK_DIVIDER; &lt;SPAN style="color: #3f7f5f;"&gt;// was s_TxConfig.divider&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_RxConfig.&lt;SPAN style="color: #0000c0;"&gt;masterSlave&lt;/SPAN&gt; = DEMO_I2S_RX_MODE;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxInit(DEMO_I2S_TX, &amp;amp;s_TxConfig);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxInit(DEMO_I2S_RX, &amp;amp;s_RxConfig);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;StartDigitalLoopback();&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;while&lt;/STRONG&gt;&lt;/SPAN&gt; (1)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;// Begin DSP processing using the int16_t pointers tx_buf and rx_buf to the ping or &lt;SPAN style="text-decoration: underline;"&gt;pong&lt;/SPAN&gt; buffers&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;// For a LUT &lt;SPAN style="text-decoration: underline;"&gt;sinusoid&lt;/SPAN&gt; put table values in left and right channels using a modulo table index&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt; ((tx_ready &amp;amp;&amp;amp; rx_ready)) {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;for&lt;/STRONG&gt;&lt;/SPAN&gt; (n=0; n &amp;lt; NSAMPS; n++) {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_buf[2*n] = onek_table[table_indexL]; &lt;SPAN style="color: #3f7f5f;"&gt;//rx_buf[2*n]; // Process left samples&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_buf[2*n+1] = onek_table[table_indexR]; &lt;SPAN style="color: #3f7f5f;"&gt;//rx_buf[2*n+1]; // Process right samples&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;table_indexL = (table_indexL + 1) % N_period; &lt;SPAN style="color: #3f7f5f;"&gt;// stride by 1 &amp;lt;=&amp;gt; 1 kHz&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;table_indexR = (table_indexR + 2) % N_period; &lt;SPAN style="color: #3f7f5f;"&gt;// stride by 2 &amp;lt;=&amp;gt; 2 kHz&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;tx_ready = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;rx_ready = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;StartDigitalLoopback&lt;/STRONG&gt;(&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt;)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #2a00ff; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;PRINTF(&lt;/SPAN&gt;"Setup digital &lt;SPAN style="text-decoration: underline;"&gt;loopback&lt;/SPAN&gt;\r\n"&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_TxTransfer_ping.&lt;SPAN style="color: #0000c0;"&gt;data&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &amp;amp;tx_ping[0]; &lt;SPAN style="color: #3f7f5f;"&gt;// &amp;amp;s_Buffer[0];&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_TxTransfer_ping.&lt;SPAN style="color: #0000c0;"&gt;dataSize&lt;/SPAN&gt; = &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;sizeof&lt;/STRONG&gt;&lt;/SPAN&gt;(tx_ping); &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_RxTransfer_ping.&lt;SPAN style="color: #0000c0;"&gt;data&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &amp;amp;rx_ping[0]; &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_RxTransfer_ping.&lt;SPAN style="color: #0000c0;"&gt;dataSize&lt;/SPAN&gt; = &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;sizeof&lt;/STRONG&gt;&lt;/SPAN&gt;(rx_ping); &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;s_TxTransfer_pong.&lt;SPAN style="color: #0000c0;"&gt;data&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &amp;amp;tx_pong[0]; &lt;SPAN style="color: #3f7f5f;"&gt;// &amp;amp;s_Buffer[0];&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;s_TxTransfer_pong.&lt;SPAN style="color: #0000c0;"&gt;dataSize&lt;/SPAN&gt; = &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;sizeof&lt;/STRONG&gt;&lt;/SPAN&gt;(tx_pong); &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;s_RxTransfer_pong.&lt;SPAN style="color: #0000c0;"&gt;data&lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;= &amp;amp;rx_pong[0]; &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;s_RxTransfer_pong.&lt;SPAN style="color: #0000c0;"&gt;dataSize&lt;/SPAN&gt; = &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;sizeof&lt;/STRONG&gt;&lt;/SPAN&gt;(rx_pong); &lt;SPAN style="color: #3f7f5f;"&gt;// was s_Buffer, etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxTransferCreateHandle(DEMO_I2S_TX, &amp;amp;s_TxHandle, TxCallback, NULL); &lt;SPAN style="color: #3f7f5f;"&gt;//(void *)&amp;amp;s_TxTransfer);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxTransferCreateHandle(DEMO_I2S_RX, &amp;amp;s_RxHandle, RxCallback, NULL); &lt;SPAN style="color: #3f7f5f;"&gt;//(void *)&amp;amp;s_RxTransfer);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxTransferNonBlocking(DEMO_I2S_RX, &amp;amp;s_RxHandle, s_RxTransfer_ping);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxTransferNonBlocking(DEMO_I2S_TX, &amp;amp;s_TxHandle, s_TxTransfer_ping);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue next buffer right away so there is no drop in audio data stream when the first buffer finishes */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_RxTransferNonBlocking(DEMO_I2S_RX, &amp;amp;s_RxHandle, s_RxTransfer_pong);&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;I2S_TxTransferNonBlocking(DEMO_I2S_TX, &amp;amp;s_TxHandle, s_TxTransfer_pong);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;// Start with pointer &lt;SPAN style="text-decoration: underline;"&gt;tx&lt;/SPAN&gt; processing buffer pointed to &lt;SPAN style="text-decoration: underline;"&gt;pong&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;tx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) tx_pong;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;// Start with pointer &lt;SPAN style="text-decoration: underline;"&gt;rx&lt;/SPAN&gt; processing buffer pointed to &lt;SPAN style="text-decoration: underline;"&gt;pong&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;rx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) rx_pong;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;TxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue the same original buffer all over again */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; (completionStatus == &lt;/SPAN&gt;&lt;EM&gt;kStatus_I2S_BufferComplete&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;{&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_ready = true;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue next buffer */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt; (tx_pp) {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;I2S_TxTransferNonBlocking(base, handle, s_TxTransfer_pong);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Set pointer to proper left &amp;amp; right interleaved &lt;SPAN style="text-decoration: underline;"&gt;tx&lt;/SPAN&gt; processing buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) tx_ping;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Begin filling the ping buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_pp = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;else&lt;/STRONG&gt;&lt;/SPAN&gt; {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;I2S_TxTransferNonBlocking(base, handle, s_TxTransfer_ping);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Set pointer to proper left &amp;amp; right interleaved &lt;SPAN style="text-decoration: underline;"&gt;tx&lt;/SPAN&gt; processing buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) tx_ping;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Begin filling the ping buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_pp = true;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;tx_ready = true;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;static&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;STRONG&gt;RxCallback&lt;/STRONG&gt;(&lt;SPAN style="color: #005032;"&gt;I2S_Type&lt;/SPAN&gt; *base, &lt;SPAN style="color: #005032;"&gt;i2s_handle_t&lt;/SPAN&gt; *handle, &lt;SPAN style="color: #005032;"&gt;status_t&lt;/SPAN&gt; completionStatus, &lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;void&lt;/STRONG&gt;&lt;/SPAN&gt; *userData)&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;//&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;/* Enqueue the same original buffer all over again */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="color: #0000c0; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt; (completionStatus == &lt;/SPAN&gt;&lt;EM&gt;kStatus_I2S_BufferComplete&lt;/EM&gt;&lt;SPAN style="color: #000000;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;{&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;//&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_ready = true;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/* Enqueue next buffer */&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;if&lt;/STRONG&gt;&lt;/SPAN&gt; (tx_pp) {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;I2S_RxTransferNonBlocking(base, handle, s_RxTransfer_pong);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Set pointer to proper left &amp;amp; right interleaved &lt;SPAN style="text-decoration: underline;"&gt;rx&lt;/SPAN&gt; processing buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) rx_ping;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Begin emptying the &lt;SPAN style="text-decoration: underline;"&gt;pong&lt;/SPAN&gt; buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_pp = false;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #7f0055;"&gt;&lt;STRONG&gt;else&lt;/STRONG&gt;&lt;/SPAN&gt; {&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;I2S_RxTransferNonBlocking(base, handle, s_RxTransfer_ping);&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Set pointer to proper left &amp;amp; right interleaved &lt;SPAN style="text-decoration: underline;"&gt;rx&lt;/SPAN&gt; processing buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_buf = (&lt;SPAN style="color: #005032;"&gt;int16_t&lt;/SPAN&gt; *) rx_pong;&lt;/P&gt;&lt;P style="color: #3f7f5f; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;// Begin emptying the ping buffer&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_pp = true;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;rx_ready = true;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;}&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;Screen shot when using 50 sample input and output ping-pong buffers, which give ~2ms end-to-end latency.&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&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/116719i9DE3BE821409C036/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;Any suggestions? Should I have a dedicated interrupt while I transfer and process the samples?&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px;"&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Jul 2020 13:34:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070569#M2478</guid>
      <dc:creator>mwickert</dc:creator>
      <dc:date>2020-07-23T13:34:49Z</dc:date>
    </item>
    <item>
      <title>Re: Real-time DSP using the LPC55S69 i2s Examples</title>
      <link>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070570#M2479</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hope you are well. I've been checking your code with detail and the description&amp;nbsp; you provided. I believe the interrupts are fine, they should remain as simple as possible to not bring any unnecessary delays. I noticed in your transfer call back you are filling the ping on both conditions of the IF statement. Is this correct?&lt;/P&gt;&lt;P&gt;An additional feature that you could implement is as soon as you finish the process of the sample trigger DMA transfer. You may use the example provided in the SDK called i2s_dma_record_playback. It is pretty much what you have in your code above with the added DMA.&lt;/P&gt;&lt;P&gt;Let me know your results.&lt;/P&gt;&lt;P&gt;Sabina&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Aug 2020 15:33:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCUXpresso-SDK/Real-time-DSP-using-the-LPC55S69-i2s-Examples/m-p/1070570#M2479</guid>
      <dc:creator>Sabina_Bruce</dc:creator>
      <dc:date>2020-08-04T15:33:51Z</dc:date>
    </item>
  </channel>
</rss>

