Estoy integrando el módulo USB de ejemplo en mi aplicación existente y solo puedo hacer que funcione cuando deshabilito las interrupciones.
Estoy trabajando en el mla example instalado en la ruta:
C:/microchip/mla/v2013_12_20/apps/usb/device/bootloaders/firmware/pic18fxxjxx
Detalles
- Estoy implementando cada una de las funciones de devolución de llamada USB exactamente como se hace en el ejemplo.
- El reloj USB es 48MHz
- El reloj de la CPU (f_osc) es 16MHz
- pic18f25k50
- una interrupción de alta prioridad para Timer1 hace tic cada 250us, todo lo demás sucede cada 1s
- nunca te duermas, sin embargo, esto todavía parece reiniciarse
¿La pila USB del microchip no es segura para subprocesos?
¿No estoy ejecutando la tarea USB lo suficientemente rápido?
while (1)
{
// Clear the watchdog timer
ClrWdt();
// Run the USB task faster than xxxHz?
USBDeviceTasks();
// Do stuff
}
// high-priority foreground loop takes ~5us
void high_priority interrupt HighPriorityTasks(void)
{
// Do stuff quickly, clear sources of interrupts
}
// low-priority foreground loop takes ~5us
void low_priority interrupt LowPriorityTasks(void)
{
// Do stuff quickly, clear sources of interrupts
}
Cuando falla, veo que el administrador de dispositivos continúa actualizándose acompañado de una de estas ventanas emergentes cada 5 segundos en Windows 7: