📄 yy1.c.bak
字号:
/******************说明*********************
* 10/30修改
*测试: 0~64k的范围内的flash一次写入,分批读出 . 成功.0~256k没做测试
*一次性写入64k数据用时大约30秒,在写入完毕前,其它任务等待(抢占式),如果一次写入数据小于1k
*任务间感觉不到延时.
*说明: 无论是读写flash还是擦除flash都是互斥的,由Sector_Status表示,为了以后扩充flash状态定义为字节型
*10/31修改测试,解决了不能换页的问题
////////////测试说明/////////////
在扇区0从低地址0x00000000~~~~0x000003FF写入1k字节数据,
然后分别在以下地址读取数据:
0x0000--0x000F 显示0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8
0x03F0--0x03FF 显示0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8
0x0400--0x040F 读出全1,说明数据正确写入扇区0即0页头1k的位置.
0x7FF0--0x7FFF 读出全1
0x8000--0x800F 读出全1
0x83F0--0x83FF 读出全1
0xFFF0--0xFFFF 读出全1
0x10000--0x1000F 读出全1
0x103F0--0x103FF 读出全1
注意:keil下不能仿真页面切换,以上数据是在upsd3254bv上的实际运行情况.
*********************************************/
#include <includes.h>
void TaskStartyya(void *yydata) reentrant;
void TaskStartyyb(void *yydata) reentrant;
void TaskStartyyc(void *yydata) reentrant;
void TaskStartyyd(void *yydata) reentrant;
OS_STK TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkyyb[MaxStkSize];
PSD_REGS PSD8xx_reg _at_ 0x8000;
unsigned char xdata buf1[8] = {0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8};
unsigned int i;
unsigned char j;
unsigned int k;
unsigned char xdata buf2[8];
unsigned long pos;
unsigned long pos2;
extern unsigned char Sector_Status;
///////////////////////////
////////
void main(void)
{
//初始化看门狗
WDKEY = 0x55; //停止看门狗
PSD8xx_reg.VM.bits.PIO_EN = 0;
PSD8xx_reg.DATAOUT_A.byte = 0x2a; // initial output data
PSD8xx_reg.CONTROL_A = 0x00; // 1=latched address out, 0=genernal I/O
PSD8xx_reg.DIRECTION_A = 0xff; // 1= ouput mode, 0 = input mode
PSD8xx_reg.OUTENABLE_A = 0xff; //
PSD8xx_reg.DRIVE_A = 0x00; // upper 4 bits (bit7-4) are for open-drain/CMOS control of PA7-4
// PSD8xx_reg.PAGE=0; // 1 = open drain, 0 = CMOS
// lower 4 bits (bit3-0) are for slew late control of PA3-0
// 1 = higher slew rate, 0 = normal slew rate
PSD8xx_reg.OMCMASK_AB = 0x00; // write mask control of MCellAB
// 1 = blocking write, 0 = enable write
PSD8xx_reg.OMC_AB = 0xff;
OSInit();
init_flash();
InitTimer0();
ycc_com_init(0,1200,1);
ycc_com_init(1,9600,0);
OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],2);
OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],3);
OSTaskCreate(TaskStartyyc, (void *)0, &TaskStartStkyyb[0],4);
OSTaskCreate(TaskStartyyd, (void *)0, &TaskStartStkyyb[0],5);
OSStart();
}
void TaskStartyya(void *yydata) reentrant
{ int i;
yydata=yydata;
clrscr();
PrintStr("\n\t\t*******************************\n");
PrintStr("\t\t* Hello! The world. *\n");
PrintStr("\t\t*******************************\n\n\n");
PrintStr("\t\t zai 0x0000---0x03ff zhong xie ru 1k shu ju \n\n\n");
while(1)
{
PrintStr("\tAAAAAA111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
for(i=0;i<8192;i++) //在flash中写入64k数据
{
pos =(unsigned long )(8*i);
ycc_mem_write(&buf1[0],8,pos);
}
#ifdef USE_COM2
PrintChar2('A');
PrintChar2('T');
PrintChar2('\r');
#endif
}
}
void TaskStartyyb(void *yydata) reentrant
{
yydata=yydata;
PrintStr("0x0000--0x0000F \n");
ycc_mem_read(&buf2[0],8,0x0000);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x0008);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tBBBBBBBBB111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
while(1)
{
///////////////////////////////
PrintStr("0x03F0--0x03FF \n");
ycc_mem_read(&buf2[0],8,0x03F0);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x03F8);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tBBBBBBBBB111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
///////////////////////////////////////////
PrintStr("0x0400--0x040F \n");
ycc_mem_read(&buf2[0],8,0x0400);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x0408);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tBBBBBBBBB111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
//////////////////////////////////////
PrintStr("0x7FF0--0x7FFF\n"); //扇区1尾
ycc_mem_read(&buf2[0],8,0x7FF0);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x7FF8);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tBBBBBBBBB111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
}
}
void TaskStartyyc(void *yydata) reentrant
{
yydata=yydata;
while(1)
{
////////////////////////////////////////////
PrintStr("0x8000--0x800F\n"); //扇区2头
ycc_mem_read(&buf2[0],8,0x8000);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x8008);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tCCCCCCCCCCC111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
PrintStr("0x83F0--0x83FF\n");
ycc_mem_read(&buf2[0],8,0x83F0);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x83F8);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tCCCCCCCCCCC111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
///////////////////////////////////////
PrintStr("0xFFF0--0xFFFF\n"); // 扇区2尾
ycc_mem_read(&buf2[0],8,0xFFF0);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0xFFF8);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tCCCCCCCCCCC111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
}
}
void TaskStartyyd(void *yydata) reentrant
{
yydata=yydata;
while(1)
{
////////////////////////////////////////
PrintStr("0x10000--0x1000F\n"); //扇区3头
ycc_mem_read(&buf2[0],8,0x10000);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x10008);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tDDDDDDDDDDDDD111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
////////////////////////////////////////////////////
PrintStr("0x103F0--0x103FF\n");
ycc_mem_read(&buf2[0],8,0x103F0);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
ycc_mem_read(&buf2[0],8,0x103F8);
for(j=0;j<8;j++)
{
PrintByte(buf2[j]);
}
PrintStr("\n");
PrintStr("\tDDDDDDD111111 is active.\n");
P3_3=1;
OSTimeDly(OS_TICKS_PER_SEC);
P3_3=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -