void usb_isr(void) { ULONG i_st; //IOWR(PIO_SEG7_B_BASE,0, 0xAAAAAAAA); disable(); Hal4D13_LockDevice(0); bD13flags.bits.At_IRQL1 = 1; i_st = Hal4D13_ReadInterruptRegister(); if(i_st != 0) { //IOWR_ALTERA_AVALON_PIO_DATA(PIO_SEG7_A_BASE, i_st); //USB_ISR_DEBUG(("[ISR]i_st=%lX\r\n", i_st)); if(i_st & D13REG_INTSRC_BUSRESET){ // 0x01 USB_ISR_DEBUG(("[USB ISR] Bus Reset\r\n")); Isr_BusReset(); }else if(i_st & D13REG_INTSRC_SUSPEND){ // 0x04 USB_ISR_DEBUG(("[USB ISR] Suspend\r\n")); Isr_SuspendChange(); }else if(i_st & D13REG_INTSRC_EOT){ USB_ISR_DEBUG(("[USB ISR] EOT (End of Tx)\r\n")); Isr_DmaEot(); }else if(i_st & (D13REG_INTSRC_SOF|D13REG_INTSRC_PSEUDO_SOF)){ USB_ISR_DEBUG(("[USB ISR] SOF (start of frame)\r\n")); Isr_SOF(); }else if(i_st & D13REG_INTSRC_SHORT_PACKET){ USB_ISR_DEBUG(("[USB ISR] short packet\r\n")); Isr_SHORT_PACKET(); }else if(i_st & D13REG_INTSRC_RESUME){ USB_ISR_DEBUG(("[USB ISR] resume\n")); Hal4D13_LockDevice(0); } else { USB_ISR_DEBUG(("[USB ISR] other, i_st = %lXh....resume\n", i_st)); if(i_st & D13REG_INTSRC_EP0OUT) Isr_Ep00RxDone(); if(i_st & D13REG_INTSRC_EP0IN) Isr_Ep00TxDone(); if(i_st & D13REG_INTSRC_EP01) Isr_Ep01Done(); if(i_st & D13REG_INTSRC_EP02) Isr_Ep02Done(); if(i_st & D13REG_INTSRC_EP03) Isr_Ep03Done(); if(i_st & D13REG_INTSRC_EP04) Isr_Ep04Done(); if(i_st & D13REG_INTSRC_EP05) Isr_Ep05Done(); if(i_st & D13REG_INTSRC_EP06) Isr_Ep06Done(); } } enable(); bD13flags.bits.At_IRQL1 = 0; }
void Hal4D13_RegAccess(void) { USHORT c; USHORT i; ULONG l; Hal4D13_ResetDevice(); printf("Reseting\n"); i = Hal4D13_ReadChipID(); printf(" ChipId = %hx\n",i); i = Hal4D13_GetDataFromChipRam(); printf(" Chip RAM = %hx\n",i); printf("Writing 0x55AA,"); Hal4D13_SetDataToChipRam(0x55AA); i = Hal4D13_GetDataFromChipRam(); printf(" Chip RAM = %hx\n",i); l = Hal4D13_GetIntEnable(); printf("Hal4D13_GetIntEnable = %lx\n",l); l = Hal4D13_ReadInterruptRegister(); printf("Hal4D13_ReadInterruptRegister = %lx\n",l); i = Hal4D13_GetDevConfig(); printf("Hal4D13_GetDevConfig = %hx\n",i); i = Hal4D13_GetDMAConfig(); printf("Hal4D13_GetDMAConfig = %hx\n",i); i = Hal4D13_GetDMACounter(); printf("Hal4D13_GetDMACounter = %hx\n",i); i = Hal4D13_ReadCurrentFrameNumber(); printf("Hal4D13_ReadCurrentFrameNumber = %hx\n",i); c = Hal4D13_GetMode(); printf("Hal4D13_GetMode = %x\n",c); c = Hal4D13_GetEndpointStatusWOInteruptClear(EPINDEX4EP0_CONTROL_OUT); printf("Hal4D13_GetEndpointStatus EP0 = %x\n",c); c = Hal4D13_GetAddress(); // printf("Hal4D13_GetAddress = %x\n",c); }
void Isr_Ep00TxDone(void) { short i = ControlData.wLength - ControlData.wCount; UCHAR ep_last; Hal4D13_ReadInterruptRegister(); ep_last = Hal4D13_GetEndpointStatusWInteruptClear(EPINDEX4EP0_CONTROL_IN); /* Clear interrupt flag */ switch (bD13flags.bits.DCP_state) { case USBFSM4DCP_HANDSHAKE: break; case USBFSM4DCP_DATAIN: if( i >= EP0_PACKET_SIZE) { Hal4D13_WriteEndpoint(EPINDEX4EP0_CONTROL_IN,ControlData.Addr.pData + ControlData.wCount, EP0_PACKET_SIZE); ControlData.wCount += EP0_PACKET_SIZE; // State remains at USBFSM4DCP_DATAIN } else if( i != 0) { Hal4D13_WriteEndpoint(1, ControlData.Addr.pData + ControlData.wCount, i); ControlData.wCount += i; bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE; } else if (i == 0) { bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE; Hal4D13_SingleTransmitEP0(0, 0); } break; case USBFSM4DCP_REQUESTPROC: break; case USBFSM4DCP_IDLE: break; case USBFSM4DCP_SETUPPROC: break; case USBFSM4DCP_STALL: break; case USBFSM4DCP_DATAOUT: break; default: USB_ISR_DEBUG(("Fatal Error: Isr_Ep0TxDone Unexpected FSMState=%x\r\n",bD13flags.bits.DCP_state)); bD13flags.bits.DCP_state = USBFSM4DCP_STALL; Hal4D13_StallEP0InControlRead(); break; } }