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)