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

 
 
> Какие есть особенности инициализации 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
Ответов
xelax
сообщение Feb 28 2011, 10:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Может дело не в uart'е? Вы же не зря атмегу2560 выбрали, вам известно что у gcc по дефолту проблемы с использованием кода в старших 128к? Без заморочек с trampoline секцией, вызовы функций(находящихся в старших 128к) по указателю приводит к попаданию на левые адреса. Я не утверждаю что проблема в этом, но как вариант проверить стоит.

То есть прерывания есть, но в обработчики, которые вне тела прерывания(в супер петле, ну или что там вы используете) вы не попадаете.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Feb 28 2011, 12:18
Сообщение #3


Знающий
****

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



Цитата(xelax @ Feb 28 2011, 13:26) *
Может дело не в uart'е? Вы же не зря атмегу2560 выбрали, вам известно что у gcc по дефолту проблемы с использованием кода в старших 128к? Без заморочек с trampoline секцией, вызовы функций(находящихся в старших 128к) по указателю приводит к попаданию на левые адреса. Я не утверждаю что проблема в этом, но как вариант проверить стоит.

То есть прерывания есть, но в обработчики, которые вне тела прерывания(в супер петле, ну или что там вы используете) вы не попадаете.

Не судите строго, но я уже перестаю чего-либо понимать. Размер адреса у UART2 и UART3 по размерности такие же, как и у UART0 и UART1 (в моём случае UART0 - 0000041E, UART1 - 00000484, UART2 - 000004EE, UART3 - 00000554).
Ставил точки прерывания в таблице адресов прерывания, на все строки. Та же картина, UART0 и UART1 остановы есть, UART2 и UART3 остановов нет. Ладно, переход из таблицы прерываний не туда (куда? и если не туда, то невероятно, что программа не рушится), но должна же программа прийти в таблицу прерывания
Ни когда не работал с trampoline секцией. Где об этом почитать, поисковики куда-то ни туда направляют.
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
- - SysRq   Цитата(Oleg_IT @ Feb 26 2011, 10:12) Для ...   Feb 26 2011, 12:13
|- - demiurg_spb   Вспоминается мне один нюанс. В DS описывается четк...   Feb 26 2011, 13:37
|- - Oleg_IT   Цитата(SysRq @ Feb 26 2011, 15:13) Покажи...   Feb 26 2011, 15:26
|- - 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   Вот здесь кое что обсуждалось Так же в документац...   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 Текстовая версия Сейчас: 11th August 2025 - 16:06
Рейтинг@Mail.ru


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