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

📄 uartapi.lst

📁 C语言学习的一个不错的资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
0000A39F                    	.CODE	
                            	
                            	
                            	//----------------------------------------------
                            	// Macro: UART Internal reset
                            	// Argument : N/A
                            	// Register : R1
                            	//----------------------------------------------
                            	M_UartInternalReset: .macro 
                            		R1 = 0x20;
                            		[P_UART_Command1] = R1;		//internal RESET
                            		R1 = 0x00;
                            		[P_UART_Command1] = R1;		//internal RESET	
                            	.ENDM
                            	//----------------------------------------------
                            	// Macro: Set UART baud rate
                            	// Argument : baud rate high, baud rate low
                            	// Register : R1
                            	//----------------------------------------------
                            	M_SetUartBaudRate: .macro C_UARTBaudRate_H,C_UARTBaudRate_L
                            	    R1 = C_UARTBaudRate_H;
                            		[P_UART_BaudScalarHigh] = R1;
                            	    R1 = C_UARTBaudRate_L;
                            		[P_UART_BaudScalarLow] = R1;
                            	.ENDM
                            	//----------------------------------------------
                            	// Macro: UART setting 
                            	// Argument : command 1 setting, command 2 setting
                            	// Register : R1
                            	//----------------------------------------------
                            	M_UartCmdSet: .macro C_Cmd1Setting,C_Cmd2Setting
                            	    R1 = C_Cmd1Setting;
                            		[P_UART_Command1] = R1;    
                            	    R1 = C_Cmd2Setting;  
                            		[P_UART_Command2] = R1;  
                            	.ENDM
                            	//============================================================== 
                            	// Description: Initialize UART setting 
                            	// Syntax: SP_Uart_Init()
                            	// Parameter: None
                            	// Return:  Data
                            	// Parameter:N/A
                            	// Return None
                            	//=============================================================
                            	.public _SP_UART_Init
                            	_SP_UART_Init: .PROC
                            	F_UART_INIT: 
0000A39F 90 D4              		PUSH R1,R2 to [SP];
                            	      
                            	    // wait for IO stable
0000A3A0 0A 95 FF FF        	    R2 = 0xFFFF //0x0AFF;    
                            	    ?L_WaitForIOStable00: 
0000A3A2 41 24              	    R2-=1;
0000A3A3 42 4E              	    jnz ?L_WaitForIOStable00;	
                            	 	 	
                            		// Internal reset
                           1	    M_UartInternalReset; 
0000A3A4 60 92             1		R1 = 0x20;
0000A3A5 19 D3 21 70       1		[P_UART_Command1] = R1;		//internal RESET
0000A3A7 40 92             1		R1 = 0x00;
0000A3A8 19 D3 21 70       1		[P_UART_Command1] = R1;		//internal RESET	
                            	    // baudrate
                           1		M_SetUartBaudRate C_UARTBaudRate_115200_H,C_UARTBaudRate_115200_L;
0000A3AA 40 92             1	    R1 = C_UARTBaudRate_115200_H;
0000A3AB 19 D3 25 70       1		[P_UART_BaudScalarHigh] = R1;
0000A3AD 09 93 6B 00       1	    R1 = C_UARTBaudRate_115200_L;
0000A3AF 19 D3 24 70       1		[P_UART_BaudScalarLow] = R1;
                            		//
                            	    // cmd setting
                            	    //
                            	//    M_UartCmdSet C_EvenParity|C_ParityEnable,C_EnableTx|C_EnableRx
                           1	    M_UartCmdSet C_EvenParity|C_ParityEnable,C_EnableTx|C_EnableRx
0000A3B1 4C 92             1	    R1 = C_EvenParity|C_ParityEnable;
0000A3B2 19 D3 21 70       1		[P_UART_Command1] = R1;    
0000A3B4 09 93 C0 00       1	    R1 = C_EnableTx|C_EnableRx;  
0000A3B6 19 D3 22 70       1		[P_UART_Command2] = R1;  
                            	  
                            	    // wait for IO stable
                            	
0000A3B8 0A 95 FF FF        	    R2 = 0xFFFF //0x0AFF;    
                            	    ?L_WaitForIOStable01: 
0000A3BA 41 24              	    R2-=1;
0000A3BB 42 4E              	    jnz ?L_WaitForIOStable01;
                            		
                            		// clear receiving buffer
0000A3BC 11 93 23 70        		R1=[P_UART_Data];
0000A3BE 90 90              		POP R1,R2 from[SP];
0000A3BF 90 9A              	retf;
                            	.ENDP
                            	
                            	//=========================================
                            	// Description: Sent a byte to UART 
                            	// Syntax: SP_UartSentByte()
                            	// Parameter: Data
                            	// Return:  None
                            	//=========================================
                            	.public _SP_UartSentByte
                            	_SP_UartSentByte: .PROC
0000A3C0 88 DA              	 PUSH BP,BP to[SP];
0000A3C1 08 0B 01 00        	 BP = SP+1;
0000A3C3 03 92              	 R1 = [BP+3];
0000A3C4 40 F0 C8 A3        	 call F_UartSendByte;
                            	 
0000A3C6 88 98              	 POP BP,BP from[SP];
0000A3C7 90 9A              	 retf;
                            	.ENDP
                            	//-----------------------------
                            	// Function : Set a byte
                            	// parameter: R1=data to send
                            	// return: N/A
                            	// register: R1;
                            	//-----------------------------
                            	F_UartSendByte:
0000A3C8 88 D2              	    PUSH R1,R1 to [SP];
                            	    ?L_Check_TxRDY:
0000A3C9 09 93 40 00        		R1 = 0x0040;		       //Check bit 6 to see if TxRDY = 1;
0000A3CB 11 C3 22 70        		TEST R1,[P_UART_Command2]; //Read received data byte if RxRDY=1
0000A3CD 45 5E              		JZ ?L_Check_TxRDY;
                            	    // send data
0000A3CE 88 90              	    POP R1,R1 from [SP];
0000A3CF 19 D3 23 70        	    [P_UART_Data]=R1; 
0000A3D1 90 9A              	    retf;
                            	//=========================================
                            	// Description: Read a byte from UART 
                            	// Syntax: SP_UartReadByte()
                            	// Parameter: None
                            	// Return:  Data
                            	//=========================================
                            	.public _SP_UartReadByte
                            	_SP_UartReadByte: .PROC
                            	//----------------------------
                            	// Function : Read a byte
                            	// parameter: N/A
                            	// return: R1=Data read
                            	// register: R1;
                            	//----------------------------
                            	F_SendByte:   
                            	?L_ResendData:
0000A3D2 0A 95 FF FF        		r2=0xffff;
                            	   // receive data
                            	  ?L_Check_RxRDY:
0000A3D4 41 24              		R2-=1;
0000A3D5 41 44              		cmp R2,1
0000A3D6 07 8E              		jbe ReadByte_Return
0000A3D7 09 93 80 00        		R1 = 0x0080;		       //Check bit 7 to see if RxRDY = 1;
0000A3D9 11 C3 22 70        		TEST R1,[P_UART_Command2]; //Read received data byte if RxRDY=1
0000A3DB 48 5E              		JZ ?L_Check_RxRDY;
                            	    // read data
                            	    // Compare the data sent and received
0000A3DC 11 93 23 70        	    R1 = [P_UART_Data]; 
                            	ReadByte_Return:
0000A3DE 90 9A              		retf;
                            	.ENDP
                            	
                            	//=========================================
                            	// by guangyuan wei
                            	// Description: down load 
                            	// Syntax: UART_Download()
                            	// Parameter: None
                            	// Return:  none
                            	//=========================================
                            	.public _UART_Download;
                            	_UART_Download:   .proc
                            	
0000A3DF 40 92              		R1 = 0x0000;
0000A3E0 0C 99 C0 00        		R4 = 0x00C0;		    //enable Rx and Tx 
0000A3E2 19 D3 21 70        		[P_UART_Command1] = R1;
0000A3E4 1C D9 22 70        		[P_UART_Command2] = R4;
                            	
                            	Download_Check:
0000A3E6 12 95 22 70        		R2 = [P_UART_Command2]; //check if it has data received 
0000A3E8 0A B5 80 00        		R2 &= 0x0080;
0000A3EA 45 5E              		JZ Download_Check;	
                            		
                            	Download_Check_RxRDY:
0000A3EB 41 22              		R1-=1;
0000A3EC 41 42              		cmp R1,1
0000A3ED 20 8E              		jbe Download_Return
0000A3EE 12 95 22 70        		R2 = [P_UART_Command2]; //check if it has data received
0000A3F0 0A B5 80 00        		R2 &= 0x0080;
0000A3F2 48 5E              		JZ Download_Check_RxRDY;	
0000A3F3 11 93 23 70        		R1 = [P_UART_Data];		//receive data
0000A3F5 88 D2              		push r1 to [sp]
0000A3F6 0D 9B 16 06        		bp=_Addr+1
0000A3F8 C5 92              		r1=[bp];
0000A3F9 88 D2              		push r1 to [sp]
0000A3FA 41 2A              		bp-=1
0000A3FB C5 92              		r1=[bp];
0000A3FC 88 D2              		push r1 to [sp]
0000A3FD 40 F0 3A A0        		call _SP_SIOSendAByte;
0000A3FF 43 00              		sp+=3;
0000A400 11 93 15 06        		r1=[_Addr];
0000A402 12 95 16 06        		r2=[_Addr+1];
0000A404 41 02              		r1+=1;
0000A405 40 14              		r2+=0,Carry;
0000A406 19 D3 15 06        		[_Addr]=r1;
0000A408 1A D5 16 06        		[_Addr+1]=r2;
                            		
0000A40A 09 93 FF FF        		R1=0xffff;
0000A40C 80 FE EB A3        	 	GOTO Download_Check_RxRDY;
                            	 	
                            	Download_Return:
0000A40E 90 9A              		retf;  
                            	.endp
                            	
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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