|
HELP! MEGA16 UART, как правильно инициализировать UART? |
|
|
|
Jul 9 2009, 18:04
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846

|
Столкнулся с проблемой - не получается инициализировать UART в МЕГЕ16. Причина: не получается запрограммировать регистр UCSRC, который отвечает за кол-во бит в пакете. Как известно, данный регистр по адресу (0х20(0х40)) совпадает с регистром UBRRH, а выбор того или иного осуществляется записью в бит URSEL определенного значения. Не получается запрограммировать ни тот, ни другой. Требуется РАБОТАЮЩИЙ кусок кода на С для инициализации UART. Код C Code Example #define FOSC 1843200// Clock Speed #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 void main( void ) { :. USART_Init ( MYUBRR ); :. } void USART_Init( unsigned int ubrr) { /* Set baud rate */ UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } - это не заработало (пример из doc8154.pdf, стр 153)
|
|
|
|
|
 |
Ответов
|
Jul 9 2009, 18:10
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(pimen @ Jul 9 2009, 22:04)  Столкнулся с проблемой - не получается инициализировать UART в МЕГЕ16. Требуется РАБОТАЮЩИЙ кусок кода на С для инициализации UART. Пожалуйста ! Функция: /* Инициализация UART при 9600 Bd, tx/rx, 8N1.*/ void uart_init(void) { #if F_CPU > 2000000UL && defined(U2X) UCSRA = _BV(U2X); /* improve baud rate error by using 2x clk */ UBRRL = (F_CPU / (8UL * UART_BAUD)) - 1; #else UBRRL = (F_CPU / (16UL * UART_BAUD)) - 1; #endif UCSRB = _BV(TXEN) | _BV(RXEN); /* tx/rx enable */ }
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Jul 9 2009, 18:20
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846

|
Цитата(manul78 @ Jul 9 2009, 22:10)  Пожалуйста ! Функция: ээээ, спасибо конечно, но требуется код с инициализацией регистра UCSRC у Вас я его не заметил (
|
|
|
|
|
Jul 9 2009, 18:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата ээээ, спасибо конечно, но требуется код с инициализацией регистра UCSRC у Вас я его не заметил ( Ну добавьте строчку в процедуру инициализации Код UCSRC = (1<<URSEL)|(.........); там где точки ваши настройки остальных битов регистра UCSRC Примера инициализации уарта в даташитс на atmega16 вполне работоспособен. Как проверили что он не работает? Код void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); }
Сообщение отредактировал mempfis_ - Jul 9 2009, 18:46
|
|
|
|
|
Jul 9 2009, 18:49
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846

|
Цитата(mempfis_ @ Jul 9 2009, 22:44)  Ну добавьте строчку в процедуру инициализации Код UCSRC = (1<<URSEL)|(.........); там где точки ваши настройки остальных битов регистра UCSRC это я уже видел и описано в 1 сообщении... не заработало... поэтому и интересуют варианты рабочих программ отладка проводилась как в AVRStudio, так и в IAR на JTAGICE и JTAGICE mkII (родном)
|
|
|
|
|
Jul 9 2009, 18:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(pimen @ Jul 9 2009, 21:49)  это я уже видел и описано в 1 сообщении... не заработало... Так уточните что именно не заработало? Вы инициализировали уарт а на приёмной стороне нет данных? Или на RXD/TXD совсем нет никаких сигналов? Настройки уарта совпадают с настройками на приёмной стороне (битрейт, кол-во стоповых битов, настройка контроля чётности)? Какой кварц на меге стоит? А код 100% рабочий - проверено неоднократно.
|
|
|
|
Сообщений в этой теме
pimen HELP! MEGA16 UART Jul 9 2009, 18:04     pimen Цитата(mempfis_ @ Jul 9 2009, 22:57) А ко... Jul 9 2009, 19:11      mempfis_ Нашёл в одном работающем проекте код инициализации... Jul 9 2009, 19:31  manul78 Цитата(pimen @ Jul 9 2009, 22:20) ээээ, с... Jul 9 2009, 18:55 manul78 Блин ! Чем дальше в лес, тем больше дров ... Jul 9 2009, 21:00 Сергей Борщ Цитата(manul78 @ Jul 10 2009, 00:00) Как ... Jul 9 2009, 21:47  manul78 Цитата(Сергей Борщ @ Jul 10 2009, 01:47) ... Jul 9 2009, 22:18   Палыч Цитата(manul78 @ Jul 10 2009, 01:18) Дата... Jul 10 2009, 05:34   mempfis_ Цитата(manul78 @ Jul 10 2009, 01:18) Если... Jul 10 2009, 05:41    manul78 Цитата(mempfis_ @ Jul 10 2009, 09:41) Раз... Jul 10 2009, 07:56     Палыч Цитата(manul78 @ Jul 10 2009, 10:56) Блин... Jul 10 2009, 08:32      manul78 Цитата(Палыч @ Jul 10 2009, 12:32) Вот, и... Jul 10 2009, 12:28       Палыч Цитата(manul78 @ Jul 10 2009, 15:28) Инте... Jul 10 2009, 13:03       Сергей Борщ Цитата(manul78 @ Jul 10 2009, 15:28) Пото... Jul 10 2009, 13:08        manul78 Цитата(Сергей Борщ @ Jul 10 2009, 17:08) ... Jul 14 2009, 09:56 TechMike Вот работающий код, mega16+кварц 8мгц, avr studio+... Jul 10 2009, 07:39 pimen Цитата19.5 USART Initialization
...
The following ... Jul 13 2009, 19:43
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|