|
mega128 инициализация UART0, UART01 |
|
|
|
Sep 3 2008, 17:05
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Даже и незнаю на что грешит. Инит юартов. Использую прерывания RX Код /*********************************************************************** Function : uart0_init Parameters : nil Date : Desc : int disabled //UART0 initialize // desired baud rate: 57600 // actual: baud rate:57600 (0,0%) // char size: 8 bit // parity: Disabled //ICC-AVR application builder : 04.06.2008 15:23:56 // Target : M128 // Crystal: 7.3728Mhz ***********************************************************************/
void uart0_init(void) { #ifndef UartOVF UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x07; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x18; #else UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x07; //set baud rate lo UBRR0H = 0x00; //set baud rate hi //UCSR0B = 0xB8; UCSR0B = 0x98; //without UDR is now empty int #endif }
/*********************************************************************** Function : uart1_init Parameters : nil Date : Desc : int disabled //UART1 initialize // desired baud rate:57600 // actual baud rate:57600 (0,0%) // char size: 8 bit // parity: Disabled //ICC-AVR application builder : 04.06.2008 15:23:56 // Target : M128 // Crystal: 7.3728Mhz ***********************************************************************/
void uart1_init(void) { #ifndef UartOVF UCSR1B = 0x00; //disable while setting baud rate UCSR1A = 0x00; UCSR1C = 0x06; UBRR1L = 0x07; //set baud rate lo UBRR1H = 0x00; //set baud rate hi UCSR1B = 0x18;
#else UCSR1B = 0x00; //disable while setting baud rate UCSR1A = 0x00; UCSR1C = 0x06; UBRR1L = 0x07; //set baud rate lo UBRR1H = 0x00; //set baud rate hi //UCSR1B = 0xB8; UCSR1B = 0x98; //without UDR is now empty int #endif } вызовы Код /*********************************************************************** Function : putchar Parameters : Date : Desc : ***********************************************************************/ void putchar(unsigned char tx_char, unsigned char CASE_UART) { switch(CASE_UART) { case UART_1:{ //printing to UART PHONE while( !(UCSR0A & (1 << UDRE0) ) ); // ?????????????????????????????????? UDR0 = tx_char; break;}
case UART_2:{ //printing to UART TUNER while( !(UCSR1A & (1 << UDRE1) ) ); //??????????????????????????????????? UDR1 = tx_char; break;}
case UART_3:{ //printing to UART_3 (SOFT DEBUG UART) sUARTtx(tx_char); break;} }
} при этом первый юарт работает нормально как только вызываю второй программа вешается, как я понял на строке while( !(UCSR1A & (1 << UDRE1) ) ); и всё вечное ожидание.
|
|
|
|
|
 |
Ответов
|
Sep 3 2008, 17:35
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(west329_ @ Sep 3 2008, 21:05)  Даже и незнаю на что грешит. Начните с проверки состояния фьюза M103C....
|
|
|
|
|
Sep 3 2008, 17:50
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(Qwertty @ Sep 3 2008, 20:35)  Начните с проверки состояния фьюза M103C.... Проверяю в понипрог нам стоит птичка как я понял для фьюза это 0. Перед тем как заливать код в железо предварительно код отладил в протеусе, там всё работает как часы, хотя этот симулятор не показатель.
|
|
|
|
|
Sep 3 2008, 18:17
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(west329_ @ Sep 3 2008, 20:50)  Проверяю в понипрог нам стоит птичка как я понял для фьюза это 0.
Перед тем как заливать код в железо предварительно код отладил в протеусе, там всё работает как часы, хотя этот симулятор не показатель. Еще раз подумай про бит и понипрог
|
|
|
|
|
Sep 3 2008, 18:54
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(Flasher @ Sep 3 2008, 21:17)  Еще раз подумай про бит и понипрог Ув. Flasher все заработало, разясните мне начинаещему, как та может быть. В меге из фузов было переключено всего 2. CKSEL3 и CKSEL2, в пони вначале в них стояли птички, что соотвецтвовало по даташиту внутреннему генератору, я убираю птички фактически устанавливаю биты в 1, по документации перешожу на тактирование от внешнего кварца. Всё работает нормально. Теперь эта ситуация, сначало в пони в значении бита M103C стоит птичка, значит unprogramed тоесть значение бита 0. Открываю даташит (Default Value - M103C(1) 1 ATmega103 compatibility mode 0 (programmed) ) получается что мега128 сначала включена в режит меги103 где логика ? разъясните ?
|
|
|
|
|
Sep 3 2008, 19:04
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(west329_ @ Sep 3 2008, 21:54)  Ув. Flasher все заработало, разясните мне начинаещему, как та может быть. В меге из фузов было переключено всего 2. CKSEL3 и CKSEL2, в пони вначале в них стояли птички, что соотвецтвовало по даташиту внутреннему генератору, я убираю птички фактически устанавливаю биты в 1, по документации перешожу на тактирование от внешнего кварца. Всё работает нормально.
Теперь эта ситуация, сначало в пони в значении бита M103C стоит птичка, значит unprogramed тоесть значение бита 0. Открываю даташит (Default Value - M103C(1) 1 ATmega103 compatibility mode 0 (programmed) ) получается что мега128 сначала включена в режит меги103 где логика ? разъясните ? Она изначально в режиме совместимости, так как раньше она предназначалась для замены 103 в изделиях
|
|
|
|
Сообщений в этой теме
west329_ mega128 инициализация UART0, UART01 Sep 3 2008, 17:05 west329_ Как можно притупить чувствительность порта USART. ... Sep 4 2008, 20:09 Flasher Цитата(west329_ @ Sep 4 2008, 23:09) Как ... Sep 4 2008, 20:21 Aleksandr Baranov Так писать нехорошо. Лучше как-нибудь так:
КодUCS... Sep 4 2008, 21:18 Syberian Цитата(Aleksandr Baranov @ Sep 5 2008, 00... Sep 5 2008, 03:02  SysRq Цитата(Syberian @ Sep 5 2008, 07:02) Ваше... Sep 5 2008, 04:28  Aleksandr Baranov Цитата(Syberian @ Sep 4 2008, 23:02) Ваше... Sep 5 2008, 14:45 west329_ void stopUART( void )
{
UCSR1B &= ~0x80; /... Sep 5 2008, 05:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|