Прошу прощение за объёмы кода.
Ассемблер код инициализации UART0 и прерываний.
CODE
58: {
+000003E7: 9A88 SBI 0x11,0 Set bit in I/O register
61: FlagTx_0 = 0;
+000003E8: 92100226 STS 0x0226,R1 Store direct to data space
63: UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01));
+000003EA: ECE2 LDI R30,0xC2 Load immediate
+000003EB: E0F0 LDI R31,0x00 Load immediate
+000003EC: 8180 LDD R24,Z+0 Load indirect with displacement
+000003ED: 6086 ORI R24,0x06 Logical OR with immediate
+000003EE: 8380 STD Z+0,R24 Store indirect with displacement
64: UBRR0H = 0;
+000003EF: 921000C5 STS 0x00C5,R1 Store direct to data space
65: UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
+000003F1: E08E LDI R24,0x0E Load immediate
+000003F2: 938000C4 STS 0x00C4,R24 Store direct to data space
66: UDR0 = Buff[0];
+000003F4: 91800857 LDS R24,0x0857 Load direct from data space
+000003F6: 938000C6 STS 0x00C6,R24 Store direct to data space
67: CountTx_0 = 1;
+000003F8: E081 LDI R24,0x01 Load immediate
+000003F9: 93800246 STS 0x0246,R24 Store direct to data space
68: UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0));
+000003FB: ECE1 LDI R30,0xC1 Load immediate
+000003FC: E0F0 LDI R31,0x00 Load immediate
+000003FD: 8180 LDD R24,Z+0 Load indirect with displacement
+000003FE: 6288 ORI R24,0x28 Logical OR with immediate
+000003FF: 8380 STD Z+0,R24 Store indirect with displacement
69: }
+00000400: 9508 RET Subroutine return
@00000401: __vector_27
72: {
+00000401: 921F PUSH R1 Push register on stack
+00000402: 920F PUSH R0 Push register on stack
+00000403: B60F IN R0,0x3F In from I/O location
+00000404: 920F PUSH R0 Push register on stack
+00000405: B60B IN R0,0x3B In from I/O location
+00000406: 920F PUSH R0 Push register on stack
+00000407: 2411 CLR R1 Clear Register
+00000408: 938F PUSH R24 Push register on stack
+00000409: 93EF PUSH R30 Push register on stack
+0000040A: 93FF PUSH R31 Push register on stack
73: FlagTx_0 = 1;
+0000040B: E081 LDI R24,0x01 Load immediate
+0000040C: 93800226 STS 0x0226,R24 Store direct to data space
74: UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0));
+0000040E: ECE1 LDI R30,0xC1 Load immediate
+0000040F: E0F0 LDI R31,0x00 Load immediate
+00000410: 8180 LDD R24,Z+0 Load indirect with displacement
+00000411: 7987 ANDI R24,0x97 Logical AND with immediate
+00000412: 8380 STD Z+0,R24 Store indirect with displacement
75: }
+00000413: 91FF POP R31 Pop register from stack
+00000414: 91EF POP R30 Pop register from stack
+00000415: 918F POP R24 Pop register from stack
+00000416: 900F POP R0 Pop register from stack
+00000417: BE0B OUT 0x3B,R0 Out to I/O location
+00000418: 900F POP R0 Pop register from stack
+00000419: BE0F OUT 0x3F,R0 Out to I/O location
+0000041A: 900F POP R0 Pop register from stack
+0000041B: 901F POP R1 Pop register from stack
+0000041C: 9518 RETI Interrupt return
@0000041D: __vector_26
79: {
+0000041D: 921F PUSH R1 Push register on stack
+0000041E: 920F PUSH R0 Push register on stack
+0000041F: B60F IN R0,0x3F In from I/O location
+00000420: 920F PUSH R0 Push register on stack
+00000421: B60B IN R0,0x3B In from I/O location
+00000422: 920F PUSH R0 Push register on stack
+00000423: 2411 CLR R1 Clear Register
+00000424: 938F PUSH R24 Push register on stack
+00000425: 93EF PUSH R30 Push register on stack
+00000426: 93FF PUSH R31 Push register on stack
80: PORTF &=~ (1 << 0);
+00000427: 9888 CBI 0x11,0 Clear bit in I/O register
82: UDR0 = Buff [CountTx_0];
+00000428: 91E00246 LDS R30,0x0246 Load direct from data space
+0000042A: E0F0 LDI R31,0x00 Load immediate
+0000042B: 5AE9 SUBI R30,0xA9 Subtract immediate
+0000042C: 4FF7 SBCI R31,0xF7 Subtract immediate with carry
+0000042D: 8180 LDD R24,Z+0 Load indirect with displacement
+0000042E: 938000C6 STS 0x00C6,R24 Store direct to data space
84: CountTx_0++;
+00000430: 91800246 LDS R24,0x0246 Load direct from data space
+00000432: 5F8F SUBI R24,0xFF Subtract immediate
+00000433: 93800246 STS 0x0246,R24 Store direct to data space
85: if (CountTx_0 == sizeof(Buff))
+00000435: 91800246 LDS R24,0x0246 Load direct from data space
+00000437: 308A CPI R24,0x0A Compare with immediate
+00000438: F451 BRNE PC+0x0B Branch if not equal
87: UCSR0B &=~ (1 << UDRIE0);
+00000439: 918000C1 LDS R24,0x00C1 Load direct from data space
+0000043B: 7D8F ANDI R24,0xDF Logical AND with immediate
+0000043C: 938000C1 STS 0x00C1,R24 Store direct to data space
88: UCSR0B |= (1 << TXCIE0);
+0000043E: 918000C1 LDS R24,0x00C1 Load direct from data space
+00000440: 6480 ORI R24,0x40 Logical OR with immediate
+00000441: 938000C1 STS 0x00C1,R24 Store direct to data space
91: }
+00000443: 91FF POP R31 Pop register from stack
+00000444: 91EF POP R30 Pop register from stack
+00000445: 918F POP R24 Pop register from stack
+00000446: 900F POP R0 Pop register from stack
+00000447: BE0B OUT 0x3B,R0 Out to I/O location
+00000448: 900F POP R0 Pop register from stack
+00000449: BE0F OUT 0x3F,R0 Out to I/O location
+0000044A: 900F POP R0 Pop register from stack
+0000044B: 901F POP R1 Pop register from stack
+0000044C: 9518 RETI Interrupt return
Ассемблер код инициализации UART3 и прерываний.
CODE
159: {
+0000051A: 9A88 SBI 0x11,0 Set bit in I/O register
162: FlagTx_3 = 0;
+0000051B: 92100229 STS 0x0229,R1 Store direct to data space
164: UCSR3C |= ((1 << UCSZ30) | (1 << UCSZ31));
+0000051D: E3E2 LDI R30,0x32 Load immediate
+0000051E: E0F1 LDI R31,0x01 Load immediate
+0000051F: 8180 LDD R24,Z+0 Load indirect with displacement
+00000520: 6086 ORI R24,0x06 Logical OR with immediate
+00000521: 8380 STD Z+0,R24 Store indirect with displacement
165: UBRR3H = 0;
+00000522: 92100135 STS 0x0135,R1 Store direct to data space
166: UBRR3L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
+00000524: E08E LDI R24,0x0E Load immediate
+00000525: 93800134 STS 0x0134,R24 Store direct to data space
167: UDR3 = Buff[0];
+00000527: 91800857 LDS R24,0x0857 Load direct from data space
+00000529: 93800136 STS 0x0136,R24 Store direct to data space
168: CountTx_3 = 1;
+0000052B: E081 LDI R24,0x01 Load immediate
+0000052C: 9380024E STS 0x024E,R24 Store direct to data space
169: UCSR3B |= ((1 << TXEN3) | (1 << UDRIE3));
+0000052E: E3E1 LDI R30,0x31 Load immediate
+0000052F: E0F1 LDI R31,0x01 Load immediate
+00000530: 8180 LDD R24,Z+0 Load indirect with displacement
+00000531: 6288 ORI R24,0x28 Logical OR with immediate
+00000532: 8380 STD Z+0,R24 Store indirect with displacement
170: }
+00000533: 9508 RET Subroutine return
@00000534: __vector_56
173: {
+00000534: 921F PUSH R1 Push register on stack
+00000535: 920F PUSH R0 Push register on stack
+00000536: B60F IN R0,0x3F In from I/O location
+00000537: 920F PUSH R0 Push register on stack
+00000538: B60B IN R0,0x3B In from I/O location
+00000539: 920F PUSH R0 Push register on stack
+0000053A: 2411 CLR R1 Clear Register
+0000053B: 938F PUSH R24 Push register on stack
+0000053C: 93EF PUSH R30 Push register on stack
+0000053D: 93FF PUSH R31 Push register on stack
174: FlagTx_3 = 1;
+0000053E: E081 LDI R24,0x01 Load immediate
+0000053F: 93800229 STS 0x0229,R24 Store direct to data space
176: UCSR3B &=~ ((1 << TXCIE3) | (1 << TXEN3) | (1 << UDRIE3));
+00000541: E3E1 LDI R30,0x31 Load immediate
+00000542: E0F1 LDI R31,0x01 Load immediate
+00000543: 8180 LDD R24,Z+0 Load indirect with displacement
+00000544: 7987 ANDI R24,0x97 Logical AND with immediate
+00000545: 8380 STD Z+0,R24 Store indirect with displacement
177: }
+00000546: 91FF POP R31 Pop register from stack
+00000547: 91EF POP R30 Pop register from stack
+00000548: 918F POP R24 Pop register from stack
+00000549: 900F POP R0 Pop register from stack
+0000054A: BE0B OUT 0x3B,R0 Out to I/O location
+0000054B: 900F POP R0 Pop register from stack
+0000054C: BE0F OUT 0x3F,R0 Out to I/O location
+0000054D: 900F POP R0 Pop register from stack
+0000054E: 901F POP R1 Pop register from stack
+0000054F: 9518 RETI Interrupt return
@00000550: __vector_55
180: {
+00000550: 921F PUSH R1 Push register on stack
+00000551: 920F PUSH R0 Push register on stack
+00000552: B60F IN R0,0x3F In from I/O location
+00000553: 920F PUSH R0 Push register on stack
+00000554: B60B IN R0,0x3B In from I/O location
+00000555: 920F PUSH R0 Push register on stack
+00000556: 2411 CLR R1 Clear Register
+00000557: 938F PUSH R24 Push register on stack
+00000558: 93EF PUSH R30 Push register on stack
+00000559: 93FF PUSH R31 Push register on stack
181: PORTF &=~ (1 << 0);
+0000055A: 9888 CBI 0x11,0 Clear bit in I/O register
183: UDR3 = Buff [CountTx_3];
+0000055B: 91E0024E LDS R30,0x024E Load direct from data space
+0000055D: E0F0 LDI R31,0x00 Load immediate
+0000055E: 5AE9 SUBI R30,0xA9 Subtract immediate
+0000055F: 4FF7 SBCI R31,0xF7 Subtract immediate with carry
+00000560: 8180 LDD R24,Z+0 Load indirect with displacement
+00000561: 93800136 STS 0x0136,R24 Store direct to data space
185: CountTx_3++;
+00000563: 9180024E LDS R24,0x024E Load direct from data space
+00000565: 5F8F SUBI R24,0xFF Subtract immediate
+00000566: 9380024E STS 0x024E,R24 Store direct to data space
186: if (CountTx_3 == sizeof(Buff))
+00000568: 9180024E LDS R24,0x024E Load direct from data space
+0000056A: 308A CPI R24,0x0A Compare with immediate
+0000056B: F451 BRNE PC+0x0B Branch if not equal
188: UCSR3B &=~ (1 << UDRIE3);
+0000056C: 91800131 LDS R24,0x0131 Load direct from data space
+0000056E: 7D8F ANDI R24,0xDF Logical AND with immediate
+0000056F: 93800131 STS 0x0131,R24 Store direct to data space
189: UCSR3B |= (1 << TXCIE3);
+00000571: 91800131 LDS R24,0x0131 Load direct from data space
+00000573: 6480 ORI R24,0x40 Logical OR with immediate
+00000574: 93800131 STS 0x0131,R24 Store direct to data space
192: }
+00000576: 91FF POP R31 Pop register from stack
+00000577: 91EF POP R30 Pop register from stack
+00000578: 918F POP R24 Pop register from stack
+00000579: 900F POP R0 Pop register from stack
+0000057A: BE0B OUT 0x3B,R0 Out to I/O location
+0000057B: 900F POP R0 Pop register from stack
+0000057C: BE0F OUT 0x3F,R0 Out to I/O location
+0000057D: 900F POP R0 Pop register from stack
+0000057E: 901F POP R1 Pop register from stack
+0000057F: 9518 RETI Interrupt return
Не вижу я тут ни чего особенного.
В дебагере видно, что регистры всех каналов инициализированы одинаково. Может это только в дебагере?