Сделал
extern __near void (* pTX_InterruptFunction)(void);
а сам interrupt
Код
#pragma vector = USART_TXC_vect
__interrupt void TXCinterrupt(void)
{
pTX_InterruptFunction();
}
__interrupt void TXCinterrupt(void)
{
pTX_InterruptFunction();
}
все работает но вот такое генерируется
Код
\ 00000000 93BA ST -Y, R27
\ 00000002 93AA ST -Y, R26
\ 00000004 938A ST -Y, R24
\ 00000006 93FA ST -Y, R31
\ 00000008 93EA ST -Y, R30
\ 0000000A 923A ST -Y, R3
\ 0000000C 922A ST -Y, R2
\ 0000000E 921A ST -Y, R1
\ 00000010 920A ST -Y, R0
\ 00000012 937A ST -Y, R23
\ 00000014 936A ST -Y, R22
\ 00000016 935A ST -Y, R21
\ 00000018 934A ST -Y, R20
\ 0000001A 933A ST -Y, R19
\ 0000001C 932A ST -Y, R18
\ 0000001E 931A ST -Y, R17
\ 00000020 930A ST -Y, R16
\ 00000022 B78F IN R24, 0x3F
54 pTX_InterruptFunction();
\ 00000024 .... LDI R26, LOW(pTX_InterruptFunction)
\ 00000026 .... LDI R27, (pTX_InterruptFunction) >> 8
\ 00000028 91ED LD R30, X+
\ 0000002A 91FC LD R31, X
\ 0000002C 9509 ICALL
55 }
\ 0000002E BF8F OUT 0x3F, R24
\ 00000030 9109 LD R16, Y+
\ 00000032 9119 LD R17, Y+
\ 00000034 9129 LD R18, Y+
\ 00000036 9139 LD R19, Y+
\ 00000038 9149 LD R20, Y+
\ 0000003A 9159 LD R21, Y+
\ 0000003C 9169 LD R22, Y+
\ 0000003E 9179 LD R23, Y+
\ 00000040 9009 LD R0, Y+
\ 00000042 9019 LD R1, Y+
\ 00000044 9029 LD R2, Y+
\ 00000046 9039 LD R3, Y+
\ 00000048 91E9 LD R30, Y+
\ 0000004A 91F9 LD R31, Y+
\ 0000004C 9189 LD R24, Y+
\ 0000004E 91A9 LD R26, Y+
\ 00000050 91B9 LD R27, Y+
\ 00000052 9518 RETI
\ 00000002 93AA ST -Y, R26
\ 00000004 938A ST -Y, R24
\ 00000006 93FA ST -Y, R31
\ 00000008 93EA ST -Y, R30
\ 0000000A 923A ST -Y, R3
\ 0000000C 922A ST -Y, R2
\ 0000000E 921A ST -Y, R1
\ 00000010 920A ST -Y, R0
\ 00000012 937A ST -Y, R23
\ 00000014 936A ST -Y, R22
\ 00000016 935A ST -Y, R21
\ 00000018 934A ST -Y, R20
\ 0000001A 933A ST -Y, R19
\ 0000001C 932A ST -Y, R18
\ 0000001E 931A ST -Y, R17
\ 00000020 930A ST -Y, R16
\ 00000022 B78F IN R24, 0x3F
54 pTX_InterruptFunction();
\ 00000024 .... LDI R26, LOW(pTX_InterruptFunction)
\ 00000026 .... LDI R27, (pTX_InterruptFunction) >> 8
\ 00000028 91ED LD R30, X+
\ 0000002A 91FC LD R31, X
\ 0000002C 9509 ICALL
55 }
\ 0000002E BF8F OUT 0x3F, R24
\ 00000030 9109 LD R16, Y+
\ 00000032 9119 LD R17, Y+
\ 00000034 9129 LD R18, Y+
\ 00000036 9139 LD R19, Y+
\ 00000038 9149 LD R20, Y+
\ 0000003A 9159 LD R21, Y+
\ 0000003C 9169 LD R22, Y+
\ 0000003E 9179 LD R23, Y+
\ 00000040 9009 LD R0, Y+
\ 00000042 9019 LD R1, Y+
\ 00000044 9029 LD R2, Y+
\ 00000046 9039 LD R3, Y+
\ 00000048 91E9 LD R30, Y+
\ 0000004A 91F9 LD R31, Y+
\ 0000004C 9189 LD R24, Y+
\ 0000004E 91A9 LD R26, Y+
\ 00000050 91B9 LD R27, Y+
\ 00000052 9518 RETI
И как видно перервание становится медленое.
А мои функции совсем простенкие,такое сохранение регистров не нужно.
Явно что то не так делаю. Как правилно ето делат?