?? flash.asm
字號:
.include spt6604a.inc
.public F_ReadFmFlash,F_ReadOneByte,F_StopFlash,F_FlashTest//,SW_Buff
.public F_WriteOneByte,FlashAddr,FlashData,FlashAddrHi,F_ReadFlashBuf
.public F_MassErase
.external F_USER_DVR1600_EndRecord
.ram
.var FlashAddrHi
.var FlashAddr
.var FlashData
//.var FlashData1
//.var FlashData2
.const B_Ioc0 = 0x0001;
.const B_Ioc1 = 0x0002;
.const B_SCL = 0x0002; //for flash
.const B_SDA = 0x0001; //for flash
//SW_Buff: .dw 32 dup(0) // user for test flash
.code
//***************************************************************************
//***************************************************************************
F_FlashTest:
// CALL F_MassErase;
// R3 = 0x0;
// [FlashAddr] = R3;
// R3 = 0;
// [FlashAddrHi] = R3;
// [FlashData] = R3;
// [FlashData+1] = R3;
// CALL F_ReadFmFlash;
// CALL F_ReadOneByte;
// [FlashData] = R5;
// CALL F_ReadOneByte;
// [FlashData+1] = R5;
// CALL F_StopFlash;
//
// R4 = 0
// R5 = 0xa0;
// [FlashData] = R5;
// R1 = 0x0;
// [FlashAddr] = R1;
//L_Loop:
// R1 = 0;
// [FlashAddrHi] = R1;
// Call F_WriteOneByte
// R3 = [FlashAddr]
// R3 +=1
// [FlashAddr] = R3
// R3 = [FlashData]
// R3 +=0x01
// [FlashData] = R3
// R4 +=1
// cmp R4,0x20
// JB L_Loop
// R3 = 0x0;
// [FlashAddr] = R3;
F_ReadFlashBuf:
// R3 = 0;
// [FlashAddrHi] = R3;
// [FlashData] = R3;
// [FlashData+1] = R3;
// CALL F_ReadFmFlash;
// R3 = 0
// R4 = SW_Buff
//?L_Loop:
// CALL F_ReadOneByte;
// [R4++] = R5;
// R3 +=1
// test R3,0x20
// JZ ?L_Loop
// CALL F_StopFlash;
// nop
// nop
RETF
//***************************************************************************//----------------------------------------------------------------------------//
.const B_MassErase = 0x6000;
.const B_PageErase = 0x4000;
.const B_WriteFlash = 0x0000;
.const B_ReadFlash = 0x8000;
//***************************************************************************
//***************************************************************************
F_ReadFmFlash:
push R1,r5 to [sp]
CALL F_StartFlash;
R3 = B_ReadFlash;
CALL F_Send8Bit;
R3 = [FlashAddrHi];
JZ ReadFmFlash_10;
R3 = 0x8000;
ReadFmFlash_10:
CALL F_Send1Bit;
R3 = [FlashAddr];
CALL F_Send16Bit;
pop R1,R5 from [sp]
RETF;
//***************************************************************************
//--------------------------------------------------------------------------//
//***************************************************************************
F_ReadOneByte:
push R1,R4 to [sp]
R1 = [P_IOC_Dir];
R1 &= 0x00FF - B_SDA;
[P_IOC_Dir] = R1;
R1 = [P_IOC_Buf];
R4 = 8;
R3 = 0;
ReadOneByte_05:
R1 ^= B_SCL;
[P_IOC_Data] = R1;
TEST R1,B_SCL;
JNZ ReadOneByte_05;
R3 = R3 LSL 1;
R2 = [P_IOC_Data];
TEST R2,B_SDA;
JZ ReadOneByte_10;
R3 |= 0x0001;
ReadOneByte_10:
R4 -= 1;
JNZ ReadOneByte_05;
R5 = R3
pop r1,r4 from [sp]
RETF;
//***************************************************************************
//--------------------------------------------------------------------------//
F_WriteOneByte:
push R1,R5 to [sp]
CALL F_StartFlash;
R3 = B_WriteFlash;
CALL F_Send8Bit;
R3 = [FlashAddrHi];
JZ WriteToFlash_10;
R3 = 0x8000;
WriteToFlash_10:
CALL F_Send1Bit;
R3 = [FlashAddr];
CALL F_Send16Bit;
R3 = [FlashData];
R3 = R3 LSL 4;
R3 = R3 LSL 4;
CALL F_Send8Bit;
R1 = [P_IOC_Buf]
R1 &=0xFF-B_SDA
[P_IOC_Data] = R1
CALL F_Delay150us;
CALL F_StopFlash;
pop R1,R5 from [sp]
RETF;
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
F_MassErase:
CALL F_StartFlash;
R3 = B_MassErase;
CALL F_Send8Bit;
R3 = 0;
CALL F_Send1Bit;
R3 = 0;
CALL F_Send16Bit;
CALL F_Delay13ms;
CALL F_StopFlash;
RETF;
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
//======================
//===========================================
//===========================================
//===========================================
//===========================================
F_Delay13ms:
R3 = 0;
Delay13ms1:
R3 +=1;
nop
nop
nop
CMP R3,0x8fff;
JNZ Delay13ms1;
Retf;
F_Delay150us:
R3 = 0x0780;
Delay13ms_10:
// nop
R3 +=1;
R1 = [P_SystemClock]
test R1,0x80
JNZ ?L_IsHighSpeed
CMP R3,0x0400;
JNZ Delay13ms_10;
Retf;
?L_IsHighSpeed:
CMP R3,0x800;
JNZ Delay13ms_10;
Retf;
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
F_Send1Bit:
R4 = 1;
JMP SendData;
F_Send16Bit:
R4 = 16;
JMP SendData;
F_Send8Bit:
R4 = 8;
SendData:
R1 &= 0x00FF - B_SCL;
[BP] = R1;
R1 &= 0x00FF - B_SDA;
TEST R3,0x8000;
JZ SendData_20;
R1 |= B_SDA;
SendData_20:
[BP] = R1;
nop
nop
R1 |= B_SCL;
[BP] = R1;
R3 = R3 LSL 1;
R4 -= 1;
JNZ SendData;
SendData_99:
RETF;
//----------------------------------------------------------------------------//
F_StartFlash:
BP = P_IOC_Buf;
R1 = [BP--];
R1 |= B_SCL;
[BP] = R1;
nop
nop
R1 |= B_SDA;
[BP] = R1;
nop
nop
R1 &= 0xFF - B_SDA;
[BP] = R1;
RETF;
//----------------------------------------------------------------------------//
F_StopFlash:
BP = P_IOC_Buf;
R1 = [BP--];
R1 &= 0x00FF - B_SDA;
[BP] = R1;
R2 = [P_IOC_Dir];
R2 |= B_SDA;
[P_IOC_Dir] = R2;
R1 |= B_SCL;
[BP] = R1;
nop
nop
R1 |= B_SDA;
[BP] = R1;
RETF;
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -