Re: 求助关于dspic30f中关于片内EEPROM读写擦的问题
|
||||
---|---|---|---|---|
新會員
|
把TBLPAG=0x7F;调换到
NVMADR=tbl_addr+2*tbl_offset; WREG0=NVMADR; 之前就不会出现NVMADR清空的问题了,但是执行 NVMCONbits.WR=1;还是没有反应
發表於: 2006/5/23 12:05
|
|||
|
Re: 求助关于dspic30f中关于片内EEPROM读写擦的问题
|
||||
---|---|---|---|---|
版主
|
當程式執行到 NVMKEY=0x55 & NVMKEY=0xAA 時,EEPROM 會進行unlocked程序,此一動作必須是連續動作時才會暫時解鎖,正因單步執行ICD2會執行內部的監督程式,所以導致解鎖動作不連貫那就無法正常謝資料到EEPROM了。所以不要對EEPROM寫入程式作單步的仿真,可以用設定斷點的方式來仿真。
Microchip provided the example cod for access Internal EEPROM: http://www.microchip.com/stellent/idc ... e=SS_GET_PAGE&nodeId=2509
發表於: 2006/5/23 11:20
|
|||
|
求助关于dspic30f中关于片内EEPROM读写擦的问题
|
||||
---|---|---|---|---|
新會員
|
unsigned int Write_Data_EE_Word(unsigned char tbl_offset,unsigned int value)
{ unsigned int tbl_addr=0xFC00; TBLPAG=0x7F; WREG0=tbl_addr+2*tbl_offset; WREG1=value; asm("TBLWTL W1,[W0]"); NVMCON=EE_Word_Write_Code; SRbits.IPL=7; NVMKEY=0x55; NVMKEY=0xAA; Nop(); Nop(); //asm("bset NVMCON,#WR"); NVMCONbits.WR=1; while(NVMCONbits.WR==1); NVMCONbits.WREN=0; SRbits.IPL=0; } 以上是我片内EEPROM写的一个子程序,在仿真的时候发现一个奇怪的问题就是单步运行到“NVMCONbits.WR=1”这一步之后,NVMCON中的WR位没办法置1,导致无法进行写操作,不知道为什么,这条指令还受到什么的限制,我看DATASHEET中写到这个位只能软件写1,而不能清零,我想我用的应该没什么错吧,请指教,谢谢! 还有想我用汇编asm("bset NVMCON,#WR")下去试一下,却编译出现这个错误 C:\DOCUME~1\HP\LOCALS~1\Temp/ccgNaaaa.s: Assembler messages: C:\DOCUME~1\HP\LOCALS~1\Temp/ccgNaaaa.s:5099: Error: Invalid operands specified ('bset NVMCON,#WR'). C:\DOCUME~1\HP\LOCALS~1\Temp/ccgNaaaa.s:5099: Check operand #2. Operand must be between 0 and 15, inclusive. 更不知道怎么纠错
發表於: 2006/5/23 10:26
|
|||
|