⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.asm

📁 使用GPTC6604做的一个录放音DEMO
💻 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 + -