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

📄 sp_serialflashv1.lst

📁 C语言学习的一个不错的资料
💻 LST
📖 第 1 页 / 共 4 页
字号:
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 + -