void CDWHCIDevice::InterruptHandler (void) { #ifndef NDEBUG //debug_click (); #endif DataMemBarrier (); CDWHCIRegister IntStatus (DWHCI_CORE_INT_STAT); IntStatus.Read (); if (IntStatus.Get () & DWHCI_CORE_INT_STAT_HC_INTR) { CDWHCIRegister AllChanInterrupt (DWHCI_HOST_ALLCHAN_INT); AllChanInterrupt.Read (); AllChanInterrupt.Write (); unsigned nChannelMask = 1; for (unsigned nChannel = 0; nChannel < m_nChannels; nChannel++) { if (AllChanInterrupt.Get () & nChannelMask) { CDWHCIRegister ChanInterruptMask (DWHCI_HOST_CHAN_INT_MASK(nChannel), 0); ChanInterruptMask.Write (); ChannelInterruptHandler (nChannel); } nChannelMask <<= 1; } } #if 0 if (IntStatus.Get () & DWHCI_CORE_INT_STAT_PORT_INTR) { CDWHCIRegister HostPort (DWHCI_HOST_PORT); HostPort.Read (); CLogger::Get ()->Write (FromDWHCI, LogDebug, "Port interrupt (status 0x%08X)", HostPort.Get ()); HostPort.And (~DWHCI_HOST_PORT_ENABLE); HostPort.Or ( DWHCI_HOST_PORT_CONNECT_CHANGED | DWHCI_HOST_PORT_ENABLE_CHANGED | DWHCI_HOST_PORT_OVERCURRENT_CHANGED); HostPort.Write (); IntStatus.Or (DWHCI_CORE_INT_STAT_PORT_INTR); } #endif IntStatus.Write (); DataMemBarrier (); }
interrupt VectorNumber_Vtpm1ch4 void TPM1_CH4(void) { ChannelInterruptHandler(4); }
interrupt VectorNumber_Vtpm1ch3 void TPM1_CH3(void) { ChannelInterruptHandler(3); }
interrupt VectorNumber_Vtpm1ch2 void TPM1_CH2(void) { ChannelInterruptHandler(2); }
interrupt VectorNumber_Vtpm1ch1 void TPM1_CH1(void) { ChannelInterruptHandler(1); }
interrupt VectorNumber_Vtpm1ch0 void TPM1_CH0(void) { ChannelInterruptHandler(0); }
interrupt VectorNumber_Vtpm1ch5 void TPM1_CH5(void) { ChannelInterruptHandler(5); }