Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem sa direktnim upisom u flash
#1
Radio sam sve sto mi je palo na pamet ali PIC24FJ256GB106 nece da upise sadrzaj u interni flash preko adrese 0x200F8.
Dakle, do nje sve radi OK, upise i u nju ali vec u 0x200FA nece da mu das cokoloadu.

Evo slike kako izgledaju memorijske lokacije nakon upisa.

Evo i najglupljeg moguceg koda kojim sam testirao. Ima li neko ideju?


Code:
#include <p24Fxxxx.h>
#include "GenericTypeDefs.h"


   _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & ICS_PGx2)
   _CONFIG2( PLL_96MHZ_ON & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV3 & IOL1WAY_ON)
   _CONFIG3( WPDIS_WPDIS )
           
void WriteLatch(WORD page, WORD addrLo, WORD dataHi, WORD dataLo);
void WriteFlash(DWORD_VAL addr, unsigned char data);


int main(void)
{
  //init LED's
   LATG &= 0xFC3F; TRISG &= 0xFC3F; LATF &= 0xFFCF; TRISF &= 0xFFCF; //G6,7,8,9 and F4,5
   TRISF |= 0x0030;
   TRISG |= 0x0300;
   TRISG &= 0x00C0;

unsigned char data;
DWORD_VAL sourceAddr;

   data = 'P';
   sourceAddr.Val = 0x200F0;
   WriteFlash(sourceAddr, data);

   data = 'I';
   sourceAddr.Val = 0x200F2;
   WriteFlash(sourceAddr, data);
   
   data = 'C';
   sourceAddr.Val = 0x200F4;
   WriteFlash(sourceAddr, data);

   data = '2';
   sourceAddr.Val = 0x200F6;
   WriteFlash(sourceAddr, data);

   data = '4';
   sourceAddr.Val = 0x200F8;
   WriteFlash(sourceAddr, data);

   data = 'F';
   sourceAddr.Val = 0x200FA;
   WriteFlash(sourceAddr, data);

   data = 'J';
   sourceAddr.Val = 0x200FC;
   WriteFlash(sourceAddr, data);
 
   TRISF ^= 0x0030;
   while(1)
   {
   }

   return 0;
       
}

void WriteLatch(WORD page, WORD addrLo, WORD dataHi, WORD dataLo)
{
TBLPAG = page;

__builtin_tblwtl(addrLo, dataLo);
__builtin_tblwth(addrLo, dataHi);

}


void WriteFlash(DWORD_VAL addr, unsigned char data)
{
unsigned char i = 0;
DWORD_VAL tmp;

NVMCON = 0x4003;

   asm("clrwdt");

tmp.v[0] = data;
tmp.v[1] = 0;
tmp.v[2] = 0;
tmp.v[3] = 0;

//write data into latches
   WriteLatch(addr.word.HW, addr.word.LW, tmp.word.HW, tmp.word.LW);

//execute write sequence
   __builtin_disi(5);
   __builtin_write_NVM();
   while(NVMCONbits.WR == 1);
   
NVMCONbits.WREN = 0;

}
Dakle, kod treba da upise: "PIC24FJ" a vidi se samo "PIC24"
'F' treba da bude na lokaciji 0x200FA a 'J' na lokaciji 0x200FC


Attached Files Thumbnail(s)

Reply


Messages In This Thread
Problem sa direktnim upisom u flash - by gorankg - 04-16-2019, 10:54 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)