Add flow control by firmware to serial_uart
This commit is contained in:
		
							parent
							
								
									50bcaa66c4
								
							
						
					
					
						commit
						3e7875455e
					
				
					 4 changed files with 30 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -8,6 +8,7 @@ Roving RN-42
 | 
			
		|||
 | 
			
		||||
TODO
 | 
			
		||||
----
 | 
			
		||||
- LUFA sendchar should be buffered and serial_uart.c buffur size is too large(256).
 | 
			
		||||
- Factroy reset doesn't work; need to test again. 10K pull-up is too high?
 | 
			
		||||
- Lipo voltage ADC sensing
 | 
			
		||||
- Lipo charger configuration: fast charge time:  USB charger spec?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,20 +57,23 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
    #define RTSEN 0
 | 
			
		||||
    #define CTSEN 1
 | 
			
		||||
 | 
			
		||||
    #define SERIAL_UART_BAUD       115200
 | 
			
		||||
    #define SERIAL_UART_DATA       UDR1
 | 
			
		||||
    #define SERIAL_UART_UBRR       ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
 | 
			
		||||
    #define SERIAL_UART_RXD_VECT   USART1_RX_vect
 | 
			
		||||
    #define SERIAL_UART_TXD_READY  (UCSR1A&(1<<UDRE1))
 | 
			
		||||
    #define SERIAL_UART_INIT()     do { \
 | 
			
		||||
    #define SERIAL_UART_BAUD        115200
 | 
			
		||||
    #define SERIAL_UART_DATA        UDR1
 | 
			
		||||
    #define SERIAL_UART_UBRR        ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
 | 
			
		||||
    #define SERIAL_UART_RXD_VECT    USART1_RX_vect
 | 
			
		||||
    #define SERIAL_UART_TXD_READY   (UCSR1A&(1<<UDRE1))
 | 
			
		||||
    #define SERIAL_UART_INIT()      do { \
 | 
			
		||||
        UBRR1L = (uint8_t) SERIAL_UART_UBRR;       /* baud rate */ \
 | 
			
		||||
        UBRR1H = ((uint16_t)SERIAL_UART_UBRR>>8);  /* baud rate */ \
 | 
			
		||||
        UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
 | 
			
		||||
        UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
 | 
			
		||||
        UCSR1C |= (0<<UPM11) | (0<<UPM10);  /* parity: none(00), even(01), odd(11) */ \
 | 
			
		||||
        UCSR1D |= (0<<RTSEN) | (0<<CTSEN);  /* RTS, CTS */ \
 | 
			
		||||
        UCSR1D |= (0<<RTSEN) | (0<<CTSEN);  /* RTS, CTS(no flow control by hardware) */ \
 | 
			
		||||
        DDRD |= (1<<5); PORTD &= ~(1<<5);   /* RTS for flow control by firmware */ \
 | 
			
		||||
        sei(); \
 | 
			
		||||
    } while(0)
 | 
			
		||||
    #define SERIAL_UART_RTS_LO()    do { PORTD &= ~(1<<5); } while (0)
 | 
			
		||||
    #define SERIAL_UART_RTS_HI()    do { PORTD |=  (1<<5); } while (0)
 | 
			
		||||
#else
 | 
			
		||||
    #error "USART configuration is needed."
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,9 +56,7 @@ void rn42_task(void)
 | 
			
		|||
        // Config mode: print output from RN-42
 | 
			
		||||
        while ((c = serial_recv2()) != -1) {
 | 
			
		||||
            // without flow control it'll fail to receive data when flooded
 | 
			
		||||
            rn42_cts_hi();
 | 
			
		||||
            xprintf("%c", c);
 | 
			
		||||
            rn42_cts_lo();
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        // Raw mode: interpret output report of LED state
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue