<?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 LPCUSB lpc1769 BulkIn ACK interrupts in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCUSB-lpc1769-BulkIn-ACK-interrupts/m-p/524096#M6732</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gnxp on Mon Feb 23 06:11:42 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I deleted a similar previous post after realising some gaps in my understanding. This post is to ask my query more clearly.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Environment - LPCUSB for lpc1769(from code RDB CMSIS)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;After browsing some forum topics, I decided to use LPCUSB(Bertrik Sikken) as I found the code simple to follow. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am failing here -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When I transfer more than 64 bytes on BulkIn, I expect to get a BulkIn Ack after transfer is completed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Procedure is simple - &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1. First 'NextBulkIn' call is from my firmware. I set BulkInBusy = true; Step 1 happens only if BulkInBusy is false.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. Read data from buffer, send to EP. If data&amp;gt;64 bytes, BulkInBusy&amp;nbsp; stays true.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; I expect to get a BulkIn ACK interrupt. Read data from buffer again and send to EP. If data &amp;lt;64 this time or 0, set BulkIn to false. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3. This allows me to start from step1 again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The issue is I don't get any BulkIn ACK interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;###################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;I&gt;static void NextBulkIn(U8 bEP)&lt;BR /&gt;{&lt;BR /&gt;/** Read cnt from buff and do USBHwEPWrite **/&lt;BR /&gt;&lt;BR /&gt;if (cnt &amp;lt; MAX_PACKET_SIZE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BulkInBusy = false;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;static void BulkIn(U8 bEP, U8 bEPStatus)&lt;BR /&gt;{&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_ERROR)&lt;BR /&gt;goto err;&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_STALLED)&lt;BR /&gt;goto err;&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_DATA)// No buffer empty&lt;BR /&gt;goto err;&lt;BR /&gt;&lt;BR /&gt;NextBulkIn(bEP);&lt;BR /&gt;return;&lt;BR /&gt;&lt;BR /&gt;err:&lt;BR /&gt;BulkInBusy = false;&lt;BR /&gt;}&lt;/I&gt;&lt;BR /&gt;&lt;SPAN&gt;#########################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;First call to NextBulkIn is from firmware if BulkInBusy =false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am sure interrupts are enabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;I&gt;From Init func,&lt;BR /&gt;USBHwRegisterEPIntHandler(BULK_IN_EP, BulkIn);&lt;BR /&gt;&lt;BR /&gt;which calls in LPCUSB&lt;BR /&gt;&lt;BR /&gt;void USBHwRegisterEPIntHandler(U8 bEP, TFnEPIntHandler *pfnHandler)&lt;BR /&gt;{&lt;BR /&gt;int idx;&lt;BR /&gt;&lt;BR /&gt;idx = EP2IDX(bEP);&lt;BR /&gt;&lt;BR /&gt;ASSERT(idx&amp;lt;32);&lt;BR /&gt;&lt;BR /&gt;/* add handler to list of EP handlers */&lt;BR /&gt;_apfnEPIntHandlers[idx / 2] = pfnHandler;&lt;BR /&gt;&lt;BR /&gt;/* enable EP interrupt */&lt;BR /&gt;LPC_USB-&amp;gt;USBEpIntEn |= (1 &amp;lt;&amp;lt; idx);&lt;BR /&gt;LPC_USB-&amp;gt;USBDevIntEn |= EP_SLOW;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;From init function&lt;BR /&gt;USBHwNakIntEnable(0)&lt;BR /&gt;&lt;BR /&gt;which calls in LPCUSB&lt;BR /&gt;void USBHwNakIntEnable(U8 bIntBits)&lt;BR /&gt;{&lt;BR /&gt;USBHwCmdWrite(CMD_DEV_SET_MODE, bIntBits);&lt;BR /&gt;}&lt;/I&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;############################################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So if I am setting cmd data to be 0 for DEV_SET_MODE, I think all ACK's should be enabled.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if USBEpIntEn , USBDevIntEn and DEV_SET_MODE all are OK, any clues why am I still not receiving any BulkIn ACK interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 16:48:09 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T16:48:09Z</dc:date>
    <item>
      <title>LPCUSB lpc1769 BulkIn ACK interrupts</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCUSB-lpc1769-BulkIn-ACK-interrupts/m-p/524096#M6732</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gnxp on Mon Feb 23 06:11:42 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I deleted a similar previous post after realising some gaps in my understanding. This post is to ask my query more clearly.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Environment - LPCUSB for lpc1769(from code RDB CMSIS)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;After browsing some forum topics, I decided to use LPCUSB(Bertrik Sikken) as I found the code simple to follow. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am failing here -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When I transfer more than 64 bytes on BulkIn, I expect to get a BulkIn Ack after transfer is completed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Procedure is simple - &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1. First 'NextBulkIn' call is from my firmware. I set BulkInBusy = true; Step 1 happens only if BulkInBusy is false.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. Read data from buffer, send to EP. If data&amp;gt;64 bytes, BulkInBusy&amp;nbsp; stays true.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; I expect to get a BulkIn ACK interrupt. Read data from buffer again and send to EP. If data &amp;lt;64 this time or 0, set BulkIn to false. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3. This allows me to start from step1 again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The issue is I don't get any BulkIn ACK interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;###################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;I&gt;static void NextBulkIn(U8 bEP)&lt;BR /&gt;{&lt;BR /&gt;/** Read cnt from buff and do USBHwEPWrite **/&lt;BR /&gt;&lt;BR /&gt;if (cnt &amp;lt; MAX_PACKET_SIZE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BulkInBusy = false;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;static void BulkIn(U8 bEP, U8 bEPStatus)&lt;BR /&gt;{&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_ERROR)&lt;BR /&gt;goto err;&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_STALLED)&lt;BR /&gt;goto err;&lt;BR /&gt;if (bEPStatus &amp;amp; EP_STATUS_DATA)// No buffer empty&lt;BR /&gt;goto err;&lt;BR /&gt;&lt;BR /&gt;NextBulkIn(bEP);&lt;BR /&gt;return;&lt;BR /&gt;&lt;BR /&gt;err:&lt;BR /&gt;BulkInBusy = false;&lt;BR /&gt;}&lt;/I&gt;&lt;BR /&gt;&lt;SPAN&gt;#########################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;First call to NextBulkIn is from firmware if BulkInBusy =false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am sure interrupts are enabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;I&gt;From Init func,&lt;BR /&gt;USBHwRegisterEPIntHandler(BULK_IN_EP, BulkIn);&lt;BR /&gt;&lt;BR /&gt;which calls in LPCUSB&lt;BR /&gt;&lt;BR /&gt;void USBHwRegisterEPIntHandler(U8 bEP, TFnEPIntHandler *pfnHandler)&lt;BR /&gt;{&lt;BR /&gt;int idx;&lt;BR /&gt;&lt;BR /&gt;idx = EP2IDX(bEP);&lt;BR /&gt;&lt;BR /&gt;ASSERT(idx&amp;lt;32);&lt;BR /&gt;&lt;BR /&gt;/* add handler to list of EP handlers */&lt;BR /&gt;_apfnEPIntHandlers[idx / 2] = pfnHandler;&lt;BR /&gt;&lt;BR /&gt;/* enable EP interrupt */&lt;BR /&gt;LPC_USB-&amp;gt;USBEpIntEn |= (1 &amp;lt;&amp;lt; idx);&lt;BR /&gt;LPC_USB-&amp;gt;USBDevIntEn |= EP_SLOW;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;From init function&lt;BR /&gt;USBHwNakIntEnable(0)&lt;BR /&gt;&lt;BR /&gt;which calls in LPCUSB&lt;BR /&gt;void USBHwNakIntEnable(U8 bIntBits)&lt;BR /&gt;{&lt;BR /&gt;USBHwCmdWrite(CMD_DEV_SET_MODE, bIntBits);&lt;BR /&gt;}&lt;/I&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;############################################################################&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So if I am setting cmd data to be 0 for DEV_SET_MODE, I think all ACK's should be enabled.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if USBEpIntEn , USBDevIntEn and DEV_SET_MODE all are OK, any clues why am I still not receiving any BulkIn ACK interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:48:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCUSB-lpc1769-BulkIn-ACK-interrupts/m-p/524096#M6732</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:48:09Z</dc:date>
    </item>
  </channel>
</rss>

