Flash Problem

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Flash Problem

795 次查看
xiaoli
Contributor I

My question is :

1. Why the Y value is 0xFFFF, but not what i write? and the map file is true.

2. Why i can't see the true value when i selected the PPAGE = 0x38, but the addr 0x38xxxx is always 0xFFFF at the memory window.

 

I use MC9s12DG256B IC, and CSW IDE. True-Time Simulator & Real-Time Debugger.

at start file, the source code :

 

PPAGE = 0x38;

...

#define __MMCTL_SET(value) ((...

  __MMCTL1_SET(...

#endif

 

  __asm {

  ldx #$95BA               ; Here the X value = 0x95BA    PPAGE = 0x38

  ldy 2,x+                 ; Here the Y value = 0xFFFF, is wrong.

  ...

  }

 

 

and at the True-Time Simulator & Real-Time Debugger, memory always see 0xFFFF @ addr 0x3895BA.

but at the \bin\PE_Multilink_CyclonePro.map:

  VAR012       3895BA 2 2 0 ROM_38

 

 

Thank you very much.

标签 (1)
0 项奖励
回复
2 回复数

679 次查看
iggi
NXP Employee
NXP Employee

Hi,

First of all ensure the CW project you have opened is Banked or Large Memory model. If it would be Small Memory model, then there is access to 64K linear addresses only.

What the LDY instruction does in your case, it loads the Index register Y with the contents of address 2 + 95BA = 95BC.

Now you forgot to put $ string in front of number 2.

Anyways, the content on the memory location 0x3895BC is 0xFFFF.

Try LDX #$8000 to check if it  reads correctly.

You can try this function to read the memory location and ensure it's correct:

-------------------------------------------------------------------------

volatile unsigned int readData;

unsigned int Flash_Read_Word(unsigned long int addr)

{

  return *(unsigned int *far)addr;

}

void main(void) {

  //read word at 0x30_8000

  readData = Flash_Read_Word(0x308000);

  for(;;) {

    _FEED_COP(); /* feeds the dog */

  } /* loop forever */

  /* please make sure that you never leave main */

}

----------------------------------------------------------------------

You can put there any address instead 0x308000.

If you expect other value to be read from that location, then your write function is not good.

Regards,
Ivan

0 项奖励
回复

679 次查看
xiaoli
Contributor I

First of all ensure the CW project you have opened is Banked or Large Memory model. If it would be Small Memory model, then there is access to 64K linear addresses only.

As: My CW Project is Banked Memory model.

What the LDY instruction does in your case, it loads the Index register Y with the contents of address 2 + 95BA = 95BC.

Now you forgot to put $ string in front of number 2.

Anyways, the content on the memory location 0x3895BC is 0xFFFF.

Try LDX #$8000 to check if it  reads correctly.

As: I just Wanted to Try to Get a data from addr=0x95BA the Value at addr 0x95Ba = 0x95BC. so, it's no problem.

and also at $8000 , at memory is always 0xFFFF.

pl's see my project and some file , such as : asm_main, prm file, start file. and map file. there is a picture about my project run status.

Thanks for your answer.  your are so nice.

0 项奖励
回复