Помогите разобраться с инициализацией USART'а.
Вообщем проблема при записи или доступе к регистрам UBRRH и UCSRC. Для доступа к первому нужно сбрасывать бит URSEL и для доступа ко второму устанавливать. А получается что когда я использую строчку UCSRC=(1<<URSEL)|(3<<UCSZ0)|(2<<UPM0); у меня все равно идет запись в два регистра.
Код
void init_uart(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB=(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<URSEL)|(3<<UCSZ0)|(2<<UPM0);
}
UBRRH_VALUE и UBRRL_VALUE считал при помощи макросов в составе пакета. Использую компилятор avr-toolchain-3.0.0.240 и avrstudio4 соответственно.
Также пытался сделать тип такого, но результат остался прежним:
Код
void init_uart(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB=(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<URSEL);
UCSRC=(3<<UCSZ0)|(2<<UPM0);
}
В прикрепленных файлах скриншоты при работе с симулятором и сам проект. Заранее спасибо.
Эскизы прикрепленных изображений