int dwc_pcd_irq() { gintsts_data_t gintr_status; gintsts_data_t gintr_msk; gintr_msk.d32 = dwc_read_reg32(DWC_REG_GINTMSK); gintr_status.d32 = dwc_read_reg32(DWC_REG_GINTSTS); if((gintr_status.d32 & gintr_msk.d32)== 0) return 0; //DBG("irq gintmsk: 0x%08x\n",gintr_msk.d32); //DBG("irq gintrsts: 0x%08x\n",gintr_status.d32); gintr_status.d32 = gintr_status.d32 & gintr_msk.d32; //DBG("irq gintmsk & gintrsts = 0x%08x\n",gintr_status.d32); if (gintr_status.b.rxstsqlvl) { dwc_otg_pcd_handle_rx_status_q_level_intr(); } if (gintr_status.b.nptxfempty) { dwc_otg_pcd_handle_np_tx_fifo_empty_intr( ); } if (gintr_status.b.usbreset) { dwc_otg_pcd_handle_usb_reset_intr( ); } if (gintr_status.b.enumdone) { dwc_otg_pcd_handle_enum_done_intr(); } if (gintr_status.b.epmismatch) { //dwc_otg_pcd_handle_ep_mismatch_intr( core_if ); } if (gintr_status.b.inepint) { dwc_otg_pcd_handle_in_ep_intr(); } if (gintr_status.b.outepintr) { dwc_otg_pcd_handle_out_ep_intr( ); } dwc_write_reg32(DWC_REG_GINTSTS,gintr_status.d32); flush_cpu_cache(); return 0; }
int dwc_pcd_irq(void) { gintsts_data_t gintr_status; gintsts_data_t gintr_msk; gintr_msk.d32 = dwc_read_reg32(DWC_REG_GINTMSK); gintr_status.d32 = dwc_read_reg32(DWC_REG_GINTSTS); if ((gintr_status.d32 & gintr_msk.d32)== 0) return 0; DBG("irq gintmsk: 0x%08x\n",gintr_msk.d32); DBG("irq gintrsts: 0x%08x\n",gintr_status.d32); gintr_status.d32 = gintr_status.d32 & gintr_msk.d32; DBG("irq gintmsk & gintrsts = 0x%08x\n",gintr_status.d32); if (gintr_status.b.sofintr) { if (_sofintr_not_occur) { DWN_MSG("sof\n"); _sofintr_not_occur = 0; } } if (gintr_status.b.rxstsqlvl) { dwc_otg_pcd_handle_rx_status_q_level_intr(); pcd_out_completed(&this_pcd[0]); } if (gintr_status.b.nptxfempty) { dwc_otg_pcd_handle_np_tx_fifo_empty_intr( ); } if (gintr_status.b.usbreset) { dwc_otg_pcd_handle_usb_reset_intr( ); } if (gintr_status.b.enumdone) { dwc_otg_pcd_handle_enum_done_intr(); } if (gintr_status.b.epmismatch) { //dwc_otg_pcd_handle_ep_mismatch_intr( core_if ); } if (gintr_status.b.inepint) { dwc_otg_pcd_handle_in_ep_intr(); } if (gintr_status.b.outepintr) { dwc_otg_pcd_handle_out_ep_intr( ); } #if 0 if (gintr_status.b.otgintr) { gotgint_data_t gotgint; gotgint.d32 = dwc_read_reg32(DWC_REG_GOTGINT); if (gotgint.b.sesenddet) { printf("dis-connect-intr\n"); cb_4_dis_connect_intr(); } } #endif//#if 0 dwc_write_reg32(DWC_REG_GINTSTS,gintr_status.d32); flush_cpu_cache(); return 0; }