internal FLASH to RAM LPC11xx LPC1125

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

internal FLASH to RAM LPC11xx LPC1125

365 次查看
Wei_Lang
Contributor II

Help. Read data from internal FLASH to RAM. But it cannot run. Program stopped. Why? How to correct it?

 

/****Read data from internal FLASH(0x0000F000) to RAM****/
uint32_t my32;
my32 = *(uint32_t *)(0x0000F000);

 

It cannot run. Program stopped. Why? How to correct it?

 

/****Read data from internal FLASH to RAM****/
typedef struct
{
	uint32_t MY_EE[64];
} MY_EEPROM_TypeDef;

#define MY_EEPROM_LOCATION        0X0000F000
#define MY_EEPROM             ((MY_EEPROM_TypeDef   *) MY_EEPROM_LOCATION )
/****Other programs*******************/
int main (void) {
	uint32_t eep1[64]={0};
	/****Other programs****/
	for(uint8_t i=0;i<20;i++) {
		eep1[i] = MY_EEPROM->MY_EE[i];
	}
	while (1){
		/****Other programs****/
	}
}

 

It cannot run. Program stopped. Why? How to correct it? Thanks for your help!

0 项奖励
回复
1 回复

331 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @Wei_Lang 

You can refer to lpc1788 eeprom example.

/* Read data from non-volatile memory */
uint32_t Chip_EEPROM_ReadPage(LPC_EEPROM_T *pEEPROM,
uint16_t pageOffset,
uint16_t pageAddr,
uint8_t *pData,
uint8_t rsize,
uint32_t byteNum)
{
uint32_t i;
uint32_t mask = (1 << (8 * rsize)) - 1;

Chip_EEPROM_ClearIntStatus(pEEPROM, EEPROM_INT_ENDOFRW);
Chip_EEPROM_SetAddr(pEEPROM, pageAddr, pageOffset);

if (rsize == 1) {
Chip_EEPROM_SetCmd(pEEPROM, EEPROM_CMD_8BITS_READ | EEPROM_CMD_RDPREFETCH);
}
else if (rsize == 2) {
Chip_EEPROM_SetCmd(pEEPROM, EEPROM_CMD_16BITS_READ | EEPROM_CMD_RDPREFETCH);
}
else {
Chip_EEPROM_SetCmd(pEEPROM, EEPROM_CMD_32BITS_READ | EEPROM_CMD_RDPREFETCH);
}

/* read and store data in buffer */
for (i = 0; i < byteNum; i += rsize) {
(*(uint32_t *) (&pData[i]) ) &= ~mask;
(*(uint32_t *) (&pData[i]) ) |= (Chip_EEPROM_ReadData(pEEPROM) & mask);
Chip_EEPROM_WaitForIntStatus(pEEPROM, EEPROM_INT_ENDOFRW);
}
return i;
}

/* Read data to EEPROM at specific address */
void Chip_EEPROM_Read(LPC_EEPROM_T *pEEPROM,
uint16_t pageOffset,
uint16_t pageAddr,
void *pData,
EEPROM_RWSIZE_T rsize,
uint32_t byteNum)
{
uint32_t rTotalByteNum = 0;
uint32_t rOffset = (pageOffset & (EEPROM_PAGE_SIZE - 1));
uint32_t rByteNum = EEPROM_PAGE_SIZE - rOffset;
/* read and store data in buffer */
while (byteNum) {
if (rByteNum > byteNum) {
rByteNum = byteNum;
}
/* update data to page register */
Chip_EEPROM_ReadPage(pEEPROM, rOffset, pageAddr,
&((uint8_t *) pData)[rTotalByteNum], (uint8_t) rsize, rByteNum);
rTotalByteNum += rByteNum;
byteNum -= rByteNum;

/* Change to next page */
pageAddr++;
rOffset = 0;
rByteNum = EEPROM_PAGE_SIZE;
}
}

Hope this will help you.

BR

Hang

0 项奖励
回复