[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