📄 mxic_p.asm
字号:
[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 + -