void SPU_struct::KeyProbe(int chan_num) { channel_struct &thischan = channels[chan_num]; if(thischan.status == CHANSTAT_STOPPED) { if(thischan.keyon && regs.masteren) KeyOn(chan_num); } else if(thischan.status == CHANSTAT_PLAY) { if(!thischan.keyon || !regs.masteren) KeyOff(chan_num); } }
void isr_low( void ) { unsigned char temp; unsigned short tval0, tval1; char *p; // Clock if ( PIR1bits.TMR1IF ) { // If a Timer1 Interrupt, Then... WriteTimer1( 0xD8F0 ); // 1 mS vscp_timer++; /************** Handle Init button **************/ if ( PORTCbits.RC1 ) { vscp_initbtncnt = 0; } else { // Active vscp_initbtncnt++; } /************** VSCP LED *****************/ vscp_statuscnt++; if ( ( VSCP_LED_BLINK1 == vscp_initledfunc ) && ( vscp_statuscnt > 100 ) ) { if ( PORTAbits.RA2 ) { PORTAbits.RA2 = 0; } else { PORTAbits.RA2 = 1; } vscp_statuscnt = 0; } else if ( VSCP_LED_ON == vscp_initledfunc ) { PORTAbits.RA2 = 1; vscp_statuscnt = 0; } else if ( VSCP_LED_OFF == vscp_initledfunc ) { PORTAbits.RA2 = 0; vscp_statuscnt = 0; } /***************** Key *********************/ if( KeyTimer ) { KeyTimer--; } else { KeyOff(); } /***************** Red LED *********************/ if( RedLedTimer ) { RedLedTimer--; } else { RedLedOff(); } /***************** Green LED *******************/ if ( GreenLedTimer ) { GreenLedTimer--; } else { GreenLedOff(); } /***************** Beeper **********************/ if ( BeeperTimer ) { BeeperTimer--; } else { PORTCbits.RC0 = 0; if ( PWM_enable == OFF ) { OpenPWM1( PWM_f ); SetDCPWM1( ( PWM_f * 2 ) - 6 ); PWM_enable = ON; } } /**************** EmData Timer ****************/ if ( EmDataTimer ){ EmDataTimer--; } PIR1bits.TMR1IF = 0; // Clear Timer1 Interrupt Flag } return; }