|
|
  |
uart & mega8535, Проблема с установкой скорости |
|
|
|
Mar 25 2005, 06:20
|
Частый гость
 
Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574

|
Цитата(studert @ Mar 25 2005, 00:09) У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял? Попробуй так: //****************************************************************** //UART initialize void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; //disable while setting baud rate UBRRL =0x33; //set baud rate UBRRH = 0x00; UCSRC = 0x86; UCSRA = 0x01; //enable UCSRB = 0xDC; //enable }
|
|
|
|
|
Mar 25 2005, 06:23
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 3-03-05
Из: Санкт-Петербург
Пользователь №: 3 037

|
Цитата(studert @ Mar 25 2005, 00:09) У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял? Ты всё правильно понял - именно такая ботва происходит, попробуй не трогать эти долбаные регистры. Сейчас плохо помню, но у меня получалось таким образом выставить 9 бит. Я тут на форуме что-то писал п о этому поводу недавно. Кажется, по умолчанию UBRRH=0, UCSRC=0x06, это как-то можно использовать.
|
|
|
|
|
Mar 25 2005, 12:19
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669

|
Цитата(studert @ Mar 25 2005, 00:09) У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял? Похожую проблему я встречал в какой-то меге, но это был глюк avr-studio (симуляция) , на самом кристалле все нормально работало.
|
|
|
|
|
Mar 25 2005, 13:00
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Цитата(studert @ Mar 25 2005, 00:09) У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял? У меня все это работает как часы, и реализовано вот так void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = 0x86; UBRRL = 0x17; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x98; } Камень - Mega32, но работает и на Mega16 и на 8535 попробуй! Должно пойти.
|
|
|
|
|
Mar 25 2005, 14:31
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 3-03-05
Из: Санкт-Петербург
Пользователь №: 3 037

|
Цитата(Sergio66 @ Mar 25 2005, 16:00) У меня все это работает как часы, и реализовано вот так void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = 0x86; UBRRL = 0x17; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x98; } Камень - Mega32, но работает и на Mega16 и на 8535 попробуй! Должно пойти. Между мегами 8515, 8535 и мегой 16 есть разница. В 16-ой этого бага нет точно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|