|
FIQ и регистры, IAR использует R0-R2 |
|
|
|
 |
Ответов
|
Jan 27 2010, 19:05
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659

|
Цитата(zltigo @ Jan 27 2010, 21:11)  Не вызывать подпрограммы. ничего не вызывается, просто инкрементится dword и сбрасываются таймер и AIC __fiq __arm __ramfunc void FIQTimer2Handler(void){ dword dumm; dumm=AT91C_BASE_TC2->TC_SR; time2++; AT91C_BASE_AIC->AIC_EOICR=0xffffffff; } кусок листинга: 243 __fiq __arm __ramfunc void FIQTimer2Handler(void){ \ FIQTimer2Handler: \ 00000000 03002DE9 PUSH {R0,R1} 244 // 245 dword dumm; 246 dumm=AT91C_BASE_TC2->TC_SR; .......... .......... 249 } \ 0000002C 0300BDE8 POP {R0,R1} \ 00000030 04F05EE2 SUBS PC,LR,#+4 ;; return
|
|
|
|
|
Jan 27 2010, 19:35
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Sagittarius @ Jan 27 2010, 22:05)  ничего... Не верю, вот написал и откомпилировал аналогичный по функцинальности шедевр. В расходниках, два регистра из FIQ банка Код 14 __fiq __ramfunc __arm void FIQ_ISR_handler(void) 15 { 16 IO0DIR; \ FIQ_ISR_handler: \ 00000000 8E82A0E3 MOV R8,#-536870904 \ 00000004 A08B88E3 ORR R8,R8,#0x28000 \ 00000008 008098E5 LDR R8,[R8, #+0] 17 counter2++; \ 0000000C 18809FE5 LDR R8,??FIQ_ISR_handler_0 ;; counter2 \ 00000010 009098E5 LDR R9,[R8, #+0] \ 00000014 019089E2 ADD R9,R9,#+1 \ 00000018 009088E5 STR R9,[R8, #+0] 18 EXTINT = EXTINT_EINT2; \ 0000001C 0C809FE5 LDR R8,??FIQ_ISR_handler_0+0x4 ;; 0xffffffffe01fc140 \ 00000020 0490A0E3 MOV R9,#+4 \ 00000024 009088E5 STR R9,[R8, #+0] 19 } \ 00000028 04F05EE2 SUBS PC,LR,#+4 ;; return \ ??FIQ_ISR_handler_0: \ 0000002C ........ DC32 counter2 \ 00000030 40C11FE0 DC32 0xffffffffe01fc140
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 27 2010, 20:49
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659

|
Цитата(zltigo @ Jan 27 2010, 22:35)  Не верю, вот написал и откомпилировал аналогичный по функцинальности шедевр. В расходниках, два регистра из FIQ банка вера это конечно хорошо, но в данном случае не помогает :-( оставил только инкремент, скомпилил - все равно использует общие регистры. Наверняка где то что то указать забыл компилятору, типа галочку в чекбоксе поставить или pragma какую ни будь. Код 243 __fiq __arm __ramfunc void FIQTimer2Handler(void){ \ FIQTimer2Handler: \ 00000000 03002DE9 PUSH {R0,R1} 244 // 245 // dword dumm; 246 // dumm=AT91C_BASE_TC2->TC_SR; 247 time2++; \ 00000004 10009FE5 LDR R0,??FIQTimer2Handler_0 ;; udp \ 00000008 281090E5 LDR R1,[R0, #+40] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 281080E5 STR R1,[R0, #+40] 248 // AT91C_BASE_AIC->AIC_EOICR=0xffffffff; 249 } \ 00000014 0300BDE8 POP {R0,R1} \ 00000018 04F05EE2 SUBS PC,LR,#+4 ;; return \ ??FIQTimer2Handler_0: \ 0000001C ........ DC32 udp
|
|
|
|
Сообщений в этой теме
Sagittarius FIQ и регистры Jan 27 2010, 17:42    zltigo Цитата(Sagittarius @ Jan 27 2010, 23:49) ... Jan 27 2010, 22:26     Sagittarius Цитата(zltigo @ Jan 28 2010, 01:26) IDE и... Jan 28 2010, 05:24      zltigo Цитата(Sagittarius @ Jan 28 2010, 08:24) ... Jan 28 2010, 07:17       SpiritDance В смысле ? push и pop в вашем листинге присутствую... Jan 28 2010, 08:37        zltigo Цитата(SpiritDance @ Jan 28 2010, 11:37) ... Jan 28 2010, 08:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|