📄 com.lst
字号:
\ 00000008 0150A0E1 MOV R5,R1
86 u_int i;
87 for (i=0 ; buff[i]!=0;i++)
\ 0000000C 0060A0E3 MOV R6,#+0x0
\ 00000010 080000EA B ??at91_print_0
88 {
89 //* wait the USART Ready for transmission
90 while((at91_usart_get_status(USART_pt->usart) & US_TXRDY) ==0) {}
\ ??at91_print_1:
\ 00000014 000094E5 LDR R0,[R4, #+0]
\ 00000018 ........ BL at91_usart_get_status
\ 0000001C FF0000E2 AND R0,R0,#+0xFF ;; Zero extend
\ 00000020 020010E3 TST R0,#+0x2
\ 00000024 FAFFFF0A BEQ ??at91_print_1
91 //* write Char
92 at91_usart_write(USART_pt->usart,buff[i]);
\ 00000028 0010D7E5 LDRB R1,[R7, #+0]
\ 0000002C 000094E5 LDR R0,[R4, #+0]
\ 00000030 ........ BL at91_usart_write
93 }
\ 00000034 016086E2 ADD R6,R6,#+0x1
\ ??at91_print_0:
\ 00000038 057086E0 ADD R7,R6,R5
\ 0000003C 0000D7E5 LDRB R0,[R7, #+0]
\ 00000040 000050E3 CMP R0,#+0x0
\ 00000044 F2FFFF1A BNE ??at91_print_1
94 }
\ 00000048 F080BDE8 LDMIA SP!,{R4-R7,PC} ;; return
95 //* End
96 //*----------------------------------------------------------------------------
97 //* Function Name : at91_send_byte
98 //* Object : Send a char (one byte to USART)
99 //* Input Parameters : com descriptor & String pointer
100 //* Output Parameters : none
101 //*----------------------------------------------------------------------------
\ In segment NEARFUNC_A, align 4, keep-with-next
\ 00000000 CODE32
102 void at91_send_byte(ComDesc *USART_pt, char buff)
103 //* Begin
104 {
\ at91_send_byte:
\ 00000000 30402DE9 STMDB SP!,{R4,R5,LR} ;; Push
\ 00000004 0040A0E1 MOV R4,R0
\ 00000008 0150A0E1 MOV R5,R1
105 //* wait the USART Ready for transmission
106 //* PDC wait
107 while(( USART_pt->usart->usart_base->US_TCR) !=0) {}
\ ??at91_send_byte_0:
\ 0000000C 000094E5 LDR R0,[R4, #+0]
\ 00000010 001090E5 LDR R1,[R0, #+0]
\ 00000014 3C0091E5 LDR R0,[R1, #+60]
\ 00000018 000050E3 CMP R0,#+0x0
\ 0000001C FAFFFF1A BNE ??at91_send_byte_0
108 //* Char wait
109 while((at91_usart_get_status(USART_pt->usart) & US_TXRDY) ==0) {}
\ ??at91_send_byte_1:
\ 00000020 000094E5 LDR R0,[R4, #+0]
\ 00000024 ........ BL at91_usart_get_status
\ 00000028 FF0000E2 AND R0,R0,#+0xFF ;; Zero extend
\ 0000002C 020010E3 TST R0,#+0x2
\ 00000030 FAFFFF0A BEQ ??at91_send_byte_1
110 //* write Char
111 at91_usart_write(USART_pt->usart,buff);
\ 00000034 FF5005E2 AND R5,R5,#+0xFF ;; Zero extend
\ 00000038 0510A0E1 MOV R1,R5
\ 0000003C 000094E5 LDR R0,[R4, #+0]
\ 00000040 ........ BL at91_usart_write
112 }
\ 00000044 3080BDE8 LDMIA SP!,{R4,R5,PC} ;; return
113 //* End
114
115 //*----------------------------------------------------------------------------
116 //* Function Name : at91_print_crlf
117 //* Object : Send "\n\r"
118 //* Input Parameters : com descriptor
119 //* Output Parameters : none
120 //*----------------------------------------------------------------------------
\ In segment NEARFUNC_A, align 4, keep-with-next
\ 00000000 CODE32
121 void at91_print_crlf(ComDesc *USART_pt)
122 {
\ at91_print_crlf:
\ 00000000 70402DE9 STMDB SP!,{R4-R6,LR} ;; Push
\ 00000004 04D04DE2 SUB SP,SP,#+0x4
123 char buff[3];
124 buff[0]='\n'; buff[1]='\r';buff[2]=0x00;
\ 00000008 0A10A0E3 MOV R1,#+0xA
\ 0000000C 0010CDE5 STRB R1,[SP, #+0]
\ 00000010 0D10A0E3 MOV R1,#+0xD
\ 00000014 0110CDE5 STRB R1,[SP, #+1]
\ 00000018 0010A0E3 MOV R1,#+0x0
\ 0000001C 0210CDE5 STRB R1,[SP, #+2]
125 at91_print(USART_pt,buff);
\ 00000020 0040A0E1 MOV R4,R0
\ 00000024 0050A0E3 MOV R5,#+0x0
\ 00000028 080000EA B ??at91_print_crlf_0
\ ??at91_print_crlf_1:
\ 0000002C 000094E5 LDR R0,[R4, #+0]
\ 00000030 ........ BL at91_usart_get_status
\ 00000034 FF0000E2 AND R0,R0,#+0xFF ;; Zero extend
\ 00000038 020010E3 TST R0,#+0x2
\ 0000003C FAFFFF0A BEQ ??at91_print_crlf_1
\ 00000040 0610A0E1 MOV R1,R6
\ 00000044 000094E5 LDR R0,[R4, #+0]
\ 00000048 ........ BL at91_usart_write
\ 0000004C 015085E2 ADD R5,R5,#+0x1
\ ??at91_print_crlf_0:
\ 00000050 0D00A0E1 MOV R0,SP
\ 00000054 0060D5E7 LDRB R6,[R5, +R0]
\ 00000058 000056E3 CMP R6,#+0x0
\ 0000005C F2FFFF1A BNE ??at91_print_crlf_1
126 }
\ 00000060 04D08DE2 ADD SP,SP,#+0x4 ;; stack cleaning
\ 00000064 7080BDE8 LDMIA SP!,{R4-R6,PC} ;; return
127 //*----------------------------------------------------------------------------
128 //* Function Name : at91_getch
129 //* Object : Chek a char in usart
130 //* Input Parameters : com descriptor & pt value
131 //* Output Parameters : TRUE if char or FALSE
132 //*----------------------------------------------------------------------------
\ In segment NEARFUNC_A, align 4
\ 00000000 CODE32
133 int at91_getch(ComDesc *USART_pt ,int * value )
134 {
\ at91_getch:
\ 00000000 70402DE9 STMDB SP!,{R4-R6,LR} ;; Push
\ 00000004 0040A0E1 MOV R4,R0
\ 00000008 0150A0E1 MOV R5,R1
135 u_int status;
136
137 //* Check the USART Ready for reception
138 status =(( at91_usart_get_status(USART_pt->usart) & US_RXRDY) ==0);
\ 0000000C 000094E5 LDR R0,[R4, #+0]
\ 00000010 ........ BL at91_usart_get_status
\ 00000014 FF0000E2 AND R0,R0,#+0xFF ;; Zero extend
\ 00000018 010010E3 TST R0,#+0x1
\ 0000001C 0100A003 MOVEQ R0,#+0x1
\ 00000020 0000A013 MOVNE R0,#+0x0
\ 00000024 0060A0E1 MOV R6,R0
139 if (! status)
\ 00000028 000050E3 CMP R0,#+0x0
140 {
141 at91_usart_read (USART_pt->usart,(u_int *) value );
\ 0000002C 0510A001 MOVEQ R1,R5
\ 00000030 00009405 LDREQ R0,[R4, #+0]
\ 00000034 ........ BLEQ at91_usart_read
142 }
143 return status;
\ 00000038 0600A0E1 MOV R0,R6
\ 0000003C 7080BDE8 LDMIA SP!,{R4-R6,PC} ;; return
144 }
145
Maximum stack usage in bytes:
Function CSTACK
-------- ------
at91_close_com 8
at91_getch 16
at91_open_com 8
at91_print 20
at91_print_crlf 20
at91_print_frame 16
at91_send_byte 12
492 bytes in segment NEARFUNC_A
492 bytes of CODE memory
Errors: none
Warnings: 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -