📄 sp_serialflashv1.lst
字号:
0000A129 40 92 r1=0; // A7~A0 = 0
0000A12A 19 D3 1A 70 [P_SIO_Data]=r1; // state to transmit data
L_WaitSIOSendReadyMass:
0000A12C 11 93 1F 70 r1=[P_SIO_Start];
0000A12E 09 C3 80 00 test r1,0x0080
0000A130 45 4E jnz L_WaitSIOSendReadyMass
//disable write mode
0000A131 19 D3 20 70 [P_SIO_Stop]=r1;
0000A133 40 F0 3D A1 call F_Delay11ms
0000A135 40 F0 3D A1 call F_Delay11ms //modify by abin
0000A137 40 F0 3D A1 call F_Delay11ms
0000A139 40 F0 3D A1 call F_Delay11ms
0000A13B 90 90 pop r1,r2 from [sp];
0000A13C 90 9A retf;
.ENDP;
F_Delay11ms:
0000A13D 88 D2 push r1,r1 to [sp];
//r1=17*10;
0000A13E 09 93 C8 00 r1=20*10; // delay
L_LoopDelay11:
0000A140 40 F0 46 A1 call F_Delay100uS;
0000A142 41 22 r1-=1;
0000A143 44 4E jne L_LoopDelay11
0000A144 88 90 pop r1,r1 from [sp];
0000A145 90 9A retf;
///////////////////////////////////////////////////////////////
//Function : 100us Dealy for S_Flash programming time (base on CPUCLK= 24MHz)
// Syntax: Delay100uS()
// Used register: r1,r2
///////////////////////////////////////////////////////////////
.public _Delay100uS;
_Delay100uS: .PROC
F_Delay100uS: //13
0000A146 88 D2 push r1,r1 to [sp]; //7
0000A147 09 93 26 01 r1=294; //6
L_DelayLoop:
0000A149 41 22 r1-=1; //3 26+19+8*294 =2400
0000A14A 42 4E jne L_DelayLoop; //5
0000A14B 88 90 pop r1,r1 from [sp]; //7
0000A14C 90 9A retf; //12
.ENDP;
///////////////////////////////////////////////////////////////
//Function : Dealy for S_Flash programming time (base on CPUCLK= 24MHz)
// Syntax: DelayPT()
// Used register: r1
///////////////////////////////////////////////////////////////
.public _DelayPT;
_DelayPT: .PROC
F_DelayPT: //13
0000A14D 88 D2 push r1,r1 to [sp]; //7
//r1=294; //6
//r1=147;
//r1=1600;
//r1=100;
0000A14E 09 93 A0 00 r1=160
//r1=200;
L_DelayLoopPT:
0000A150 41 22 r1-=1; //3 26+19+8*160 =1325 ----> 56us
0000A151 42 4E jne L_DelayLoopPT; //5
0000A152 88 90 pop r1,r1 from [sp]; //7
0000A153 90 9A retf; //12
.ENDP;
///////////////////////////////////////////////////////////////
//Function : Write head. There are 8 bytes. The first 4 bytes is address of ending speech
// The last 4 bytes is 1' complement of first 4 bytes
// Syntax : SP_WriteHeader( Low Address of header, High Address of header, DataLow, DataHigh)
// Used register: r1-r3
///////////////////////////////////////////////////////////////
.public _SP_WriteHeader;
_SP_WriteHeader: .PROC
F_WriteHeader:
0000A154 88 DA PUSH BP,BP TO [SP];
0000A155 08 0B 01 00 BP = SP + 1;
0000A157 05 96 r3=[BP+5]; //data for programming
0000A158 04 94 r2=[BP+4]; //high addr for programming
0000A159 03 92 r1=[BP+3]; //low addr for programming
0000A15A 98 D6 PUSH r1,r3 TO [SP];
0000A15B 40 F0 80 A0 call F_SIOSendAWord;
0000A15D 98 90 pop r1,r3 from [SP];
0000A15E 06 96 r3=[BP+6]; //data for programming
0000A15F 04 94 r2=[BP+4]; //high addr for programming
0000A160 03 92 r1=[BP+3]; //low addr for programming
0000A161 42 02 r1+=2;
0000A162 40 14 r2+=0, carry;
0000A163 98 D6 PUSH r1,r3 TO [SP];
0000A164 40 F0 80 A0 call F_SIOSendAWord;
0000A166 98 90 pop r1,r3 from [SP];
0000A167 05 96 r3=[BP+5]; //data for programming
0000A168 0B 87 FF FF r3^=0xffff;
0000A16A 04 94 r2=[BP+4]; //high addr for programming
0000A16B 03 92 r1=[BP+3]; //low addr for programming
0000A16C 44 02 r1+=4;
0000A16D 40 14 r2+=0, carry;
0000A16E 98 D6 PUSH r1,r3 TO [SP];
0000A16F 40 F0 80 A0 call F_SIOSendAWord;
0000A171 98 90 pop r1,r3 from [SP];
0000A172 06 96 r3=[BP+6]; //data for programming
0000A173 0B 87 FF FF r3^=0xffff;
0000A175 04 94 r2=[BP+4]; //high addr for programming
0000A176 03 92 r1=[BP+3]; //low addr for programming
0000A177 46 02 r1+=6;
0000A178 40 14 r2+=0, carry;
0000A179 98 D6 PUSH r1,r3 TO [SP];
0000A17A 40 F0 80 A0 call F_SIOSendAWord;
0000A17C 98 90 pop r1,r3 from [SP];
0000A17D 88 98 POP BP,BP FROM [SP];
0000A17E 90 9A retf;
.ENDP;
///////////////////////////////////////////////////////////////
//Function : Check header. Header has 8 bytes. The first 4 bytes is address of ending speech
// The last 4 bytes is 1' complement of first 4 bytes
// Syntax : CheckHeader( Low Address of header, High Address of header)
// Used register: r1
// return value : r1, r2 (if r1=0xffff and r2=0xffff, error)
///////////////////////////////////////////////////////////////
.public _SP_CheckHeader;
_SP_CheckHeader: .PROC
F_CheckHeader:
0000A17F 88 DA PUSH BP,BP TO [SP];
0000A180 08 0B 01 00 BP = SP + 1;
0000A182 04 96 r3=[BP+4]; //high addr for reading
0000A183 03 94 r2=[BP+3]; //low addr for reading
0000A184 42 04 r2+=2;
0000A185 40 16 r3+=0, carry;
0000A186 98 D8 PUSH r2,r4 TO [SP];
0000A187 40 F0 C2 A0 call F_SIOReadAWord;
0000A189 98 92 pop r2,r4 from [SP];
0000A18A 01 99 r4=r1;
0000A18B 04 96 r3=[BP+4]; //high addr for reading
0000A18C 03 94 r2=[BP+3]; //low addr for reading
0000A18D 46 04 r2+=6;
0000A18E 40 16 r3+=0, carry;
0000A18F 98 D8 PUSH r2,r4 TO [SP];
0000A190 40 F0 C2 A0 call F_SIOReadAWord;
0000A192 98 92 pop r2,r4 from [SP];
0000A193 09 83 FF FF r1^=0xffff;
0000A195 04 43 cmp r1,r4
0000A196 18 4E jne L_HeaderError
0000A197 88 D8 PUSH r4,r4 TO [SP]; //save high byte of return data
0000A198 04 96 r3=[BP+4]; //high addr for reading
0000A199 03 94 r2=[BP+3]; //low addr for reading
0000A19A 98 D8 PUSH r2,r4 TO [SP];
0000A19B 40 F0 C2 A0 call F_SIOReadAWord;
0000A19D 98 92 pop r2,r4 from [SP];
0000A19E 01 99 r4=r1;
0000A19F 04 96 r3=[BP+4]; //high addr for reading
0000A1A0 03 94 r2=[BP+3]; //low addr for reading
0000A1A1 44 04 r2+=4;
0000A1A2 40 16 r3+=0, carry;
0000A1A3 98 D8 PUSH r2,r4 TO [SP];
0000A1A4 40 F0 C2 A0 call F_SIOReadAWord;
0000A1A6 98 92 pop r2,r4 from [SP];
0000A1A7 09 83 FF FF r1^=0xffff;
0000A1A9 04 43 cmp r1,r4
0000A1AA 03 4E jne L_HeaderError2
0000A1AB 88 92 POP r2,r2 FROM [SP]; //get high byte of return data
0000A1AC 88 98 POP BP,BP FROM [SP];
0000A1AD 90 9A retf;
L_HeaderError2:
0000A1AE 88 96 POP r4,r4 FROM [SP]; //remove high byte of return data
L_HeaderError:
0000A1AF 09 93 FF FF r1=0xffff;
0000A1B1 0A 95 FF FF r2=0xffff;
0000A1B3 88 98 POP BP,BP FROM [SP];
.ENDP;
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -