[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