📄 sp_serialflashv1.lst
字号:
0000A079 0A C5 80 00 test r2,0x0080
0000A07B 45 4E jnz L_WaitSIOReadReady2
0000A07C 1A D5 20 70 [P_SIO_Stop]=r2; // disable read mode
0000A07E 88 98 POP BP,BP FROM [SP];
0000A07F 90 9A retf;
.ENDP;
//////////////////////////////////////////////////////////////////
// Function: Send A Word to Serial Flash
// Syntax: SP_SIOSendAData(AddressLow,AddressHigh, data) Address must be even
// c level public
// Used register: r1,r2,r3
//////////////////////////////////////////////////////////////////
.public _SP_SIOSendAWord;
_SP_SIOSendAWord: .PROC
F_SIOSendAWord:
0000A080 88 DA PUSH BP,BP TO [SP];
0000A081 08 0B 01 00 BP = SP + 1;
// PUSH r1,r3 TO [SP];
0000A083 09 93 D3 00 r1=0x00C3+C_SIOCLOCK;
0000A085 19 D3 1E 70 [P_SIO_Ctrl]=r1; // clk=CPUclk/8, 24 bit address ;write
0000A087 03 92 R1 = [BP+3];
0000A088 19 D3 1B 70 [P_SIO_Addr_Low]=r1; // input Sflash low address
0000A08A 79 93 r1=r1 lsr 4; // right shift 8
0000A08B 79 93 r1=r1 lsr 4;
0000A08C 19 D3 1C 70 [P_SIO_Addr_Mid]=r1; // input SFLASH mid address
0000A08E 04 92 R1 = [BP+4]; // Port direction
0000A08F 47 B2 r1=r1&0x0007; // input SFLASH hi address
0000A090 19 D3 1D 70 [P_SIO_Addr_High]=r1;
0000A092 19 D3 1F 70 [P_SIO_Start]=r1; // enable write mode
0000A094 05 92 R1 = [BP+5];
0000A095 19 D3 1A 70 [P_SIO_Data]=r1; //start to transmit low byte
L_WaitSIOSendReadyLB:
0000A097 11 93 1F 70 r1=[P_SIO_Start];
0000A099 09 C3 80 00 test r1,0x0080
0000A09B 45 4E jnz L_WaitSIOSendReadyLB
0000A09C 40 F0 4D A1 call F_DelayPT // Delay necessary for the writing
0000A09E 40 F0 4D A1 call F_DelayPT
0000A0A0 40 F0 4D A1 call F_DelayPT
0000A0A2 40 F0 4D A1 call F_DelayPT //modify by abin
// call F_DelayPT //modify by abin
// call F_DelayPT //modify by abin
0000A0A4 19 D3 20 70 [P_SIO_Stop]=r1; // disable write mode
0000A0A6 03 92 R1 = [BP+3];
0000A0A7 41 02 r1+=1;
0000A0A8 19 D3 1B 70 [P_SIO_Addr_Low]=r1; // input SFLASH low address
0000A0AA 19 D3 1F 70 [P_SIO_Start]=r1; //enable write mode
0000A0AC 05 92 r1=[BP+5];
0000A0AD 79 93 r1=r1 lsr 4; // right shift 8
0000A0AE 79 93 r1=r1 lsr 4;
0000A0AF 19 D3 1A 70 [P_SIO_Data]=r1; //start to transmit high byte
L_WaitSIOSendReadyHB:
0000A0B1 11 93 1F 70 r1=[P_SIO_Start];
0000A0B3 09 C3 80 00 test r1,0x0080
0000A0B5 45 4E jnz L_WaitSIOSendReadyHB
0000A0B6 40 F0 4D A1 call F_DelayPT //modify by abin
0000A0B8 40 F0 4D A1 call F_DelayPT //modify by abin
0000A0BA 40 F0 4D A1 call F_DelayPT
0000A0BC 40 F0 4D A1 call F_DelayPT
0000A0BE 19 D3 20 70 [P_SIO_Stop]=r1; //disable write mode
// POP r1,r3 FROM [SP];
0000A0C0 88 98 POP BP,BP FROM [SP];
0000A0C1 90 9A retf;
.ENDP;
//////////////////////////////////////////////////////////////////
// Function: Read A Word from Serial Flash
// Syntax: SP_SIOReadAWord(AddressLow, AddressHigh)
// c level public
// Used register: r1,r2,r3,r4
// Return register: r1
//////////////////////////////////////////////////////////////////
.public _SP_SIOReadAWord;
_SP_SIOReadAWord: .PROC
F_SIOReadAWord:
0000A0C2 88 DA PUSH BP,BP TO [SP];
0000A0C3 08 0B 01 00 BP = SP + 1;
// PUSH r2,r4 TO [SP]; modify by
0000A0C5 0C 99 FF 00 r4=0x00FF;
0000A0C7 03 92 R1 = [BP+3];
0000A0C8 19 D3 1B 70 [P_SIO_Addr_Low]=r1; // input SFLASH low address
0000A0CA 79 93 r1=r1 lsr 4;
0000A0CB 79 93 r1=r1 lsr 4;
0000A0CC 19 D3 1C 70 [P_SIO_Addr_Mid]=r1; // input SFLASH mid address
0000A0CE 04 92 R1 = [BP+4]; // Port direction
0000A0CF 47 B2 r1=r1&0x0007; // input SFLASH hi address
0000A0D0 19 D3 1D 70 [P_SIO_Addr_High]=r1;
// r1=0x0083+C_SIOCLOCK; // C_SIOCLOCK 0x0010
0000A0D2 09 93 83 00 r1=0x0083; //+C_SIOCLOCK; // C_SIOCLOCK 0x0010
0000A0D4 19 D3 1E 70 [P_SIO_Ctrl]=r1; // clk=CPUclk/16, 24 bit address ;read
0000A0D6 19 D3 1F 70 [P_SIO_Start]=r1; // enable read mode
////////
0000A0D8 12 95 1A 70 r2=[P_SIO_Data]; // Clear SFLASH buffer
////////
L_WaitSIOReadReady1LB:
0000A0DA 11 93 1F 70 r1=[P_SIO_Start];
0000A0DC 09 C3 80 00 test r1,0x0080
0000A0DE 45 4E jnz L_WaitSIOReadReady1LB
0000A0DF 14 B5 1A 70 r2=r4&[P_SIO_Data]; // Read exact Low Byte
L_WaitSIOReadReady2LB: // Wait read stop
0000A0E1 11 93 1F 70 r1=[P_SIO_Start];
0000A0E3 09 C3 80 00 test r1,0x0080
0000A0E5 45 4E jnz L_WaitSIOReadReady2LB
0000A0E6 14 B7 1A 70 r3=r4&[P_SIO_Data]; // Read exact High Byte
L_WaitSIOReadReady2HB: // Wait read stop
0000A0E8 11 93 1F 70 r1=[P_SIO_Start];
0000A0EA 09 C3 80 00 test r1,0x0080
0000A0EC 45 4E jnz L_WaitSIOReadReady2HB
0000A0ED 19 D3 20 70 [P_SIO_Stop]=r1; // disable read mode
0000A0EF 5B 97 r3=r3 lsl 4; //shift left 8
0000A0F0 5B 93 r1=r3 lsl 4;
0000A0F1 02 A3 r1|=r2; //return data
// POP r2,r4 FROM [SP];
0000A0F2 88 98 POP BP,BP FROM [SP];
0000A0F3 90 9A retf;
.ENDP;
///////////////////////////////////////////////////////////////
//Function : Page Erase for S_Flash (Page Size 1K)
// Syntax: SP_SIOPageErase(Page)
// Used register: r1,r2
///////////////////////////////////////////////////////////////
.public _SP_SIOPageErase;
_SP_SIOPageErase: .PROC
F_SIOPageErase:
0000A0F4 88 DA PUSH BP,BP TO [SP];
0000A0F5 08 0B 01 00 BP = SP + 1;
0000A0F7 03 92 R1 = [BP+3];
0000A0F8 49 93 r1=r1 lsl 2; // 1K page size
0000A0F9 09 B3 FF 01 r1=r1&0x01FF;
0000A0FB 09 A3 00 80 r1=r1|0x8000;
0000A0FD 19 D3 1B 70 [P_SIO_Addr_Low]=r1; // input SFLASH low address ;for A15 and A10
0000A0FF 79 93 r1=r1 lsr 4;
0000A100 79 93 r1=r1 lsr 4;
0000A101 19 D3 1C 70 [P_SIO_Addr_Mid]=r1; // input SFLASH mid address ;for A16
0000A103 09 93 D0 00 r1=0x00C0+C_SIOCLOCK;
0000A105 19 D3 1E 70 [P_SIO_Ctrl]=r1; // clk=CPUclk/8, 16 bit address ;write
0000A107 19 D3 1F 70 [P_SIO_Start]=r1; // enable write mode
0000A109 40 92 r1=0; // A7~A0 = 0
0000A10A 19 D3 1A 70 [P_SIO_Data]=r1; // state to transmit data
L_WaitSIOSendReadyPage:
0000A10C 11 93 1F 70 r1=[P_SIO_Start];
0000A10E 09 C3 80 00 test r1,0x0080
0000A110 45 4E jnz L_WaitSIOSendReadyPage
0000A111 19 D3 20 70 [P_SIO_Stop]=r1; //disable write mode
0000A113 40 F0 3D A1 call F_Delay11ms
0000A115 88 98 POP BP,BP FROM [SP];
0000A116 90 9A retf;
.ENDP;
///////////////////////////////////////////////////////////////
//Function : Mass Erase for S_Flash
// Syntax: SIOMassErase()
// Used register: r1,r2
///////////////////////////////////////////////////////////////
.public _SP_SIOMassErase;
_SP_SIOMassErase: .PROC
F_SIOMassErase:
0000A117 90 D4 push r1,r2 to [sp];
0000A118 09 93 D0 00 r1=0x00C0+C_SIOCLOCK;
0000A11A 19 D3 1E 70 [P_SIO_Ctrl]=r1; // clk=CPUclk/8, 16 bit address ;write
0000A11C 40 94 r2=0x0000;
0000A11D 1A D5 1B 70 [P_SIO_Addr_Low]=r2; // input SFLASH low address
0000A11F 0A 95 C0 00 r2=0x00C0;
0000A121 1A D5 1C 70 [P_SIO_Addr_Mid]=r2; // input SFLASH mid address
0000A123 0A 95 C0 00 r2=0x00C0;
0000A125 1A D5 1D 70 [P_SIO_Addr_High]=r2;
// r1=0x00C0+C_SIOCLOCK;
// [P_SIO_Ctrl]=r1; // clk=CPUclk/8, 16 bit address ;write
0000A127 19 D3 1F 70 [P_SIO_Start]=r1; // enable write mode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -