예제 #1
0
void interrupt() {
	
	#ifdef USB_SERIAL_DEBUG
		serial_handle_tx_isr();
		serial_handle_rx_isr();
	#endif
	
	usb_handle_isr();
}
예제 #2
0
void serial_putc(uns8 c)
{
uns8 tx_next;
bit  my_store_gie;
#ifdef SERIAL_IDE_DEBUG
return;
#endif

    if ((tx_end == tx_start) &&  // Nothing in the fifo
        test_bit(pir1, TXIF)) {  // And txreg is empty
		txreg = c;               // then no need for fifo, just send straight out 
    } else { // else put it in the fifo	 
        tx_next = tx_end + 1;	// get next buffer position
		if (tx_next == SERIAL_TX_BUFFER_SIZE) {	// if we're at the end
			tx_next = 0;	// wrap to the beginning
        }
        #ifdef SERIAL_DISCARD_ON_TX_FULL_DURING_INT
			if ((!intcon.GIE) && (tx_next == tx_start)) {
				return;
			}
		#endif	
        while (tx_next == tx_start) { // wait for clearing
									 // Note, if buffer is full
									 // this will wait for ever
									 // if interrupts are disabled!
			#ifndef SERIAL_DISCARD_ON_TX_FULL_DURING_INT
				if (!intcon.GIE) {	// we're in an interrupt
					serial_handle_tx_isr();	// so handle it ourselves
				}
			#endif	
		}		
		my_store_gie = intcon.GIE;	// store interrupt state
		kill_interrupts();	// turn off global interrupts
        
        tx_buffer[tx_end] = c; // put it in
        tx_end = tx_next;  // move pointer along
		
		set_bit(pie1, TXIE); // turn on interrupt for transmitting
		intcon.GIE = my_store_gie;	// restore interrupt state
	} // -- else put it in the fifo
} 
예제 #3
0
// Interrupt routine - - - - - - - - - -
void interrupt() {
	
	serial_handle_tx_isr();
	serial_handle_rx_isr();
}