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

📄 mxic_p.asm

📁 基于凌阳GPCE061板
💻 ASM
📖 第 1 页 / 共 2 页
字号:
     [SPI_Buffer]=r1;

     nop
     nop
     nop
     nop

     //r1: port r2:data R3:count r4:databit
     r2=0x9F00
     r3=8;//send 8bit
     r4=r2;
     M_SendData
     
     nop
     nop
     nop
     nop     
     

     r2=0;
     r3=1;
     M_ReadData
     [R_SPICount0]=R2
     nop
     NOP
     r2=0;
     r3=1;
     M_ReadData
     [R_SPICount1]=R2
     nop
     NOP
     r2=0;
     r3=1;
     M_ReadData
     [R_SPICount2]=R2     
        
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     nop
     nop
     nop
     nop

     //r1|=SPI_CS
     r1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     pop  r2,r4 from [sp];
     
     retf;     
     
     
     
_SP_SPICMD_EraseSector:
     push bp    to [sp];
     bp=sp;
     push r1,r4 to [sp];
     r1=[bp+4]//addrl
     r2=[bp+5]//addrh
     call F_SPICMD_EraseSector
     pop  r1,r4 from [sp];
     pop  bp    from [sp];
     retf;
     
F_SPICMD_EraseSector:
     R2 = R2 LSL 4;
     R2 = R2 LSL 4;

     [R_SPIADDH]=R2;
     [R_SPIADDL]=R1     
     
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     //cs fall edge

     r1=[SPI_Buffer]
     R1&=~SPI_CS;
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     //r1: port r2:data R3:count r4:databit
     r2=0x2000
     r3=8;//send 8bit
     r4=r2;
     M_SendData

L_SPI_EraseSector_SendADDH:
     r2=[R_SPIADDH]
     r3=8;//send 8bit
     r4=r2;
     M_SendData
     
     r2=[R_SPIADDL]
     r3=16;//send 16bit
     r4=r2;
     M_SendData     
          
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     
 ?L_WaitSEraseLoop:
	R1 = 0x0001;
	[P_Watchdog_Clear] = R1;	
	CALL F_SPICMD_ReadStatus;
	TEST R1,0x0003;	
	JNZ	?L_WaitSEraseLoop;        
     retf;       
     
_SP_SPICMD_EraseChip:
F_SPICMD_EraseChip:
     push r1,r4 to [sp];
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
     nop
     //cs fall edge
     r1=[SPI_Buffer]
     R1&=~SPI_CS;  
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     nop
     nop
     nop
     nop

     //r1: port r2:data R3:count r4:databit
     r2=0x6000
     r3=8;//send 16bit
     r4=r2;
     M_SendData
          
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
     nop
     nop
     nop
     
     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     
     
?L_WaitSEraseLoop:

	R1 = 0x0001;
	[P_Watchdog_Clear] = R1;	
	
	CALL F_SPICMD_ReadStatus;
	TEST R1,0x0003;	
	JNZ	?L_WaitSEraseLoop;    
	
     pop  r1,r4 from [sp];
     retf;
     
_SP_SPICMD_WriteEnable:
F_SP_SPICMD_WriteEnable:
     PUSH  R1,R5 to [sp];
     
     r1=0x0001;
     [P_Watchdog_Clear]=r1
            
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     
     //cs fall edge
     r1=[SPI_Buffer]
     R1&=~SPI_CS;  
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;


     //r1: port r2:data R3:count r4:databit
     r2=0x0600
     r3=8;//send 16bit
     r4=r2;
     M_SendData
          
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     
     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     POP  R1,R5 from [sp];
     retf;     
        
_SP_SPICMD_WriteDisable:
F_SP_SPICMD_WriteDisable:
     PUSH  R1,R5 to [sp];
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
     //cs fall edge
     r1=[SPI_Buffer]
     R1&=~SPI_CS;  
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     nop

     //r1: port r2:data R3:count r4:databit
     r2=0x0400
     r3=8;//send 16bit
     r4=r2;
     M_SendData
          
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     
     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     POP  R1,R5 from [sp];
     retf;    
     
      
     
_SP_SPICMD_WriteStatusRegister:
F_SP_SPICMD_WriteStatusRegister:
     push r1,r4 to [sp];
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
     //cs fall edge
     r1=[SPI_Buffer]
     R1&=~SPI_CS;  
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     nop

     //r1: port r2:data R3:count r4:databit
     r2=0x0100          
     r3=8;//send 8bit
     r4=r2;
     M_SendData
     nop   
     //r1: port r2:data R3:count r4:databit
     r2=0x0200  //0x0200 //   00 0000 10
     r3=8;//send 8bit
     r4=r2;
     M_SendData     
     nop        
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
   
     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     pop  r1,r4 from [sp];
     retf;  
          
_SP_SPICMD_RDP:
F_SP_SPICMD_RDP:
     push r1,r4 to [sp];
     //clk down
     r1=[SPI_Buffer]
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     nop
     //cs fall edge
     r1=[SPI_Buffer]
     R1&=~SPI_CS;  
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;

     nop

     //r1: port r2:data R3:count r4:databit
     r2=0xAB00          
     r3=8;//send 8bit
     r4=r2;
     M_SendData
     
          
     r1&=~SPI_SK
     [SPI_Buffer]=r1;
     [SPI_Buffer]=r1;
     
     r1=[SPI_Buffer]
     //r1|=SPI_CS
     R1|=C_All_CE
     [SPI_Buffer]=r1
     [SPI_Buffer]=r1;
     pop  r1,r4 from [sp];
     retf;        
     
F_SPI_DelayNms:
     push r2 to [sp];
?L_NextEx:     
     r2=0x2000
?L_NextIn:
     r2-=1;
     jnz ?L_NextIn
     
       r3=0x0001;
       [P_Watchdog_Clear]=r3     
     
     r1-=1;
     jnz ?L_NextEx     
     pop r2 from [sp];
     retf;     
_SP_SPI_DelayNms:
     push bp to [sp];
     bp=sp;
     push r1,r2 to [sp];
     r1=[bp+4];
     call F_SPI_DelayNms
     pop r1,r2 from [sp];
     pop bp from [sp];
     retf
     
     
     
     
     
     

//     
//     
//_SP_SPICMD_SetStartAddress:
//     PUSH BP TO [SP]
//     BP=SP
//     PUSH R1,R4 TO [SP]
//     R3=[BP+4]
//     R4=[BP+5]
//     [R_ArrayAddrL]=R3
//     [R_ArrayAddrH]=R4
//     CALL  F_SetAddress_Sub
//     POP   R1,R4 FROM [SP]
//     POP   BP    FROM [SP]
//     RETF
//_SP_SPICMD_SetEndSign:
//     PUSH R1,R4 TO [SP]
//     CALL  F_SetEndSign_Sub
//     POP  R1,R4 FROM [SP]
//     RETF
//_SP_SPICMD_GetNextWord:
//     PUSH R2,R4 TO [SP]
//     CALL F_SPICMD_GetNextByte
//     [R_SPIDATA]=R2
//     CALL F_SPICMD_GetNextByte
//     R2=R2 LSL 4
//     R2=R2 LSL 4
//     R1=[R_SPIDATA]
//     R1|=R2
//     POP R2,R4 FROM [SP]
//     RETF
//_SP_SPICMD_GetNextByte:
//     PUSH R2,R4 TO [SP]
//     CALL F_SPICMD_GetNextByte     
//     R1=R2
//     POP  R2,R4 FROM [SP]
//     RETF
//F_SPICMD_SetStartAddress:      
//     [R_ArrayAddrL]=R3
//     [R_ArrayAddrH]=R4
//     CALL  F_SetAddress_Sub
//     RETF
//F_SPICMD_SetEndSign:
//     CALL  F_SetEndSign_Sub
//     RETF
//F_SPICMD_GetNextWord:
//     CALL F_SPICMD_GetNextByte
//     [R_SPIDATA]=R2
//     CALL F_SPICMD_GetNextByte
//     R1=[R_SPIDATA]
//     R2=R2 LSL 4
//     R2=R2 LSL 4
//     R2|=R1
//     RETF
//F_SPICMD_GetNextByte:
//     r1=[SPI_Buffer]
//     r2=0;
//     r3=8;//Read 16bit
//     M_ReadData
//     R3=[R_ArrayAddrL]
//     R4=[R_ArrayAddrH]
//     R3+=1
//     R4+=0,CARRY
//     [R_ArrayAddrL]=R3
//     [R_ArrayAddrH]=R4
//     R3&=0x01FF
//     JNZ ?L_Next10
//     push  r2 to [sp]
//     CALL  F_SetEndSign_Sub
//     R3=[R_ArrayAddrL]
//     R4=[R_ArrayAddrH]
//     CALL  F_SetAddress_Sub
//     pop   r2 from [sp]
//?L_Next10:     
//     RETF
//     
//F_SetAddress_Sub:
//     R1=R3;
//     R2=R4;
//     r2&=0x003f
//     R_SPIADDH x x x x A20 A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9
//     R2 = R2 LSL 4;
//     R2 = R2 LSL 3;
//     R3 = R1;
//     R3 = R3 LSR 4
//     R3 = R3 LSR 4
//     R3 = R3 LSR 1
//     R3&=0x007F;
//     R3|=R2;
//     [R_SPIADDH]=R3;
//     R_SPIADDL   x x x x x x A8 A7 x A6 A5 A4 A3 A2 A1 A0
//     R2 = R1;
//     R2 = R2 LSL 1
//     R2&= 0x0300
//     R1&= 0x007F
//     R1|=R2;
//     [R_SPIADDL]=R1
//     clk down
//     r1=[SPI_Buffer]
//     r1&=~SPI_SK
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//     nop
//     nop
//     cs fall edge
//     r1=[SPI_Buffer]
//     r1&=~SPI_CS;
//     r1=[SPI_Buffer]
//     R2=[R_MXIC_CESet]
//     R2&=0x7000
//     r2^=0x7000
//     R1&=r2
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//     nop
//     nop
//     nop
//     nop
//     r1: port r2:data R3:count r4:databit
//     r2=0x5200
//     r3=8;//send 16bit
//     r4=r2;
//     M_SendData
//     r2=[R_SPIADDH]
//     r3=16;//send 16bit
//     r4=r2;
//     M_SendData
//     r2=[R_SPIADDL]
//     r3=16;//send 16bit
//     r4=r2;
//     M_SendData
//     r2=0
//     r3=16;//send 32bit
//     r4=r2;
//     M_SendData
//     r2=0
//     r3=16;//send 32bit
//     r4=r2;
//     M_SendData
//     RETF
//F_SetEndSign_Sub:
//     r1=[SPI_Buffer]
//     r1&=~SPI_SK
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//     nop
//     nop
//     nop
//     nop
//     r1=[SPI_Buffer]
//     r1|=SPI_CS
//     R1|=C_All_CE
//     [SPI_Buffer]=r1
//     [SPI_Buffer]=r1; 
//     RETF
//
//F_SPICMD_ReadBuf_Sub:
//     [R_SPIPBUFF]=R1
//     [R_SPICOUNT]=R2
//     R1=R3;
//     R2=R4;
//     
//     r2&=0x003f
//     R_SPIADDH x x x x A20 A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9
//     R2 = R2 LSL 4;
//     R2 = R2 LSL 3;
//     R3 = R1;
//     R3 = R3 LSR 4
//     R3 = R3 LSR 4
//     R3 = R3 LSR 1
//     R3&=0x007F;
//     R3|=R2;
//     [R_SPIADDH]=R3;
//     R_SPIADDL   x x x x x x A8 A7 x A6 A5 A4 A3 A2 A1 A0
//     R2 = R1;
//     R2 = R2 LSL 1
//     R2&= 0x0300
//     R1&= 0x007F
//     R1|=R2;
//     [R_SPIADDL]=R1
//
//     clk down
//     r1=[SPI_Buffer]
//     r1&=~SPI_SK
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//     nop
//     nop
//     cs fall edge
//     r1=[SPI_Buffer]
//     r1&=~SPI_CS;
//     r1=[SPI_Buffer]
//     R2=[R_MXIC_CESet]
//     R2&=0x7000
//     r2^=0x7000
//     R1&=r2
//     
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//
//     nop
//     nop
//     nop
//     nop
//
//     r1: port r2:data R3:count r4:databit
//     r2=0x5200
//     r3=8;//send 16bit
//     r4=r2;
//     M_SendData
//     
//L_SPI_ReadBuf_SendADDH:
//     r2=[R_SPIADDH]
//     r3=16;//send 16bit
//     r4=r2;
//     M_SendData
//     
//
//L_SPI_ReadBuf_SendADDL:
//     r2=[R_SPIADDL]
//     r3=16;//send 16bit
//     r4=r2;
//     M_SendData
//     
//L_SPI_ReadBuf_Send32BIT:
//     r2=0
//     r3=16;//send 32bit
//     r4=r2;
//     M_SendData
//     r2=0
//     r3=16;//send 32bit
//     r4=r2;
//     M_SendData
//
//     R2=[R_SPICOUNT]
//     JZ  L_SPI_ReadBuf_End
//L_SPI_ReadBuf_ReadWord:
//     r2=0;
//     r3=16;//Read 16bit
//     M_ReadData
//     
//     R3=R2;
//     R3=R3 LSR 4
//     R3=R3 LSR 4
//     R2=R2 LSL 4
//     R2=R2 LSL 4
//     R2|=R3;
//     r3=[R_SPIPBUFF];
//     [R3++]=R2
//     [R_SPIPBUFF]=r3;
//     R2=[R_SPICOUNT]
//     R2-=1;
//     [R_SPICOUNT]=R2
//     JNZ  L_SPI_ReadBuf_ReadWord
//        
//L_SPI_ReadBuf_End:     
//     nop
//     nop
//     r1&=~SPI_SK
//     [SPI_Buffer]=r1;
//     [SPI_Buffer]=r1;
//
//     nop
//     nop
//     nop
//     nop     
//     r1=[SPI_Buffer]
//     R1|=SPI_CS
//     R1|=C_All_CE
//     [SPI_Buffer]=r1
//     [SPI_Buffer]=r1
//     r1=[R_SPIDATA];
//     Retf    
//     
//      
//
//     
//   
/////////////////////////////////////////
//   Name : F_SPICMD_AddrSet
//  Input : R1 : BufferAddr
//          r2 : Count
//          r3 : AddrL
//          r4 : AddrH
// Output : R_SPICount0;
//          R_SPICount1;
//          R_SPICount2;
//          R_SPIBufferAddr
//          R_SPIFlashAddrL
//          R_SPIFlashAddrH
/////////////////////////////////////////
//F_SPICMD_AddrSet:
//            [R_SPIFlashAddrL]=R3;
//            [R_SPIFlashAddrH]=R4;
//            [R_SPIBufferAddr]=R1;
//            R3&=0x1FF
//            R4=0x200
//            R4-=R3;
//            R3=R2;
//            R3+=R2;
//            CMP R3,R4
//            JCC ?L_SetAddr0
//            
//            R1=0x00
//            R3=[R_SPIFlashAddrL]
//            test r3,0x01
//            JZ ?L_SetAddr1
//               R1=0x01
//?L_SetAddr1:
//               [R_SPICount1]=R1;   
//               R3&=0x1FF
//               R4=0x200
//               R4-=R3;
//               R4=R4 LSR 1;
//               [R_SPICount0]=R4;
//               R3=R2;
//               R3-=R4;
//               R3-=R1;
//               [R_SPICount2]=R3
//               JMP ?L_SetAddr_End
//?L_SetAddr0:
//               [R_SPICount0]=R2;
//               R1=0;
//               [R_SPICount1]=R1;
//               [R_SPICount2]=R1;
//?L_SetAddr_End:
//               RETF;            
//_SP_SPICMD_ReadBuffer:
//     push bp to [sp]
//     bp=sp;
//     push r1,r4 to [sp];     
//     r3=[bp+4];//addl
//     r4=[bp+5];//addh
//     r2=[bp+6];//count
//     r1=[bp+7];//bufferpoint
//     call F_SPICMD_ReadBuffer
//     pop  r1,r4 from [sp];
//     pop  bp from [sp];
//     retf
//               
//F_SPICMD_ReadBuffer:
//     call F_SPICMD_AddrSet
//     R2=[R_SPICount0]
//     JZ ?L_NotReadBank0
//     R3=[R_SPIFlashAddrL]
//     R4=[R_SPIFlashAddrH]
//     R2=[R_SPICount0]
//     R1=[R_SPIBufferAddr]
//     call F_SPICMD_ReadBuf_Sub
//     
//     R2=[R_SPICount0]
//     R3=[R_SPIBufferAddr]
//     R3+=R2;
//     [R_SPIBufferAddr]=R3;
//     R1=[R_SPIFlashAddrH]     
//     R3=[R_SPIFlashAddrL]
//     R2+=R2;
//     R3+=R2
//     R1+=0,carry;
//     [R_SPIFlashAddrH]=r1;
//     [R_SPIFlashAddrL]=r3;
//     
//?L_NotReadBank0:
//     R2=[R_SPICount1]
//     JZ ?L_NotReadBank1
//     
//     R1=[R_SPIFlashAddrL]
//     R2=[R_SPIFlashAddrH]
//     R3=0x08
//     Call F_SPICMD_ReadAData
//     [R_SPIBankData]=r1;
//
//     R1=[R_SPIFlashAddrL]
//     R2=[R_SPIFlashAddrH]
//     R1+=1;
//     R2+=0,carry
//     [R_SPIFlashAddrL]=R1;
//     [R_SPIFlashAddrH]=R2;
//     R3=0x08
//     Call F_SPICMD_ReadAData
//     R2=[R_SPIFlashAddrL]
//     R2+=1;
//     [R_SPIFlashAddrL]=R2;
//     
//     R1=R1 LSL 4
//     R1=R1 LSL 4
//     R2=[R_SPIBankData]
//     R2&=0x00FF;
//     R2|=R1;
//     
//     R1=[R_SPIBufferAddr]
//     [R1++]=R2
//     [R_SPIBufferAddr]=R1;
//?L_NotReadBank1:
//     R2=[R_SPICount2]
//     JZ ?L_NotReadBank2
//     R3=[R_SPIFlashAddrL]
//     R4=[R_SPIFlashAddrH]
//     R2=[R_SPICount2]
//     R1=[R_SPIBufferAddr]
//     call F_SPICMD_ReadBuf_Sub
//     
//     R2=[R_SPICount2]
//     R3=[R_SPIBufferAddr]
//     R3+=R2;
//     [R_SPIBufferAddr]=R3;
//     
//     R3=[R_SPIFlashAddrL]
//     R2+=R2;
//     R3+=R2
//     [R_SPIFlashAddrL]=r3;
//
//?L_NotReadBank2:     
//     R3=[R_SPIFlashAddrL]
//     R4=[R_SPIFlashAddrH]
//     RETF;             
//       

     


     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -