[elektro] Pic24 memória... még mindig
Skandar Graun
sgraun at gmail.com
Sun Oct 27 18:00:22 CET 2013
A resetet úgy értem, hogy újraindul a proci.
Megnéztem az address trap-ot, nem ezek az esetek forognak fenn.
Például a következő deklaráció stabil el nem indulást okoz:
__eds__ unsigned int phegyek_i[4525]
__attribute__((section("internal_array"), address(INTERNAL_ADDRESS_1),
eds));
Semmit nem kell csinálnom hozzá... pusztán annyi, hogy ezt deklarálom,
(Azaz induláskor feltölti egy kezdő értékkel) már elég.
Ha így adom meg:
__eds__ unsigned int phegyek_i[4525]
__attribute__((section("internal_array"), address(INTERNAL_ADDRESS_1), eds,
noload));
akkor jó.
De ha a PSWPAG regiszterbe 2-nél magasabb számot írok (mindegy, mekkorát,
kilépek-e a grafika címtartományából,) akkor már elszáll.
Az epmp alternativ master módban van.
Óvatosan elveszem tőle, visszaveszem a procihoz
void lWrite16_RAM(DWORD address, WORD data)
{
WORD pointer;
WORD temp,temp2;
address <<= 1;
address += (DWORD)CS1_BASE_ADDRESS;
pointer = ((DWORD_VAL)address).w[0];
pointer |= 0x8000;
address <<= 1;
temp = DSWPAG; //mentem a lapregiszter
temp2 = PMCON2; //mentem az epmp állapoto
while(PMCON2bits.BUSY); //amíg foglalt az epmp, addig békén
hagyom
PMCON2 &= 0xFCFF; // epmp-t elveszi a CPU
while(!PMCON2bits.CURMST); // meg is kapta
DSWPAG = ((DWORD_VAL)address).v[2]; //lapregiszter beállítása
*((WORD*)pointer) = data; // adat írás
while(PMCON2bits.BUSY);
DSWPAG = temp;
PMCON2 = temp2;
while(PMCON2bits.CURMST);
}
akkor egy szép nagy villanással a rutin végrehajtódik (Ez egy 5000 elemű
memóriamásolás magja, tényleg villan, zilálódik a képernyő)
Ellenben a memóriatartalom nem marad meg, bár perpill még abban sem vagyok
biztos, hogy odaíródik, ahova szeretném.
Ha lebutítva közvetlenül akarok címezni:
void lWrite16_RAM(DWORD address, WORD data)
{
WORD pointer;
WORD temp,temp2;
pointer = ((DWORD_VAL)address).w[0];
temp = DSWPAG;
temp2 = PMCON2;
while(PMCON2bits.BUSY);
PMCON2 &= 0xFCFF;
while(!PMCON2bits.CURMST);
DSWPAG = 11; //itt
adok külső lapra mutató értéket
*((WORD*)pointer) = data;
while(PMCON2bits.BUSY);
DSWPAG = temp;
PMCON2 = temp2;
while(PMCON2bits.CURMST);
}
Akkor is elszáll.
Teljesen úgy néz ki, hogy ha az epmp-t, ami ugye elengedhetetlen a külső
memória eléréséhez, elveszem a grafikus vezérlőtől, akkor az összedől.
Ténylegesen sehol nem találtam olyan példaprogramot a microchipes
oldalakon, ahol külső memóriaelérés ÉS grafika együtt lenne.
2013. október 27. 17:40 Info írta, <info at kiralyelektronika.hu>:
> > Ha hozzányúlok a lapregiszterekhez, még akkoris, ha figyelem, kinél is
> van
> > az epmp master, jó esetben is reset a válasz.
>
> Nem ismerem a procit se a sw környezetet, de reset egyből?
> Fura szokása van :) Nem lehet, hogy valami le nem kezelt IT-re
> futsz, pl. valami fault? És esetleg a resetet a fejlesztő sw
> definiálta?
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list