Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 9 months ago.
K64F USB Host IRQ Interrupt Not Triggering
Hello,
So, I am trying to get the K64F to act as a USB Host to an external USB device. I am using the library "F401RE-USBHost" as a starting point.
I've seem to isolate the issue when setting up the USB IRQ Callback. It never gets called when I am unplugging/replugging in devices.
I believe it has to do something with this bit of code:
K64F Setting up as USB Host
// Disable IRQ NVIC_DisableIRQ(USB0_IRQn); #if defined(TARGET_K64F) MPU->CESR=0; #endif // choose usb src as PLL SIM->SOPT2 |= (SIM_SOPT2_USBSRC_MASK | SIM_SOPT2_PLLFLLSEL_MASK); // enable OTG clock SIM->SCGC4 |= SIM_SCGC4_USBOTG_MASK; // USB Module Configuration // Reset USB Module USB0->USBTRC0 |= USB_USBTRC0_USBRESET_MASK; while(USB0->USBTRC0 & USB_USBTRC0_USBRESET_MASK); // Clear interrupt flag USB0->ISTAT = 0xff; // Set BDT Base Register USB0->BDTPAGE1=(uint8_t)((uint32_t)bdt>>8); USB0->BDTPAGE2=(uint8_t)((uint32_t)bdt>>16); USB0->BDTPAGE3=(uint8_t)((uint32_t)bdt>>24); // Set SOF threshold USB0->SOFTHLD = USB_SOFTHLD_CNT(1); // pulldown D+ and D- USB0->USBCTRL = USB_USBCTRL_PDE_MASK; USB0->USBTRC0 |= 0x40; // Host mode USB0->CTL |= USB_CTL_HOSTMODEEN_MASK; // Desable SOF packet generation USB0->CTL &= ~USB_CTL_USBENSOFEN_MASK; NVIC_SetVector(USB0_IRQn, (uint32_t)&_usbisr); NVIC_EnableIRQ(USB0_IRQn); USB0->INTEN = USB_INTEN_ATTACHEN_MASK; //(waiting here for the callback)
I have 2 questions....
1. Does anything seem wrong in the code above for the K64F acting as a USB Host?
2. I'm new to this world, my background is software development, where would I figure out what all these specific defines mean? For example, is there any documentation that says explicitly what "USB_USBCTRL_PDE_MASK" does? Besides reading the comment, where am I suppose to find some of this information? It may help me understand what's going on.
Thanks in advance.
1 Answer
9 years, 9 months ago.
2 I can answer, you need the reference manual for that: http://cache.freescale.com/files/microcontrollers/doc/ref_manual/K64P144M120SF5RM.pdf. That register is found on page 1312. The _MASK defines are bitmasks, (in this case it is equal to (1<<6)), it is defined somewhere in the source code, but it simply refers to the PDE bit, which is:
Enables the weak pulldowns on the USB transceiver. 0 Weak pulldowns are disabled on D+ and D–. 1 Weak pulldowns are enabled on D+ and D–.
I'm trying to get this to work too. I noticed that if I use r89 of the mbed libraries instead of r90 through r94, the interrupts occur as expected.
posted by Glen Akins 01 Mar 2015Hi Jeff and Glen, have you finally managed to make this code work ? Was it a simple matter of mbed library version or have you made some changes in the initial code ?
posted by Abraham Brolh 03 Nov 2016