<?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: SAI demo in MQX in Kinetis Software Development Kit</title>
    <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419969#M2129</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;"&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;However, when using MQX this is no longer possible as the MQX kernel requires those IRQHandler names for its own interrupt handling. It is therefore necessary for the application developer to use a different name for the peripheral driver IRQ handler. The convention used in KSDK is pre-append the IRQHandler name with MQX"&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Well, I guess I need to read more of the MQX documentation.&amp;nbsp; Thanks for pointing me to that.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 23 Jun 2015 12:25:17 GMT</pubDate>
    <dc:creator>kalden_srcinc</dc:creator>
    <dc:date>2015-06-23T12:25:17Z</dc:date>
    <item>
      <title>SAI demo in MQX</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419965#M2125</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to get the SAI demo code running within an MQX task on a TWR-K64F120M.&amp;nbsp; The normal demo works fine, but in my own project which includes MQX, the first I2C register write causes a problem.&amp;nbsp; Stepping through with the debugger it just hangs at I2C_DRV_SendAddress.&amp;nbsp; Inside this function, the first call to I2C_HAL_WriteByte succeeds, but the second hangs.&amp;nbsp; interrupting in the debugger just shows it somewhere in the kernel.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;P&gt;Breakpoint 2, I2C_DRV_SendAddress (instance=0, device=0x1fff10a0 &amp;lt;g_codecHandler+4&amp;gt;, cmdBuff=0x1fff8e40 "", cmdSize=2, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; direction=kI2CSend, timeout_ms=4294967295)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at KSDK_1.2.0/platform/drivers/src/i2c/fsl_i2c_master_driver.c:508&lt;/P&gt;&lt;P&gt;508&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(instance &amp;lt; I2C_INSTANCE_COUNT);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;510&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_Type * base = g_i2cBase[instance];&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;512&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_master_state_t * master = (i2c_master_state_t *)g_i2cStatePtr[instance];&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;516&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t addrBuff[2] = {0};&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;517&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t addrSize = 0;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;518&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool isMainXferBlocking = master-&amp;gt;isBlocking;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;521&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;isRequesting = true;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;522&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;isBlocking = true;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;527&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directionBit = (direction == kI2CReceive) ? 0x1U : 0x0U;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;530&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; is10bitAddr = ((device-&amp;gt;address &amp;gt;&amp;gt; 10U) == 0x1EU) ? true : false;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;533&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (is10bitAddr)&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrByte1 = (uint8_t)device-&amp;gt;address;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;546&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrByte1 = addrByte1 &amp;lt;&amp;lt; 1U;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;549&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrByte1 |= (uint8_t)((is10bitAddr || cmdBuff) ? 0U : directionBit);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;552&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addrBuff[addrSize++] = addrByte1;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;554&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (is10bitAddr)&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;561&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;txBuff = addrBuff;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;562&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;txSize = addrSize;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;565&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_HAL_WriteByte(base, addrBuff[0]);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;568&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_DRV_MasterWait(instance, timeout_ms);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;571&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((master-&amp;gt;status == kStatus_I2C_Success) &amp;amp;&amp;amp; cmdBuff)&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;573&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;txBuff = cmdBuff;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;574&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; master-&amp;gt;txSize = cmdSize;&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;577&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_HAL_WriteByte(base, *cmdBuff);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;580&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_DRV_MasterWait(instance, timeout_ms);&lt;/P&gt;&lt;P&gt;(gdb) n&lt;/P&gt;&lt;P&gt;^C&lt;/P&gt;&lt;P&gt;Program received signal SIGTRAP, Trace/breakpoint trap.&lt;/P&gt;&lt;P&gt;0x00014f76 in _int_default_isr (vector_number=0x3 &amp;lt;__isr_vector+3&amp;gt;)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at KSDK_1.2.0/rtos/mqx/mqx/source/kernel/int.c:64&lt;/P&gt;&lt;P&gt;64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _GET_KERNEL_DATA(kernel_data);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have also traced this through from the IRQ side.&amp;nbsp; I see I2C0_IRQHandler get called.&amp;nbsp; This makes it all the way down through I2C_DRV_CompleteTransfer and ultimately hangs inside OSA_SemaPost.&amp;nbsp; Diving into OSA_SemaPost leads me down into _lwsem_post where everything seems to work until it gets to _INT_ENABLE() and hangs.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm not really sure where to go from here, so any advice would be appreciated.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Jun 2015 17:05:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419965#M2125</guid>
      <dc:creator>kalden_srcinc</dc:creator>
      <dc:date>2015-06-22T17:05:54Z</dc:date>
    </item>
    <item>
      <title>Re: SAI demo in MQX</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419966#M2126</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So it seems to be related to the interrupt handler.&amp;nbsp; I was using the I2C handlers defined in drivers/i2c/fsl_i2c_irq.c. I was able to get breakpoints to hit in these calls, so they seemed to be correct and even tried adding OSA_InstallIntHandler(I2C0_IRQn, I2C0_IRQHandler); for good measure.&amp;nbsp; Basically, If I compile in fsl_i2c_irq.c, no matter what I do, nothing works.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My solution was to create my own functionally equivalent copy of the interrupt handler and register it with manually:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;void MQX_I2C0_IRQHandler(void) { I2C_DRV_IRQHandler(I2C0_IDX); }&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;OSA_InstallIntHandler(I2C0_IRQn, MQX_I2C0_IRQHandler);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;This got me past configuration, but now I get a hangup on DMA.&amp;nbsp; I'm going to try manually registering those ISRs next.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Jun 2015 18:11:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419966#M2126</guid>
      <dc:creator>kalden_srcinc</dc:creator>
      <dc:date>2015-06-22T18:11:00Z</dc:date>
    </item>
    <item>
      <title>Re: SAI demo in MQX</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419967#M2127</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So I did the same thing with edma and i2s ISRs and now things seem to work.&amp;nbsp; It wasn't enough just to define my own copies of thes functions and not compile in the built in SDK versions.&amp;nbsp; I had to actually rename the ISR before things would start working. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm glad it works, but it doesn't seem like the proper fix.&amp;nbsp; Does anyone know what is really going on here?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Jun 2015 18:36:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419967#M2127</guid>
      <dc:creator>kalden_srcinc</dc:creator>
      <dc:date>2015-06-22T18:36:17Z</dc:date>
    </item>
    <item>
      <title>Re: SAI demo in MQX</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419968#M2128</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Renaming the ISR is what I believe you're supposed to do per this writeup:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/docs/DOC-103966"&gt;How To: Using Interrupt Handlers in MQX with KSDK&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 23 Jun 2015 02:59:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419968#M2128</guid>
      <dc:creator>fnaeem</dc:creator>
      <dc:date>2015-06-23T02:59:06Z</dc:date>
    </item>
    <item>
      <title>Re: SAI demo in MQX</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419969#M2129</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;"&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;However, when using MQX this is no longer possible as the MQX kernel requires those IRQHandler names for its own interrupt handling. It is therefore necessary for the application developer to use a different name for the peripheral driver IRQ handler. The convention used in KSDK is pre-append the IRQHandler name with MQX"&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Well, I guess I need to read more of the MQX documentation.&amp;nbsp; Thanks for pointing me to that.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 23 Jun 2015 12:25:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/SAI-demo-in-MQX/m-p/419969#M2129</guid>
      <dc:creator>kalden_srcinc</dc:creator>
      <dc:date>2015-06-23T12:25:17Z</dc:date>
    </item>
  </channel>
</rss>

