реклама на сайте
подробности

 
 
> Какие есть особенности инициализации UART2 и UART3 в atmega2560?
Oleg_IT
сообщение Feb 23 2011, 20:49
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



UART0, UART1 работают, а у второго и третьего каналов прерывания не идут. Инициализирую UART-ы одинаково, только номера меняю. Пример для UART0

volatile unsigned char FlagTx_0 = 1;
volatile unsigned char FlagTx_1 = 1;
volatile unsigned char FlagTx_2 = 1;
volatile unsigned char FlagTx_3 = 1;
volatile char Buff[10];
void StartTX_0(void)
{
FlagTx_0 = 0;

UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01));
UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UBRR0H = 0;
UDR0 = Buff[0];
CountTx_0 = 1;
UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0));
}

ISR (USART0_TX_vect)
{
FlagTx_0 = 1;
UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0));
}

ISR (USART0_UDRE_vect)
{
UDR0 = Buff [CountTx_0];

CountTx_0++;
if (CountTx_0 == sizeof(Buff))
{
UCSR0B &=~ (1 << UDRIE0);
UCSR0B |= (1 << TXCIE0);
return;
}
}
Сразу скажу, может не всё запрограммировано строго по правилам, но первые два канала работают, а вторые два нет. Ератта молчит.
Регистры PRR0 и PRR1 проверял.
Что не так делаю. Поделитесь кодом правильной работы с этими каналами.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Feb 26 2011, 12:13
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Oleg_IT @ Feb 26 2011, 10:12) *
Для теста все 4 канала инициализирую одинаково...
Покажите код для 2 и 3 (тег codebox используйте). Может, просто очепятка где...
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Feb 26 2011, 15:26
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(SysRq @ Feb 26 2011, 15:13) *
Покажите код для 2 и 3 (тег codebox используйте). Может, просто очепятка где...

Код, как он есть
CODE
#include "PortDefine.h"
#include "InitIO.h"
#include <string.h>


volatile unsigned char CountTx_0 = 0;
volatile unsigned char CountTx_1 = 0;
volatile unsigned char CountTx_2 = 0;
volatile unsigned char CountTx_3 = 0;

volatile unsigned char FlagTx_0 = 1;
volatile unsigned char FlagTx_1 = 1;
volatile unsigned char FlagTx_2 = 1;
volatile unsigned char FlagTx_3 = 1;
volatile char Buff[10];
void StartTX_0(void)
{
PORTF |= (1 << 0);

FlagTx_0 = 0;

UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01));
UBRR0H = 0;
UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UDR0 = Buff[0];
CountTx_0 = 1;
UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0));
}

ISR (USART0_TX_vect)
{
FlagTx_0 = 1;
UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0));
}


ISR (USART0_UDRE_vect)
{
PORTF &=~ (1 << 0);

UDR0 = Buff [CountTx_0];

CountTx_0++;
if (CountTx_0 == sizeof(Buff))
{
UCSR0B &=~ (1 << UDRIE0);
UCSR0B |= (1 << TXCIE0);
return;
}
}

void StartTX_1(void)
{
FlagTx_1 = 0;

UCSR1C |= ((1 << UCSZ10) | (1 << UCSZ11));
UBRR1H = 0;
UBRR1L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UDR1 = Buff[0];
CountTx_1 = 1;
UCSR1B |= ((1 << TXEN1) | (1 << UDRIE1));
}

ISR (USART1_TX_vect)
{
FlagTx_1 = 1;

UCSR1B &=~ ((1 << TXCIE1) | (1 << TXEN1) | (1 << UDRIE1));
}

ISR (USART1_UDRE_vect)
{
UDR1 = Buff [CountTx_1];

CountTx_1++;
if (CountTx_1 == sizeof(Buff))
{
UCSR1B &=~ (1 << UDRIE1);
UCSR1B |= (1 << TXCIE1);
return;
}
}

void StartTX_2(void)
{
FlagTx_2 = 0;

PRR1 &=~ (1 << PRUSART2);
UCSR2C |= ((1 << UCSZ20) | (1 << UCSZ21));
UBRR2H = 0;
UBRR2L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UDR2 = Buff[0];
CountTx_2 = 1;
UCSR2B |= ((1 << TXEN2) | (1 << UDRIE2));
}

ISR (USART2_TX_vect)
{
FlagTx_2 = 1;

UCSR2B &=~ ((1 << TXCIE2) | (1 << TXEN2) | (1 << UDRIE2));
}

ISR (USART2_UDRE_vect)
{
UDR2 = Buff [CountTx_2];

CountTx_2++;
if (CountTx_2 == sizeof(Buff))
{
UCSR2B &=~ (1 << UDRIE2);
UCSR2B |= (1 << TXCIE2);
return;
}
}

void StartTX_3(void)
{
PORTF |= (1 << 0);

FlagTx_3 = 0;

PRR1 &=~ (1 << PRUSART3);
UCSR3C |= ((1 << UCSZ30) | (1 << UCSZ31));
UBRR3H = 0;
UBRR3L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UDR3 = Buff[0];
CountTx_3 = 1;
UCSR3B |= ((1 << TXEN3) | (1 << UDRIE3));
}

ISR (USART3_TX_vect)
{
FlagTx_3 = 1;

UCSR3B &=~ ((1 << TXCIE3) | (1 << TXEN3) | (1 << UDRIE3));
}

ISR (USART3_UDRE_vect)
{
PORTF &=~ (1 << 0);

UDR3 = Buff [CountTx_3];

CountTx_3++;
if (CountTx_3 == sizeof(Buff))
{
UCSR3B &=~ (1 << UDRIE3);
UCSR3B |= (1 << TXCIE3);
return;
}
}


Ещё ассемблер гляну, сравню 0 и 3.
Цитата(demiurg_spb @ Feb 26 2011, 16:37) *
Может моя догадка верна...

Принимаю и отрабатываю любые предложения.

Сообщение отредактировал IgorKossak - Feb 27 2011, 15:19
Причина редактирования: Бездумное оформление кода
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Oleg_IT   Какие есть особенности инициализации UART2 и UART3 в atmega2560?   Feb 23 2011, 20:49
- - Juk1976   Цитата(Oleg_IT @ Feb 23 2011, 23:49) UART...   Feb 23 2011, 21:40
|- - Oleg_IT   Цитата(Juk1976 @ Feb 24 2011, 00:40) В па...   Feb 25 2011, 10:01
|- - Juk1976   Цитата(Oleg_IT @ Feb 25 2011, 13:01) Ваш ...   Feb 25 2011, 20:42
|- - Oleg_IT   У меня тоже ни когда с этим проблем не было. Преды...   Feb 26 2011, 07:12
- - SysRq   Цитата(Oleg_IT @ Feb 23 2011, 23:49) UART...   Feb 23 2011, 23:20
|- - demiurg_spb   Вспоминается мне один нюанс. В DS описывается четк...   Feb 26 2011, 13:37
|- - Oleg_IT   Прошу прощение за объёмы кода. Ассемблер код иниц...   Feb 26 2011, 19:48
- - SysRq   Bug 47696 - [AVR] Compilation for atmega2560 produ...   Feb 26 2011, 21:47
|- - Oleg_IT   Цитата(SysRq @ Feb 27 2011, 00:47) Bug 47...   Feb 27 2011, 09:16
|- - SysRq   AVCC к питанию подключен? PORTF питается от него, ...   Feb 27 2011, 10:07
- - Oleg_IT   AVCC через LC (рекомендованный) фильтр подключен к...   Feb 27 2011, 13:38
- - xelax   Может дело не в uart'е? Вы же не зря атмегу256...   Feb 28 2011, 10:26
|- - Oleg_IT   Цитата(xelax @ Feb 28 2011, 13:26) Может ...   Feb 28 2011, 12:18
- - xelax   Вот здесь кое что обсуждалось Так же в документац...   Feb 28 2011, 16:24
- - Oleg_IT   Цитата(xelax @ Feb 28 2011, 19:24) Вот зд...   Mar 1 2011, 07:17
- - SysRq   Цитата(Oleg_IT @ Mar 1 2011, 10:17) Чего ...   Mar 1 2011, 07:39
- - Oleg_IT   Цитата(SysRq @ Mar 1 2011, 10:39) Выклады...   Mar 1 2011, 10:36


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 06:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.0563 секунд с 7
ELECTRONIX ©2004-2016