Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

ReAl , вот тебе для разминки(+)

Отправлено =L.A.= 14 июля 2007 г. 00:17


Нацарапал программку, по которой заддавал тебе вопрос, но как ты и говорил, много времени уходит на сохраниние контекста. Мне удалось установками разных галочек в ИАРе уменьшить количество сохраняемых регистров до 15. Можно ли еще уменьшить или это уже предел?
Проц AtTiny45, IAR 4.21


//*************************************************************************//
// Variables //
//=========================================================================//
#define N_NOTE 2 // Кол одновременно воспр-х нот (аккордом)
//*************************************************************************//
// Структура с данными о каждой ноте //
//=========================================================================//
typedef struct // //
{ // //
uint ns_freq; // Angular Speed 2 байта //
ulong ns_rptr; // Wave table read pointer (16.8 fraction) //
uchar ns_lvl; // Level - уровень сигнала ноты //
uchar ns_wrap; // Loop Flag //
uchar ns_loop; // Loop Count //
uchar ns_lp; // Level Pointer //
}TParNotes; // //
//*************************************************************************//
// Массив структур параметров нот //
//=========================================================================//
TParNotes NtPrm[N_NOTE];

//////////////////////////////////
86 #pragma vector = TIM0_COMPA_vect //
87 //-------------------------------------------------------------------------//

\ In segment CODE, align 2, keep-with-next
88 __interrupt void Tmr0_Int (void) //
\ Tmr0_Int:
89 { //==============================//
\ 00000000 939A ST -Y, R25
\ 00000002 938A ST -Y, R24
\ 00000004 93FA ST -Y, R31
\ 00000006 93EA ST -Y, R30
\ 00000008 922A ST -Y, R2
\ 0000000A 921A ST -Y, R1
\ 0000000C 920A ST -Y, R0
\ 0000000E 937A ST -Y, R23
\ 00000010 936A ST -Y, R22
\ 00000012 935A ST -Y, R21
\ 00000014 934A ST -Y, R20
\ 00000016 933A ST -Y, R19
\ 00000018 932A ST -Y, R18
\ 0000001A 931A ST -Y, R17
\ 0000001C 930A ST -Y, R16
\ 0000001E B62F IN R2, 0x3F
90 uchar i; // //
91 // // //
92 i = 0; // //
93 EnvlpOut = 0; // //
\ 00000020 E000 LDI R16, 0
\ 00000022 .... LDI R30, NtPrm
\ 00000024 E0F0 LDI R31, 0
\ 00000026 8F02 STD Z+26, R16
\ 00000028 8F03 STD Z+27, R16
\ 0000002A .... LDI R24, LOW((NtPrm + 2))
\ 0000002C E092 LDI R25, 2
94 //=========================================//==============================//
95 do
96 {
97 //
98 if(NtPrm[i].ns_lp == 255)
\ ??Tmr0_Int_0:
\ 0000002E 2FE8 MOV R30, R24
\ 00000030 8107 LDD R16, Z+7
\ 00000032 3F0F CPI R16, 255
\ 00000034 F1B1 BREQ ??Tmr0_Int_1
99 goto MtkIsrNxt;
100 //-----------------------------------------
101 j = ((NtPrm[i].ns_rptr)/0x100);
\ 00000036 8101 LDD R16, Z+1
\ 00000038 8112 LDD R17, Z+2
\ 0000003A .... LDI R30, NtPrm
\ 0000003C 8B04 STD Z+20, R16
\ 0000003E 8B15 STD Z+21, R17
102 //
103 EnvlpOut = EnvlpOut + (((Wt_Loop[j])*(NtPrm[i].ns_lvl)) >>1);
\ 00000040 E800 LDI R16, 128
\ 00000042 E019 LDI R17, 9
\ 00000044 8924 LDD R18, Z+20
\ 00000046 8935 LDD R19, Z+21
\ 00000048 0F02 ADD R16, R18
\ 0000004A 1F13 ADC R17, R19
\ 0000004C 01F8 MOVW R31:R30, R17:R16
\ 0000004E 9144 LPM R20, Z
\ 00000050 2F54 MOV R21, R20
\ 00000052 0F55 LSL R21
\ 00000054 0B55 SBC R21, R21
\ 00000056 2FE8 MOV R30, R24
\ 00000058 E0F0 LDI R31, 0
\ 0000005A 8104 LDD R16, Z+4
\ 0000005C E010 LDI R17, 0
\ 0000005E .... RCALL ?S_MUL_L02
\ 00000060 9515 ASR R17
\ 00000062 9507 ROR R16
\ 00000064 .... LDI R30, NtPrm
\ 00000066 8D22 LDD R18, Z+26
\ 00000068 8D33 LDD R19, Z+27
\ 0000006A 0F20 ADD R18, R16
\ 0000006C 1F31 ADC R19, R17
\ 0000006E 8F22 STD Z+26, R18
\ 00000070 8F33 STD Z+27, R19
104 //
105 NtPrm[i].ns_wrap = 255;
\ 00000072 EF0F LDI R16, 255
\ 00000074 2FE8 MOV R30, R24
\ 00000076 8305 STD Z+5, R16
106 //
107 NtPrm[i].ns_rptr= NtPrm[i].ns_rptr + NtPrm[i].ns_freq;
\ 00000078 50E2 SUBI R30, 2
\ 0000007A 8100 LD R16, Z
\ 0000007C 8111 LDD R17, Z+1
\ 0000007E 2FE8 MOV R30, R24
\ 00000080 8140 LD R20, Z
\ 00000082 8151 LDD R21, Z+1
\ 00000084 8162 LDD R22, Z+2
\ 00000086 8173 LDD R23, Z+3
\ 00000088 0F40 ADD R20, R16
\ 0000008A 1F51 ADC R21, R17
\ 0000008C 1F6F ADC R22, R31
\ 0000008E 1F7F ADC R23, R31
\ 00000090 8340 ST Z, R20
\ 00000092 8351 STD Z+1, R21
\ 00000094 8362 STD Z+2, R22
\ 00000096 8373 STD Z+3, R23
108 //
109 if((*((char*)(&NtPrm[i].ns_rptr)+2)) > 2)
\ 00000098 3064 CPI R22, 4
\ 0000009A F018 BRCS ??Tmr0_Int_1
110 {
111 *((char*)(&NtPrm[i].ns_rptr)+2) = TB_STRT_ADR_H;
\ 0000009C E003 LDI R16, 3
\ 0000009E 8302 STD Z+2, R16
112 *((char*)(&NtPrm[i].ns_rptr)+1) = TB_STRT_ADR_L;
\ 000000A0 83F1 STD Z+1, R31
113 }
114 MtkIsrNxt:
115 i++;
116 }
117 while(i < N_NOTE);
\ ??Tmr0_Int_1:
\ 000000A2 5F86 SUBI R24, 246
\ 000000A4 959A DEC R25
\ 000000A6 F619 BRNE ??Tmr0_Int_0
118 //=========================================//==============================//
119 OCR1A = (0x8000 + EnvlpOut)/0x100;
\ 000000A8 .... LDI R30, NtPrm
\ 000000AA 8D13 LDD R17, Z+27
\ 000000AC 5810 SUBI R17, 128
\ 000000AE BD1E OUT 0x2E, R17
120 //
121 if((++TmrS) == 0)
\ 000000B0 8D05 LDD R16, Z+29
\ 000000B2 9503 INC R16
\ 000000B4 8F05 STD Z+29, R16
\ 000000B6 2300 TST R16
\ 000000B8 F431 BRNE ??Tmr0_Int_2
122 TmrMG++;
\ 000000BA 8906 LDD R16, Z+22
\ 000000BC 8917 LDD R17, Z+23
\ 000000BE 5F0F SUBI R16, 255
\ 000000C0 4F1F SBCI R17, 255
\ 000000C2 8B06 STD Z+22, R16
\ 000000C4 8B17 STD Z+23, R17
123 //
124 } // __interrupt
\ ??Tmr0_Int_2:
\ 000000C6 BE2F OUT 0x3F, R2
\ 000000C8 9109 LD R16, Y+
\ 000000CA 9119 LD R17, Y+
\ 000000CC 9129 LD R18, Y+
\ 000000CE 9139 LD R19, Y+
\ 000000D0 9149 LD R20, Y+
\ 000000D2 9159 LD R21, Y+
\ 000000D4 9169 LD R22, Y+
\ 000000D6 9179 LD R23, Y+
\ 000000D8 9009 LD R0, Y+
\ 000000DA 9019 LD R1, Y+
\ 000000DC 9029 LD R2, Y+
\ 000000DE 91E9 LD R30, Y+
\ 000000E0 91F9 LD R31, Y+
\ 000000E2 9189 LD R24, Y+
\ 000000E4 9199 LD R25, Y+
\ 000000E6 9518 RETI



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 13:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru