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:
patacongo
2011-06-13 01:42:21 +00:00
parent fe9849bb99
commit 91b1e37ee3
2 changed files with 32 additions and 29 deletions
+10 -9
View File
@@ -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 */
+22 -20
View File
@@ -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 */