<?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: modifying usbhidrom with own system clock setup in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574002#M21695</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by pproc on Tue Dec 14 01:18:04 MST 2010&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Checking the registers immediately after the call to &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(*rom)-&amp;gt;pUSBD-&amp;gt;init_clk_pins();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I find that &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;USBPLLCLKSEL = 1&amp;nbsp;&amp;nbsp; (select system oscillator : 12MHz crystal - OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBPLLCTRL&amp;nbsp; = 3&amp;nbsp;&amp;nbsp;&amp;nbsp; (output = 12*4/1 = 48MHz&amp;nbsp; - OK) &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but the USBCLKSEL register is set to 1, which selects the main clock for USB instead of the USB PLL output !! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Why ?!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 01:07:43 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T01:07:43Z</dc:date>
    <item>
      <title>modifying usbhidrom with own system clock setup</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/573999#M21692</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by pproc on Fri Dec 10 03:04:14 MST 2010&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using the built-in rom based usbhid driver on the lpc1343 for my application and so far functionality is OK. Now I would like to optimize the system clock for power consumption.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I commented out the call to the rom based init_clk_pins() function in the usbhidrom example.&amp;nbsp; Replaced this with my code setting system clock to 12MHz and the usb clock using the usb pll to 48MHz, and initialized the usb io pins.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With just the modifications i have made so far, my application code runs fine, enumeration as HID works, the usb setreport function works, but the getreport function is never being called. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Since the usbhidrom driver uses CT32B1 internally - my question is, what do i need to do in my code to initialize CT32B1 given that I have modified the system clock to 12Mhz. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there anything else i am missing as well ?&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards hari&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:07:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/573999#M21692</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:07:40Z</dc:date>
    </item>
    <item>
      <title>Re: modifying usbhidrom with own system clock setup</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574000#M21693</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by NXP_USA on Fri Dec 10 09:41:33 MST 2010&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;init_clk_pins() does not configure the timer, it only enables the USB phy, sets up the chip to run from the crystal at 48 MHz, and connects the USB pins (pin func selection).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There shouldn't be anything that the function does which would enable or disable the getreport callback given that setreport is working fine.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When you set up the USB clock did you use the external crystal oscillator? The internal RC oscillator cannot be used to drive USB.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-NXP&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:07:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574000#M21693</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:07:41Z</dc:date>
    </item>
    <item>
      <title>Re: modifying usbhidrom with own system clock setup</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574001#M21694</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by pproc on Fri Dec 10 22:02:17 MST 2010&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, I am using the 12MHz crystal on the evalboard. Sorry, should have shown the code in the first post itself !&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_Config();
&amp;nbsp;&amp;nbsp;&amp;nbsp; comm_USBInit();
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
}


void clk_Config(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;PDRUNCFG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~(1 &amp;lt;&amp;lt; 5);&amp;nbsp;&amp;nbsp; // Power-up System Osc
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSOSCCTRL&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;// not bypassed
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 200; i++) Nop();
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSPLLCLKSEL&amp;nbsp; = 1;&amp;nbsp;&amp;nbsp; // system oscillator
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSPLLCLKUEN&amp;nbsp; = 1;&amp;nbsp; // Update Clock Source
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSPLLCLKUEN&amp;nbsp; = 0;&amp;nbsp; // Toggle Update Register
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSPLLCLKUEN&amp;nbsp; = 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(LPC_SYSCON-&amp;gt;SYSPLLCLKUEN &amp;amp; 0x01));&amp;nbsp; // Wait Until Updated
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSPLLCTRL&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0; // (out = sys_osc*1)/1
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;PDRUNCFG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~(1 &amp;lt;&amp;lt; 7);&amp;nbsp; // Power-up SYSPLL
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(LPC_SYSCON-&amp;gt;SYSPLLSTAT &amp;amp; 0x01)); // Wait Until PLL Locked
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;MAINCLKSEL&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sys_pll_out 3.5.15
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;MAINCLKUEN&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Update MCLK Clock Source
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;MAINCLKUEN&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Toggle Update Register
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;MAINCLKUEN&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(LPC_SYSCON-&amp;gt;MAINCLKUEN &amp;amp; 0x01)); // Wait Until Updated
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClock = 12000000;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

void comm_USBInit(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile int n;

&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.idVendor = USB_VENDOR_ID;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.idProduct = USB_PRODUCT_ID;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.bcdDevice = USB_DEVICE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.StrDescPtr = (uint32_t)&amp;amp;USB_StringDescriptor[0];
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.InReportCount = GET_PKT_NBYTES;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.OutReportCount = SET_PKT_NBYTES;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.SampleInterval = GET_PKT_INTERVAL_MS;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.InReport = GetInReport;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HidDevInfo.OutReport = SetOutReport;

&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceInfo.DevDetailPtr = (uint32_t)&amp;amp;HidDevInfo;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable Timer32_1, IOCON, and USB blocks (for USB ROM driver)
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG);
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Setup USB clock
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;PDRUNCFG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~(1 &amp;lt;&amp;lt; 10);&amp;nbsp; // usb phy powered
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;PDRUNCFG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~(1 &amp;lt;&amp;lt;&amp;nbsp; 8);&amp;nbsp; // usb pll powered

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBPLLCLKSEL&amp;nbsp; = 1; // system oscillator
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBPLLCLKUEN&amp;nbsp; = 1; // Update pll clock Source
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBPLLCLKUEN&amp;nbsp; = 0; // toggle
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBPLLCLKUEN&amp;nbsp; = 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(LPC_SYSCON-&amp;gt;USBPLLCLKUEN &amp;amp; 0x01));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait Until Updated

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBPLLCTRL&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3; // (sys_osc * 4)/ 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.5.5
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(LPC_SYSCON-&amp;gt;USBPLLSTAT&amp;nbsp;&amp;nbsp; &amp;amp; 1));&amp;nbsp; // Wait Until PLL Locked
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;USBCLKSEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Select USB PLL out 3.5.23

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set USB pin functions
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_1 &amp;amp;= ~0x07;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_1 |= 0x03;&amp;nbsp;&amp;nbsp; // usb ftoggle

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_3 &amp;amp;= ~0x1F;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_3 |= 0x01;&amp;nbsp;&amp;nbsp; // usb vbus, no pullup/dn

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_6 &amp;amp;= ~0x07;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_6 |= 0x01;&amp;nbsp;&amp;nbsp; // usb soft connect

&amp;nbsp;&amp;nbsp;&amp;nbsp; gGetPktCntr = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; gSetPktCntr = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // clock PLL and pin init function in rom
&amp;nbsp;&amp;nbsp;&amp;nbsp; // unused 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //(*rom)-&amp;gt;pUSBD-&amp;gt;init_clk_pins();

&amp;nbsp;&amp;nbsp;&amp;nbsp; // insert a delay between clk init and usb init
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (n = 0; n &amp;lt; 75; n++) {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; (*rom)-&amp;gt;pUSBD-&amp;gt;init(&amp;amp;DeviceInfo);
&amp;nbsp;&amp;nbsp;&amp;nbsp; (*rom)-&amp;gt;pUSBD-&amp;gt;connect(TRUE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;Is there any issue with setting the system clock independently?&amp;nbsp; What is CT32B1 used for ?&amp;nbsp; I looked for the usbhidrom source code but haven't found it - is that public ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any info would be appreciated - thanks !&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:07:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574001#M21694</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:07:42Z</dc:date>
    </item>
    <item>
      <title>Re: modifying usbhidrom with own system clock setup</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574002#M21695</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by pproc on Tue Dec 14 01:18:04 MST 2010&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Checking the registers immediately after the call to &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(*rom)-&amp;gt;pUSBD-&amp;gt;init_clk_pins();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I find that &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;USBPLLCLKSEL = 1&amp;nbsp;&amp;nbsp; (select system oscillator : 12MHz crystal - OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBPLLCTRL&amp;nbsp; = 3&amp;nbsp;&amp;nbsp;&amp;nbsp; (output = 12*4/1 = 48MHz&amp;nbsp; - OK) &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but the USBCLKSEL register is set to 1, which selects the main clock for USB instead of the USB PLL output !! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Why ?!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:07:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/modifying-usbhidrom-with-own-system-clock-setup/m-p/574002#M21695</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:07:43Z</dc:date>
    </item>
  </channel>
</rss>

