?? 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 + -