mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 23:40:19 +08:00
Fix AVR uart bugs
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3700 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -198,32 +198,33 @@ void usart1_configure(void)
|
|||||||
/* Select parity */
|
/* Select parity */
|
||||||
|
|
||||||
#if CONFIG_USART1_PARITY == 1
|
#if CONFIG_USART1_PARITY == 1
|
||||||
ucsr1c |= (UPM11 | UPM10); /* Odd parity */
|
ucsr1c |= ((1 << UPM11) | (1 << UPM10)); /* Odd parity */
|
||||||
#else
|
#else
|
||||||
ucsr1c |= UPM11; /* Even parity */
|
ucsr1c |= (1 << UPM11); /* Even parity */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 1 or 2 stop bits */
|
/* 1 or 2 stop bits */
|
||||||
|
|
||||||
#if defined(CONFIG_USART1_2STOP) && CONFIG_USART1_2STOP > 0
|
#if defined(CONFIG_USART1_2STOP) && CONFIG_USART1_2STOP > 0
|
||||||
ucsr1c |= USBS1; /* Two stop bits */
|
ucsr1c |= (1 << USBS1); /* Two stop bits */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Word size */
|
/* Word size */
|
||||||
|
|
||||||
#if CONFIG_USART1_BITS == 5
|
#if CONFIG_USART1_BITS == 5
|
||||||
#elif CONFIG_USART1_BITS == 6
|
#elif CONFIG_USART1_BITS == 6
|
||||||
ucsr1c |= UCSZ10;
|
ucsr1c |= (1 << UCSZ10);
|
||||||
#elif CONFIG_USART1_BITS == 7
|
#elif CONFIG_USART1_BITS == 7
|
||||||
ucsr1c |= UCSZ11;
|
ucsr1c |= (1 << UCSZ11);
|
||||||
#elif CONFIG_USART1_BITS == 8
|
#elif CONFIG_USART1_BITS == 8
|
||||||
ucsr1c |= (UCSZ10 | UCSZ11);
|
ucsr1c |= ((1 << UCSZ10) | (1 << UCSZ11));
|
||||||
#elif CONFIG_USART1_BITS == 9
|
#elif CONFIG_USART1_BITS == 9
|
||||||
ucsr1c |= (UCSZ10 | UCSZ11);
|
ucsr1c |= ((1 << UCSZ10) | (1 << UCSZ11));
|
||||||
ucsr1b |= UCSZ12;
|
ucsr1b |= (1 << UCSZ12);
|
||||||
#else
|
#else
|
||||||
# error "Unsupported word size"
|
# error "Unsupported word size"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UCSR1B = ucsr1b;
|
UCSR1B = ucsr1b;
|
||||||
UCSR1C = ucsr1c;
|
UCSR1C = ucsr1c;
|
||||||
|
|
||||||
@@ -239,7 +240,7 @@ void usart1_configure(void)
|
|||||||
* an output regardless of the value of DDD3.
|
* an output regardless of the value of DDD3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DDRD |= (1 << 3); /* Force Port D pin 3 to be an output */
|
DDRD |= (1 << 3); /* Force Port D pin 3 to be an output -- Shouldn't be necessary */
|
||||||
PORTD |= (1 << 2); /* Set pull-up on port D pin 2 */
|
PORTD |= (1 << 2); /* Set pull-up on port D pin 2 */
|
||||||
|
|
||||||
/* Set the baud rate divisor */
|
/* Set the baud rate divisor */
|
||||||
|
|||||||
@@ -279,32 +279,33 @@ void usart0_configure(void)
|
|||||||
/* Select parity */
|
/* Select parity */
|
||||||
|
|
||||||
#if CONFIG_USART0_PARITY == 1
|
#if CONFIG_USART0_PARITY == 1
|
||||||
ucsr0c |= (UPM01 | UPM00); /* Odd parity */
|
ucsr0c |= ((1 << UPM01) | (1 << UPM00)); /* Odd parity */
|
||||||
#else
|
#else
|
||||||
ucsr0c |= UPM00; /* Even parity */
|
ucsr0c |= (1 << UPM00); /* Even parity */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 1 or 2 stop bits */
|
/* 1 or 2 stop bits */
|
||||||
|
|
||||||
#if defined(CONFIG_USART0_2STOP) && CONFIG_USART0_2STOP > 0
|
#if defined(CONFIG_USART0_2STOP) && CONFIG_USART0_2STOP > 0
|
||||||
ucsr0c |= USBS0; /* Two stop bits */
|
ucsr0c |= (1 << USBS0); /* Two stop bits */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Word size */
|
/* Word size */
|
||||||
|
|
||||||
#if CONFIG_USART0_BITS == 5
|
#if CONFIG_USART0_BITS == 5
|
||||||
#elif CONFIG_USART0_BITS == 6
|
#elif CONFIG_USART0_BITS == 6
|
||||||
ucsr0c |= UCSZ00;
|
ucsr0c |= (1 << UCSZ00);
|
||||||
#elif CONFIG_USART0_BITS == 7
|
#elif CONFIG_USART0_BITS == 7
|
||||||
ucsr0c |= UCSZ01;
|
ucsr0c |= (1 << UCSZ01);
|
||||||
#elif CONFIG_USART0_BITS == 8
|
#elif CONFIG_USART0_BITS == 8
|
||||||
ucsr0c |= (UCSZ00 | UCSZ01);
|
ucsr0c |= ((1 << UCSZ00) | (1 << UCSZ01));
|
||||||
#elif CONFIG_USART0_BITS == 9
|
#elif CONFIG_USART0_BITS == 9
|
||||||
ucsr0c |= (UCSZ00 | UCSZ01);
|
ucsr0c |= ((1 << UCSZ0) | (1 << UCSZ01));
|
||||||
ucsr0b |= UCSZ02;
|
ucsr0b |= (1 << UCSZ02);
|
||||||
#else
|
#else
|
||||||
# error "Unsupported word size"
|
# error "Unsupported word size"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UCSR0B = ucsr0b;
|
UCSR0B = ucsr0b;
|
||||||
UCSR0C = ucsr0c;
|
UCSR0C = ucsr0c;
|
||||||
|
|
||||||
@@ -323,13 +324,13 @@ void usart0_configure(void)
|
|||||||
* However, this is not explicitly stated in the text.
|
* However, this is not explicitly stated in the text.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DDRE |= (1 << 1); /* Force Port E pin 1 to be an input */
|
DDRE |= (1 << 1); /* Force Port E pin 1 to be an input -- might not be necessary */
|
||||||
PORTE |= (1 << 0); /* Set pull-up on Port E pin 0 */
|
PORTE |= (1 << 0); /* Set pull-up on Port E pin 0 */
|
||||||
|
|
||||||
/* Set the baud rate divisor */
|
/* Set the baud rate divisor */
|
||||||
|
|
||||||
UBRR0H = AVR_UBRR1 >> 8;
|
UBRR0H = AVR_UBRR0 >> 8;
|
||||||
UBRR0L = AVR_UBRR1 & 0xff;
|
UBRR0L = AVR_UBRR0 & 0xff;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -355,32 +356,33 @@ void usart1_configure(void)
|
|||||||
/* Select parity */
|
/* Select parity */
|
||||||
|
|
||||||
#if CONFIG_USART1_PARITY == 1
|
#if CONFIG_USART1_PARITY == 1
|
||||||
ucsr1c |= (UPM11 | UPM10); /* Odd parity */
|
ucsr1c |= ((1 << UPM11) | (1 << UPM10)); /* Odd parity */
|
||||||
#else
|
#else
|
||||||
ucsr1c |= UPM11; /* Even parity */
|
ucsr1c |= (1 << UPM11); /* Even parity */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 1 or 2 stop bits */
|
/* 1 or 2 stop bits */
|
||||||
|
|
||||||
#if defined(CONFIG_USART1_2STOP) && CONFIG_USART1_2STOP > 0
|
#if defined(CONFIG_USART1_2STOP) && CONFIG_USART1_2STOP > 0
|
||||||
ucsr1c |= USBS1; /* Two stop bits */
|
ucsr1c |= (1 << USBS1); /* Two stop bits */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Word size */
|
/* Word size */
|
||||||
|
|
||||||
#if CONFIG_USART1_BITS == 5
|
#if CONFIG_USART1_BITS == 5
|
||||||
#elif CONFIG_USART1_BITS == 6
|
#elif CONFIG_USART1_BITS == 6
|
||||||
ucsr1c |= UCSZ10;
|
ucsr1c |= (1 << UCSZ10);
|
||||||
#elif CONFIG_USART1_BITS == 7
|
#elif CONFIG_USART1_BITS == 7
|
||||||
ucsr1c |= UCSZ11;
|
ucsr1c |= (1 << UCSZ11);
|
||||||
#elif CONFIG_USART1_BITS == 8
|
#elif CONFIG_USART1_BITS == 8
|
||||||
ucsr1c |= (UCSZ10 | UCSZ11);
|
ucsr1c |= ((1 << UCSZ10) | (1 << UCSZ11));
|
||||||
#elif CONFIG_USART1_BITS == 9
|
#elif CONFIG_USART1_BITS == 9
|
||||||
ucsr1c |= (UCSZ10 | UCSZ11);
|
ucsr1c |= (U(1 << CSZ10) | (1 << UCSZ11));
|
||||||
ucsr1b |= UCSZ12;
|
ucsr1b |= (1 << UCSZ12);
|
||||||
#else
|
#else
|
||||||
# error "Unsupported word size"
|
# error "Unsupported word size"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UCSR1B = ucsr1b;
|
UCSR1B = ucsr1b;
|
||||||
UCSR1C = ucsr1c;
|
UCSR1C = ucsr1c;
|
||||||
|
|
||||||
@@ -396,7 +398,7 @@ void usart1_configure(void)
|
|||||||
* an output regardless of the value of DDD3.
|
* an output regardless of the value of DDD3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DDRD |= (1 << 3); /* Force Port D pin 3 to be an output */
|
DDRD |= (1 << 3); /* Force Port D pin 3 to be an output -- should not be necessary */
|
||||||
PORTD |= (1 << 2); /* Set pull-up on port D pin 2 */
|
PORTD |= (1 << 2); /* Set pull-up on port D pin 2 */
|
||||||
|
|
||||||
/* Set the baud rate divisor */
|
/* Set the baud rate divisor */
|
||||||
|
|||||||
Reference in New Issue
Block a user