查看: 4748|回复: 1

[MPC] MPC5634M programming the flash array0

[复制链接]

该用户从未签到

12

主题

20

帖子

0

注册会员

Rank: 2

积分
120
最后登录
2017-12-17
发表于 2016-9-5 15:30:56 | 显示全部楼层 |阅读模式
我现在在 写 MPC5634M擦写读FLASH的驱动  MPC5634M programming the flash array0其中的array1和2的写出来都没问题,就是array0的一直运行不了。网上说要把程序放到RAM里面去,我也这么写了,还是不行,不知道哪里出了问题,哪位能指点迷经的,万分感谢
下面是我写的程序;
in lcf:
MEMORY
{
myram: org = 0x40018000, len = 0x00001000

}
GROUP : {

.my_ram (VLECODE): { //instruction mode VLECODE has to mentioned

*(.myCodeInRAM)
}
} > myram

in main.c
#pragma section ".myCodeInRAM" code_mode=far_abs //For routines code_mode need to be mentioned
__declspec(section ".myCodeInRAM") void Program_FLASH_A0(void);

__declspec (section ".myCodeInRAM") void Program_FLASH_A0(void) //this program is for Array0,block 0
{

/* enable high address space*/
CFLASH0.LMLR.R = FLASH_LMLR_PASSWORD; // unlock register
CFLASH0.LMLR.R = 0x00000000; // unlock all LOW and MID blocks

CFLASH0.SLMLR.R = 0xC3C33333; // unlock register
CFLASH0.SLMLR.R = 0x00000000; // unlock all LOW and MID blocks
/* step1. erase block 0 (0x00000-0x4000) */
CFLASH0.MCR.B.ERS = 1; // select operation (erase)
//CFLASH0.LMSR.B.LSEL = 0x80; // select LOW block
// LSEL[7–0] apply to blocks 5, 4, 3, 2b, 2a, 1b, 1a and 0,
CFLASH0.LMSR.R = 0x00000080; // select MID block
//MSEL[1–0] apply to blocks 7 and 6
*((unsigned int*) 0x00038928) = 0xFFFFFFFF; // interlock write
CFLASH0.MCR.B.EHV = 1; // start the erase operation
while(CFLASH0.MCR.B.DONE == 0){}; // wait for DONE
CFLASH0.MCR.B.EHV = 0; //operation end
CFLASH0.MCR.B.ERS = 0; //deselect operation
/* step2. program data */
CFLASH0.MCR.B.PGM = 1; // select operation
*((unsigned int*) 0x00038928) = 0x66AA66AA; // first write
*((unsigned int*) 0x00038932) = 0x11BB11BB; // additional write
//*((unsigned int*) p_test++) = data_to_be_written[2]; // additional write
// *((unsigned int*) p_test) = data_to_be_written[3]; // additional write
CFLASH0.MCR.B.EHV = 1; //start the operation
while(CFLASH0.MCR.B.DONE == 0){}; //wait for DONE
status=CFLASH0.MCR.R&0x00000200;
CFLASH0.MCR.B.EHV = 0; //operation end
CFLASH0.MCR.B.PGM = 0; //deselect operation
}
我调试的时候,程序直接跳进:
QQ图片20160904211500.png



我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
8
最后登录
2020-10-27
发表于 2020-10-27 14:30:40 | 显示全部楼层
bank0 array0 的区域, LMLR和SLMLR寄存器都需要解锁才可以进行擦除和写入
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-23 18:39 , Processed in 0.088278 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表