|  | @@ -78,16 +78,19 @@ uint8_t uart1_get (void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	uint8_t d;
 | 
	
		
			
				|  |  |  	idx_t i;
 | 
	
		
			
				|  |  | +	unsigned char SREG_buf = SREG;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	do {
 | 
	
		
			
				|  |  | -		cli(); i = RxFifo.ct; sei();
 | 
	
		
			
				|  |  | +		cli();
 | 
	
		
			
				|  |  | +		i = RxFifo.ct;
 | 
	
		
			
				|  |  | +		SREG = SREG_buf;
 | 
	
		
			
				|  |  |  	} while (i == 0) ;
 | 
	
		
			
				|  |  |  	i = RxFifo.ri;
 | 
	
		
			
				|  |  |  	d = RxFifo.buff[i];
 | 
	
		
			
				|  |  |  	cli();
 | 
	
		
			
				|  |  |  	RxFifo.ct--;
 | 
	
		
			
				|  |  | -	sei();
 | 
	
		
			
				|  |  | +	SREG = SREG_buf;
 | 
	
		
			
				|  |  |  	RxFifo.ri = (i + 1) % sizeof RxFifo.buff;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	return d;
 | 
	
	
		
			
				|  | @@ -101,9 +104,12 @@ void uart1_put (uint8_t d)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  #if USE_TXINT
 | 
	
		
			
				|  |  |  	idx_t i;
 | 
	
		
			
				|  |  | +	unsigned char SREG_buf = SREG;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	do {
 | 
	
		
			
				|  |  | -		cli(); i = TxFifo.ct; sei();
 | 
	
		
			
				|  |  | +		cli();
 | 
	
		
			
				|  |  | +		i = TxFifo.ct;
 | 
	
		
			
				|  |  | +		SREG = SREG_buf;
 | 
	
		
			
				|  |  |  	} while (i >= sizeof TxFifo.buff);
 | 
	
		
			
				|  |  |  	i = TxFifo.wi;
 | 
	
		
			
				|  |  |  	TxFifo.buff[i] = d;
 | 
	
	
		
			
				|  | @@ -111,7 +117,7 @@ void uart1_put (uint8_t d)
 | 
	
		
			
				|  |  |  	cli();
 | 
	
		
			
				|  |  |  	TxFifo.ct++;
 | 
	
		
			
				|  |  |  	UCSR1B |= _BV(UDRIE1);
 | 
	
		
			
				|  |  | -	sei();
 | 
	
		
			
				|  |  | +	SREG = SREG_buf;
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  |  	loop_until_bit_is_set(UCSR1A, UDRE1);
 | 
	
		
			
				|  |  |  	UDR1 = d;
 |