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

 
 
> Какие есть особенности инициализации 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, 21:47
Сообщение #2


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

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



Bug 47696 - [AVR] Compilation for atmega2560 produces incomplete interrupt vector table (USART2,3)

Проверьте таблицу векторов прерываний.
Bug свежепойманный, в WinAVR 2010 присутствует вроде бы... ...хм, посмотрел *.lss. Всё есть, и правильно, вроде бы.

PS: тег codebox же.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Feb 27 2011, 09:16
Сообщение #3


Знающий
****

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



Цитата(SysRq @ Feb 27 2011, 00:47) *
Bug 47696 - [AVR] Compilation for atmega2560 produces incomplete interrupt vector table (USART2,3)

Проверьте таблицу векторов прерываний.
Bug свежепойманный, в WinAVR 2010 присутствует вроде бы... ...хм, посмотрел *.lss. Всё есть, и правильно, вроде бы.

PS: тег codebox же.

Ни чего плохого в таблице прерываний не нахожу.
Привожу её полностью.
CODE
+00000000: 940C0072 JMP 0x00000072 Jump
+00000002: 940C0093 JMP 0x00000093 Jump
+00000004: 940C0093 JMP 0x00000093 Jump
+00000006: 940C0093 JMP 0x00000093 Jump
+00000008: 940C0093 JMP 0x00000093 Jump
+0000000A: 940C0093 JMP 0x00000093 Jump
+0000000C: 940C0093 JMP 0x00000093 Jump
+0000000E: 940C0093 JMP 0x00000093 Jump
+00000010: 940C0093 JMP 0x00000093 Jump
+00000012: 940C0093 JMP 0x00000093 Jump
+00000014: 940C0093 JMP 0x00000093 Jump
+00000016: 940C0093 JMP 0x00000093 Jump
+00000018: 940C0093 JMP 0x00000093 Jump
+0000001A: 940C0093 JMP 0x00000093 Jump
+0000001C: 940C0093 JMP 0x00000093 Jump
+0000001E: 940C0093 JMP 0x00000093 Jump
+00000020: 940C0093 JMP 0x00000093 Jump
+00000022: 940C0093 JMP 0x00000093 Jump
+00000024: 940C0093 JMP 0x00000093 Jump
+00000026: 940C0093 JMP 0x00000093 Jump
+00000028: 940C0093 JMP 0x00000093 Jump
+0000002A: 940C0119 JMP 0x00000119 Jump
+0000002C: 940C0093 JMP 0x00000093 Jump
+0000002E: 940C0093 JMP 0x00000093 Jump
+00000030: 940C0093 JMP 0x00000093 Jump
+00000032: 940C0093 JMP 0x00000093 Jump
+00000034: 940C041E JMP 0x0000041E Jump
+00000036: 940C0402 JMP 0x00000402 Jump
+00000038: 940C0093 JMP 0x00000093 Jump
+0000003A: 940C010A JMP 0x0000010A Jump
+0000003C: 940C0093 JMP 0x00000093 Jump
+0000003E: 940C0093 JMP 0x00000093 Jump
+00000040: 940C0093 JMP 0x00000093 Jump
+00000042: 940C0093 JMP 0x00000093 Jump
+00000044: 940C0093 JMP 0x00000093 Jump
+00000046: 940C0093 JMP 0x00000093 Jump
+00000048: 940C0093 JMP 0x00000093 Jump
+0000004A: 940C0484 JMP 0x00000484 Jump
+0000004C: 940C0468 JMP 0x00000468 Jump
+0000004E: 940C0093 JMP 0x00000093 Jump
+00000050: 940C0093 JMP 0x00000093 Jump
+00000052: 940C0093 JMP 0x00000093 Jump
+00000054: 940C0093 JMP 0x00000093 Jump
+00000056: 940C0093 JMP 0x00000093 Jump
+00000058: 940C0093 JMP 0x00000093 Jump
+0000005A: 940C0093 JMP 0x00000093 Jump
+0000005C: 940C0093 JMP 0x00000093 Jump
+0000005E: 940C0093 JMP 0x00000093 Jump
+00000060: 940C0093 JMP 0x00000093 Jump
+00000062: 940C0093 JMP 0x00000093 Jump
+00000064: 940C0093 JMP 0x00000093 Jump
+00000066: 940C0093 JMP 0x00000093 Jump
+00000068: 940C04EE JMP 0x000004EE Jump
+0000006A: 940C04D2 JMP 0x000004D2 Jump
+0000006C: 940C0093 JMP 0x00000093 Jump
+0000006E: 940C0554 JMP 0x00000554 Jump
+00000070: 940C0538 JMP 0x00000538 Jump

Первые строки обработчиков прерываний UDRE
CODE
@0000041E: __vector_26
80: {
+0000041E: 921F PUSH R1 Push register on stack

@00000484: __vector_37
115: {
+00000484: 921F PUSH R1 Push register on stack

@000004EE: __vector_52
149: {
+000004EE: 921F PUSH R1 Push register on stack

@00000554: __vector_55
184: {
+00000554: 921F PUSH R1 Push register on stack


Возможно это то самый баг, который Вы указали, но как его обойти в WinAVR-20100110 не знаю. Рекомендации даны для gcc.

Go to the top of the page
 
+Quote Post
SysRq
сообщение Feb 27 2011, 10:07
Сообщение #4


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

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



AVCC к питанию подключен? PORTF питается от него, наличие прерываний по импульсам на PF0 проверяете?..
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
- - 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 Текстовая версия Сейчас: 20th August 2025 - 02:34
Рейтинг@Mail.ru


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