Цитата(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
Причина редактирования: Бездумное оформление кода