📄 uartapi.lst
字号:
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 + -