[elektro] HT PICC18 problema
Ágó István
ago.istvan at gmail.com
Thu Jan 15 17:40:25 CET 2009
A magas prioritású megszakításnál van olyan, hogy hardveresen menti a
BSR, STATUS és WREG regisztereket, majd visszaállítja azokat a RETFIE
F utasítás hatására. Viszont ha a megszakítás pillanatában egy MOVFF
utasítás volt épp folyamatban, akkor valami hiba folytán nem a
megfelelő adatokat állítja vissza a megszakítási rutin végén. Nézd
meg, milyen revízióju a chip, és nézd meg a hozzá tartozó errata-t.
Nekem gyanús, hogy ez az lesz, mivel a nem hardveres mentés működik, a
hardveres viszont nem. Ha valóban ez lesz, akkor a magas szintű
megszakítást is úgy kell definiálni, mintha alacsony szintű lenne,
mert akkor oda is beteszi a szoftveres mentést a fordító, és a végén
nem RETFIE F-el tér vissza, csak RETFIE-vel. Mondjuk HiTech fordítónál
nemtudom hogyan kell ezt kikényszeríteni, a C18 módszer benne szokott
lennie az errata-ban...
2009/1/15 Moczik Gabor <pm_levlista at progzmaster.hu>:
> potyo wrote:
>> Mi a helyzet a regiszterek mentésével? Ha megszakítási rutinból
>> függvényt hívsz, akkor akár feleslegesen is elmentheti az FSRx
>> regiszterekt, a hardveres szorzó regisztereit, stb.
>
> Most rögtön írni akartam, hogy van más függvény hívás is az ISR-ben, de
> közben átnéztem, és valóban nincs. Holnap kipróbálom mi van ha beteszek
> máshová egy függvényhívást. Meg mi van ha mondjuk átteszem az egész soros
> port kezelést low priority isr-be. Mindenesetre elég érdekes.
>
> A működő verzió:
> 3461 00140E C4D9 FFF3 movff saved_regsl+0,prodl
> 3462 001412 C4DA FFF4 movff saved_regsl+1,prodh
> 3463 001416 C4DB FFF5 movff saved_regsl+2,tablat
> 3464 00141A C4DC FFF6 movff saved_regsl+3,tblptrl
> 3465 00141E C4DD FFF7 movff saved_regsl+4,tblptrh
> 3466 001422 C4DE F000 movff saved_regsl+5,btemp
> 3467 001426 C4DF F001 movff saved_regsl+6,btemp+1
> 3468 00142A C4E0 F002 movff saved_regsl+7,btemp+2
> 3469 00142E C4E1 F003 movff saved_regsl+8,btemp+3
> 3470 001432 C4E2 F004 movff saved_regsl+9,btemp+4
> 3471 001436 C4E3 F005 movff saved_regsl+10,btemp+5
> 3472 00143A C4E4 F006 movff saved_regsl+11,btemp+6
> 3473 00143E C4E5 F007 movff saved_regsl+12,btemp+7
> 3474 001442 C4E6 F008 movff saved_regsl+13,btemp+8
> 3475 001446 C4E7 F009 movff saved_regsl+14,btemp+9
> 3476 00144A C4E8 F00A movff saved_regsl+15,btemp+10
> 3477 00144E C4E9 F00B movff saved_regsl+16,btemp+11
> 3478 001452 C4EA F00C movff saved_regsl+17,btemp+12
> 3479 001456 C4EB F00D movff saved_regsl+18,btemp+13
> 3480 00145A C4EC F00E movff saved_regsl+19,btemp+14
> 3481 00145E C4ED FFDA movff saved_regsl+20,fsr2h
> 3482 001462 C4EE FFD9 movff saved_regsl+21,fsr2l
> 3483 001466 C4EF FFE2 movff saved_regsl+22,fsr1h
> 3484 00146A C4F0 FFE1 movff saved_regsl+23,fsr1l
> 3485 00146E C4F1 FFEA movff saved_regsl+24,fsr0h
> 3486 001472 C4F2 FFE9 movff saved_regsl+25,fsr0l
> 3487 001476 C4F3 FFE8 movff saved_regsl+26,wreg
> 3488 00147A C4F4 FFFA movff saved_regsl+27,pclath
> 3489 00147E C010 FFE0 movff saved_bsrl,bsr
> 3490 001482 C4F5 FFD8 movff saved_regsl+28,status
> 3491 001486 0010 retfie
> 3492 001488 FFFF dw 0FFFFh
>
> A nem működő:
> 3387 0013A6 C4E5 FFF3 movff saved_regsh+0,prodl
> 3388 0013AA C4E6 FFF4 movff saved_regsh+1,prodh
> 3389 0013AE C4E7 FFF5 movff saved_regsh+2,tablat
> 3390 0013B2 C4E8 FFF6 movff saved_regsh+3,tblptrl
> 3391 0013B6 C4E9 FFF7 movff saved_regsh+4,tblptrh
> 3392 0013BA C4EA F000 movff saved_regsh+5,btemp
> 3393 0013BE C4EB F001 movff saved_regsh+6,btemp+1
> 3394 0013C2 C4EC F002 movff saved_regsh+7,btemp+2
> 3395 0013C6 C4ED F003 movff saved_regsh+8,btemp+3
> 3396 0013CA C4EE F004 movff saved_regsh+9,btemp+4
> 3397 0013CE C4EF F005 movff saved_regsh+10,btemp+5
> 3398 0013D2 C4F0 F006 movff saved_regsh+11,btemp+6
> 3399 0013D6 C4F1 F007 movff saved_regsh+12,btemp+7
> 3400 0013DA C4F2 F008 movff saved_regsh+13,btemp+8
> 3401 0013DE C4F3 F009 movff saved_regsh+14,btemp+9
> 3402 0013E2 C4F4 F00A movff saved_regsh+15,btemp+10
> 3403 0013E6 C4F5 F00B movff saved_regsh+16,btemp+11
> 3404 0013EA C4F6 F00C movff saved_regsh+17,btemp+12
> 3405 0013EE C4F7 F00D movff saved_regsh+18,btemp+13
> 3406 0013F2 C4F8 F00E movff saved_regsh+19,btemp+14
> 3407 0013F6 C4F9 FFDA movff saved_regsh+20,fsr2h
> 3408 0013FA C4FA FFD9 movff saved_regsh+21,fsr2l
> 3409 0013FE C4FB FFE2 movff saved_regsh+22,fsr1h
> 3410 001402 C4FC FFE1 movff saved_regsh+23,fsr1l
> 3411 001406 C4FD FFEA movff saved_regsh+24,fsr0h
> 3412 00140A C4FE FFE9 movff saved_regsh+25,fsr0l
> 3413 00140E C4FF FFFA movff saved_regsh+26,pclath
> 3414 001412 0011 retfie f
> 3415 001414 FFFF dw 0FFFFh
>
>
>> Amúgy minek ez az rs232_receive(ii), amikor már egyszer kiolvasod az RCREG-et?
>
> Az végzi a fogadott byte kommunikációs protokoll szerinti feldolgozását.
> Egyébként nem is tudom minek tettem bele az ii változót,
> { rs232_receive(RCREG); RCIF=0; } is jó lett volna. :-)
>
> --
> ((( Móczik Gábor )))--((( E~mail: "pm-01" @AT "progzmaster" .DOT "hu" )))
> ((( Skype: moczik )))
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list