CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

not working write_program_memory

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
roccat



Joined: 13 Jan 2013
Posts: 8

View user's profile Send private message

not working write_program_memory
PostPosted: Sun Mar 30, 2014 1:03 pm     Reply with quote

hi. not working write_program_memory on dspic33EP64GP504.

Code:

CCS PCD C Compiler, Version 5.021

               Filename:   E:\MbCg\test\test.lst

               ROM used:   896 bytes (2%)
                           Largest free fragment is 40064
               RAM used:   66 (1%) at main() level
                           64 (1%) worst case
               Stack used: 20 locations
               Stack size: 48

*
0000:  GOTO    320
.................... //#include <test.h>
.................... //#include <CRC.C>
.................... //#define icd3 
.................... //==============================================================================
.................... #include <33EP64GP504.h>
.................... //////////// Standard Header file for the DSPIC33EP64GP504 device ////////////////
.................... ///////////////////////////////////////////////////////////////////////////
.................... ////        (C) Copyright 1996, 2013 Custom Computer Services          ////
.................... //// This source code may only be used by licensed users of the CCS C  ////
.................... //// compiler.  This source code may only be distributed to other      ////
.................... //// licensed users of the CCS C compiler.  No other use, reproduction ////
.................... //// or distribution is permitted without written permission.          ////
.................... //// Derivative programs created using this software in object code    ////
.................... //// form are not restricted in any way.                               ////
.................... ///////////////////////////////////////////////////////////////////////////
.................... #device DSPIC33EP64GP504
*
0200:  PUSH    42
0202:  MOV     W0,[W15++]
0204:  BCLR.B  8C1.7
0206:  MOV     42,W4
0208:  IOR     #E0,W4
020A:  MOV     W4,42
020C:  BSET.B  8C1.7
020E:  MOV     W1,2FA
0210:  MOV     #55,W4
0212:  MOV     W4,2FA
0214:  MOV     #AA,W4
0216:  MOV     W4,2FA
0218:  BSET.B  2FB.7
021A:  NOP     
021C:  NOP     
021E:  BTSC.B  2FB.7
0220:  BRA     21E
0222:  MOV     [--W15],W0
0224:  BCLR.B  8C1.7
0226:  POP     42
0228:  BSET.B  8C1.7
022A:  RETURN 
022C:  MOV     W5,[W15++]
022E:  MOV     #C,W5
0230:  REPEAT  #3
0232:  MOV     [W5++],[W15++]
0234:  BCLR    W3.0
0236:  BCLR    W3.1
0238:  CP0     W3
023A:  BRA     Z,2C8
023C:  BCLR    W0.0
023E:  BCLR    W2.0
0240:  MOV     #FA,W4
0242:  MOV     W4,54
0244:  MOV     W1,2B4
0246:  MOV     W0,W1
0248:  MOV     #FFFF,W4
024A:  MOV     #3,W0
024C:  AND     W0,W1,W0
024E:  BRA     Z,268
0250:  MOV     W1,[W15++]
0252:  LSR     W1,#2,W1
0254:  SL      W1,#2,W1
0256:  MOV     W1,[W15++]
0258:  AND     #3,W1
025A:  TBLWTL  W4,[W1]
025C:  TBLWTH  W4,[W1++]
025E:  MOV     [--W15],W1
0260:  INC2    W1,W1
0262:  SUB     W0,#2,W0
0264:  BRA     NZ,256
0266:  MOV     [--W15],W1
0268:  MOV     #7FF,W0
026A:  AND     W0,W1,W0
026C:  BRA     NZ,27C
026E:  MOV     W1,2B4
0270:  TBLWTL  W0,[W1]
0272:  MOV     W1,[W15++]
0274:  MOV     #2B4,W1
0276:  CALL    200
027A:  MOV     [--W15],W1
027C:  MOV     W1,[W15++]
027E:  AND     #3,W1
0280:  TBLWTL  [W2++],[W1]
0282:  TBLWTH  [W2++],[W1++]
0284:  MOV     [--W15],W1
0286:  INC2    W1,W1
0288:  MOV     #3,W0
028A:  AND     W1,W0,W0
028C:  BRA     NZ,29E
028E:  MOV     #4,W0
0290:  SUB     W1,W0,W0
0292:  MOV     W0,2B4
0294:  MOV     W1,[W15++]
0296:  MOV     #2B4,W1
0298:  CALL    200
029C:  MOV     [--W15],W1
029E:  SUB     W3,#4,W3
02A0:  BRA     NZ,268
02A2:  MOV     #3,W0
02A4:  AND     W1,W0,W0
02A6:  BRA     Z,2C8
02A8:  MOV     #FFFF,W4
02AA:  MOV     W1,[W15++]
02AC:  AND     #3,W1
02AE:  TBLWTL  W4,[W1]
02B0:  TBLWTH  W4,[W1++]
02B2:  MOV     [--W15],W1
02B4:  INC2    W1,W1
02B6:  MOV     #3,W0
02B8:  AND     W1,W0,W0
02BA:  BRA     NZ,2AA
02BC:  MOV     #4,W0
02BE:  SUB     W1,W0,W0
02C0:  MOV     W0,2B4
02C2:  MOV     #2B4,W1
02C4:  CALL    200
02C8:  MOV     #12,W5
02CA:  REPEAT  #3
02CC:  MOV     [--W15],[W5--]
02CE:  MOV     [--W15],W5
02D0:  RETURN 
02D2:  MOV     W1,54
02D4:  CP0     W3
02D6:  BRA     Z,2FE
02D8:  BTSC.B  0.0
02DA:  BRA     2E8
02DC:  TBLRDL.B[W0++],[W2++]
02DE:  DEC     W3,W3
02E0:  BRA     Z,2FE
02E2:  TBLRDL.B[W0],[W2++]
02E4:  DEC     W3,W3
02E6:  BRA     Z,2FE
02E8:  DEC     W0,W0
02EA:  TBLRDH.B[W0++],[W2++]
02EC:  DEC     W3,W3
02EE:  BRA     Z,2FE
02F0:  CLR.B   [W2++]
02F2:  DEC     W3,W3
02F4:  INC     W0,W0
02F6:  CP0     W0
02F8:  BTSC.B  42.1
02FA:  INC     0054
02FC:  BRA     2D4
02FE:  RETURN 
.................... 
.................... #list
.................... 
.................... #FUSES NOWDT                    //No Watch Dog Timer
.................... #FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
.................... #FUSES NOCKSNOFSM               //Clock Switching is disabled, fail Safe clock monitor is disabled
.................... #FUSES PR_PLL                   //Primary Oscillator with PLL
.................... #FUSES NOIESO                   //Internal External Switch Over mode disabled
.................... #opt 9 
.................... //------------------------------------------------------------------------------
.................... #ifdef  icd3
....................    #FUSES  DEBUG                //Debug mode for use with ICD
....................    #device ICD=TRUE
.................... #else
....................    #FUSES  NODEBUG
.................... #endif
.................... //------------------------------------------------------------------------------
.................... #device ICSP=1
.................... #use delay(clock=140MHz,crystal=8MHz) //#use delay(clock=140000000)
0300:  CP0     W0
0302:  BTSC.B  42.1
0304:  BRA     31E
0306:  REPEAT  #116B
0308:  NOP     
030A:  REPEAT  #3FFE
030C:  NOP     
030E:  REPEAT  #3FFE
0310:  NOP     
0312:  REPEAT  #3FFE
0314:  NOP     
0316:  REPEAT  #3FFE
0318:  NOP     
031A:  DEC     W0,W0
031C:  BRA     NZ,306
031E:  RETURN 
.................... //==============================================================================
.................... #ZERO_RAM
.................... 
.................... #bit  PLLlock= 0x0742.5
.................... #word CLKDIV = 0x0744
.................... #word PLLFBD = 0x0746
.................... 
.................... #define CK_FLASH_END       (getenv("PROGRAM_MEMORY")-1)       
.................... #define CK_FLASH_PAGE_SIZE (getenv("FLASH_ERASE_SIZE")/2) 
.................... #define CK_NUM_PAGES (CK_FLASH_END/CK_FLASH_PAGE_SIZE) 
.................... 
.................... #define CK_USER_PAGE (CK_FLASH_PAGE_SIZE*(CK_NUM_PAGES-1)) 
.................... 
.................... #org CK_USER_PAGE,CK_FLASH_END {} 
.................... #word TRISC  = 0x0E20
.................... #word LATC   = 0x0E24
.................... #bit  led1    = LATC.5 
.................... unsigned int8 read_data[8]; 
.................... unsigned int8 write_data[] = {12,34,56,0,25,42,1,0};
.................... 
.................... void main()
0320:  MOV     #2FD0,W15
0322:  MOV     #2FFF,W0
0324:  MOV     W0,20
0326:  NOP     
0328:  BSET.B  8C1.7
032A:  MOV     #105A,W0
032C:  MOV     #FD1,W1
032E:  REPEAT  W1
0330:  CLR     [W0++]
0332:  CLR     744
0334:  MOV     #44,W4
0336:  MOV     W4,746
0338:  CLR     E0E
033A:  CLR     E1E
033C:  CLR     E2E
033E:  MOV     #220C,W4
0340:  MOV     W4,1062
0342:  MOV     #38,W4
0344:  MOV     W4,1064
0346:  MOV     #2A19,W4
0348:  MOV     W4,1066
034A:  MOV     #1,W4
034C:  MOV     W4,1068
.................... {
.................... TRISC =       0b0011000100;
034E:  MOV     #C4,W4
0350:  MOV     W4,E20
....................  PLLFBD=68; CLKDIV=0x0000; // multiplier M=70,prescaler N1=2,PLL postscaler N2=2
0352:  MOV     #44,W4
0354:  MOV     W4,746
0356:  CLR     744
....................  while (PLLlock!= 1);
0358:  BTSS.B  742.5
035A:  BRA     358
.................... //delay_ms(100);
.................... write_program_memory(0xaf00,write_data,8); 
035C:  MOV     #AF00,W0
035E:  MOV     #0,W1
0360:  MOV     #1062,W2
0362:  MOV     #8,W3
0364:  CALL    22C
....................               
.................... read_program_memory(CK_USER_PAGE,read_data,8); 
0368:  MOV     #A000,W0
036A:  MOV     #0,W1
036C:  MOV     #105A,W2
036E:  MOV     #8,W3
0370:  CALL    2D2
.................... 
.................... 
....................    while(TRUE)
....................    {
....................     led1=!led1; delay_ms(100);  //TODO: User Code
0374:  BTG.B   E24.5
0376:  MOV     #64,W0
0378:  CALL    300
037C:  BRA     374
....................    }
.................... 
.................... }
037E:  BRA     37E

Configuration Fuses:
   Word  3L: FF5F   ICSP1 NOJTAG DEBUG
          H: FF00 
   Word  4L: FFFF   NOALTI2C1 NOALTI2C2 WDTWIN_25%
          H: FF00 
   Word  5L: FF7F   WPOSTS16 WPRES128 PLLWAIT WINDIS NOWDT
          H: FF00 
   Word  6L: FFBD   XT NOOSCIO IOL1WAY NOCKSNOFSM
          H: FF00 
   Word  7L: FF7B   PR_PLL NOIESO
          H: FF00 
   Word  8L: FFFF   NOWRT NOPROTECT
          H: FF00 
   Word  9L: FFFF 
          H: FF00 
   Word 10L: FFFF 
          H: FF00 

   Some fuses have been forced to be compatible with the ICD debugger.
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Sun Mar 30, 2014 4:48 pm     Reply with quote

Your program contains a lot of code that is not required to show your problem.
Also, you will get much better responses when you post the output that you get and the data that you expected. Now you leave it to us to read your mind to figure out what is wrong.

Just something I noticed:
Code:
.................... write_program_memory(0xaf00,write_data,8);
035C:  MOV     #AF00,W0
035E:  MOV     #0,W1
0360:  MOV     #1062,W2
0362:  MOV     #8,W3
0364:  CALL    22C
....................               
.................... read_program_memory(CK_USER_PAGE,read_data,8);
0368:  MOV     #A000,W0
You are writing to address 0xAF00 but reading from 0xA000. No wonder you get different results.
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Mon Mar 31, 2014 12:39 am     Reply with quote

As one other tiny comment. Be aware of just how large the page size is on this chip. A write to 0xAF00, will not trigger an erase (not on a page boundary). Also, you need to ensure the page is 'reserved' (no code being put there), so have a #ORG with start and end addresses, and a 'dummy' function containing nothing, to ensure that the compiler will not put code into the addresses.
roccat



Joined: 13 Jan 2013
Posts: 8

View user's profile Send private message

PostPosted: Tue Apr 01, 2014 4:16 pm     Reply with quote

There was a problem in the compiler 5.021.
In 5.023 write_program_memory works.
roccat



Joined: 13 Jan 2013
Posts: 8

View user's profile Send private message

PostPosted: Wed Apr 02, 2014 9:52 am     Reply with quote

Found another problem.
After erase_program_memory, write_program_memory not work.
So also does not work if write_program_memory writing from start of the page.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group