在线时间0 小时
UID2050551
注册时间2013-10-22
NXP金币0
该用户从未签到
新手上路

- 积分
- 69
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2013-11-27 15:23:14
|
显示全部楼层
回复:S08DZ FlASH擦除、写入通过,读出的Flash 数据还是0xFF?
你提到的两点我都进行了处理,读出还是0xff.我移植官方的FLASH例程也是一样的情况,难道是文件配置或硬件问题?
下面是我移植官方例程的代码
/*---------------------------------------------------------*/
#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#pragma MESSAGE DISABLE C1805
#define Page_Erase PGM[21]=0x40; temp = ((unsigned char(*)(unsigned int))(PGM))
#define Program_Byte PGM[21]=0x20; temp =((unsigned char(*)(unsigned int, unsigned char))(PGM))
volatile unsigned char PGM[59] = {
0x87,0xC6,0x18,0x25,0xA5,0x10,0x27,0x08,0xC6,0x18,0x25,0xAA,0x10,0xC7,0x18,0x25,
0x9E,0xE6,0x01,0xF7,0xA6,0x20,0xC7,0x18,0x26,0x45,0x18,0x25,0xF6,0xAA,0x80,0xF7,
0x9D,0x9D,0x9D,0x9D,0x45,0x18,0x25,0xF6,0xF7,0xF6,0xA5,0x30,0x27,0x04,0xA6,0xFF,
0x20,0x07,0xC6,0x18,0x25,0xA5,0x40,0x27,0xF9,0x8A,0x81};
/*************************************************************/
/* 初始化总线时钟PEE模式 */
/* 外部晶振频率为4MHz,总线频率16MHz */
/*************************************************************/
void INIT_MCG(void)
{
MCGC2=0x36;
while(!MCGSC_OSCINIT);
MCGC1=0xb8;
while(MCGSC_IREFST);
while(MCGSC_CLKST!=0b10);
MCGC2_LP = 1;
MCGC1 = 0x90;
MCGC3 = 0x48;
MCGC2_LP = 0;
while(!MCGSC_PLLST);
while(!MCGSC_LOCK);
MCGC1 = 0x10;
while(MCGSC_CLKST!=0b11);
FCDIV=0x4A;
}
void INIT_SCI(void)
{
SCI1BDH = 0x00;
SCI1BDL = 0x68; //设置SCI1波特率为9600
SCI1C1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验
SCI1C2 = 0x0c; //允许接收和发送数据,禁止中断功能
}
void SCI_send(unsigned char data)
{
while(!SCI1S1_TDRE); //等待发送数据寄存器(缓冲器)为空
SCI1D = data;
}
unsigned char Flash_Read(unsigned int addr)
{
return*(unsigned char*)addr;
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void) {
unsigned char temp,dat_buffer;
DisableInterrupts;//屏蔽中断
INIT_MCG();
INIT_SCI();
SOPT1=0; //关闭看门狗
PTDDD_PTDDD0=1;
PTDD_PTDD0=1;
//EnableInterrupts;
SCI_send('O');
temp = Page_Erase(0xF000); //execute Erase routine
if(temp==0xFF) PTDD_PTDD0=~PTDD_PTDD0; //an error occurred erase routine
temp = Program_Byte(0xF000,7);
if(temp==0xFF) PTDD_PTDD0=~PTDD_PTDD0;
dat_buffer=Flash_Read(0xF000);//读FALSH地址数据
SCI_send(dat_buffer);
for(;;)
{
}
} |
|