Дык вот передо мной на столе... LPC1758. Работает... Вот процедурка прерывания (она полностью из примера) void USB_IRQHandler (void)
{
USB_INT32U int_status;
USB_INT32U ie_status;
int_status = USB->HcInterruptStatus; /* Read Interrupt Status */
ie_status = USB->HcInterruptEnable; /* Read Interrupt enable status */
if (!(int_status & ie_status)) {
return;
} else {
int_status = int_status & ie_status;
if (int_status & OR_INTR_STATUS_RHSC) { /* Root hub status change interrupt */
if (USB->HcRhPortStatus1 & OR_RH_PORT_CSC) {
if (USB->HcRhStatus & OR_RH_STATUS_DRWE) {
/*
* When DRWE is on, Connect Status Change
* means a remote wakeup event.
*/
HOST_RhscIntr = 1;// JUST SOMETHING FOR A BREAKPOINT
}
else {
/*
* When DRWE is off, Connect Status Change
* is NOT a remote wakeup event
*/
if (USB->HcRhPortStatus1 & OR_RH_PORT_CCS) {
if (!gUSBConnected) {
HOST_TDControlStatus = 0;
HOST_WdhIntr = 0;
HOST_RhscIntr = 1;
gUSBConnected = 1;
}
else
PRINT_Log("Spurious status change (connected)?\n");
} else {
if (gUSBConnected) {
USB->HcInterruptEnable = 0; // why do we get multiple disc. rupts???
HOST_RhscIntr = 0;
gUSBConnected = 0;
}
else
PRINT_Log("Spurious status change (disconnected)?\n");
}
}
USB->HcRhPortStatus1 = OR_RH_PORT_CSC;
}
if (USB->HcRhPortStatus1 & OR_RH_PORT_PRSC) {
USB->HcRhPortStatus1 = OR_RH_PORT_PRSC;
}
}
if (int_status & OR_INTR_STATUS_WDH) { /* Writeback Done Head interrupt */
HOST_WdhIntr = 1;
HOST_TDControlStatus = (TDHead->Control >> 28) & 0xf;
}
USB->HcInterruptStatus = int_status; /* Clear interrupt status register */
}
return;
}
"gUSBConnected" взводится в прерывании...
-
- Т.е. если я правильно понял то gUSBConnected взводится. =MIV=(412 знак., 17.05.2010 18:44, )
- На всякий случай вот то, что у меня работает: Гудвин(3437 знак., 17.05.2010 18:53)
- Т.е. если я правильно понял то gUSBConnected взводится. =MIV=(412 знак., 17.05.2010 18:44, )