📄 uartpacket.lst
字号:
1 .file "uartPacket.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
71 .global uartDebug_init
73 uartDebug_init:
1:uartPacket.c ****
2:uartPacket.c **** #include "type.h"
3:uartPacket.c **** #include "uartPacket.h"
4:uartPacket.c **** #include "message.h"
5:uartPacket.c ****
6:uartPacket.c **** #define DBG_BUF_LEN 104
7:uartPacket.c **** #define UART_IDLE 0
8:uartPacket.c **** #define UART_BUSY 1
9:uartPacket.c ****
10:uartPacket.c **** char UARTState;
11:uartPacket.c **** char dbgBuf[DBG_BUF_LEN];
12:uartPacket.c **** uint8_t dbgHead;
13:uartPacket.c **** uint8_t dbgTail;
14:uartPacket.c **** uint8_t dbgBufCount;
15:uartPacket.c **** uint8_t appendByte;
16:uartPacket.c ****
17:uartPacket.c **** void uartDebug_init()
18:uartPacket.c **** {
75 .LM1:
76 /* prologue: frame size=0 */
77 /* prologue end (size=0) */
19:uartPacket.c **** UARTState = UART_IDLE;
79 .LM2:
80 0000 1092 0000 sts UARTState,__zero_reg__
20:uartPacket.c **** dbgBufCount = 0;
82 .LM3:
83 0004 1092 0000 sts dbgBufCount,__zero_reg__
21:uartPacket.c **** // dbgHead = 0;
22:uartPacket.c **** // dbgTail = 0;
23:uartPacket.c **** dbgBuf[0] = 0x7E;
85 .LM4:
86 0008 8EE7 ldi r24,lo8(126)
87 000a 8093 0000 sts dbgBuf,r24
24:uartPacket.c **** dbgBuf[1] = 0x42;
89 .LM5:
90 000e 82E4 ldi r24,lo8(66)
91 0010 8093 0000 sts dbgBuf+1,r24
25:uartPacket.c **** // initialize UART
26:uartPacket.c **** * (volatile unsigned char *)0x90 = 0; /* UBRR0H = 0 */
93 .LM6:
94 0014 1092 9000 sts 144,__zero_reg__
27:uartPacket.c **** * (volatile unsigned char *)(0x09 + 0x20) = 15; /* UBRR0L = 15 */
96 .LM7:
97 0018 8FE0 ldi r24,lo8(15)
98 001a 89B9 out 41-0x20,r24
28:uartPacket.c **** /* UCSR0A中的U2X0 = 1,即传输速率倍速 */
29:uartPacket.c **** * (volatile unsigned char *)(0x0B + 0x20) = 1 << 1;
100 .LM8:
101 001c 82E0 ldi r24,lo8(2)
102 001e 8BB9 out 43-0x20,r24
30:uartPacket.c **** /* UCSR0C中UCSZ1 = 1,UCSZ0 = 1,即传送或接收字符长为8bit */
31:uartPacket.c **** * (volatile unsigned char *)0x95 = (1 << 2) | (1 << 1);
104 .LM9:
105 0020 86E0 ldi r24,lo8(6)
106 0022 8093 9500 sts 149,r24
32:uartPacket.c **** /* UCSR0B中的RXCIE,TXCIE,RXEN和TXEN都置为1 */
33:uartPacket.c **** * (volatile unsigned char *)(0x0A + 0x20) = (((1 << 7) | (1 << 6)) | (1 << 4)) | (1 << 3);
108 .LM10:
109 0026 88ED ldi r24,lo8(-40)
110 0028 8AB9 out 42-0x20,r24
111 /* epilogue: frame size=0 */
112 002a 0895 ret
113 /* epilogue end (size=1) */
114 /* function uartDebug_init size 22 (21) */
118 .global uartDebug_txByte
120 uartDebug_txByte:
34:uartPacket.c **** }
35:uartPacket.c ****
36:uartPacket.c **** void uartDebug_txByte(char byte)
37:uartPacket.c **** {
122 .LM11:
123 /* prologue: frame size=0 */
124 /* prologue end (size=0) */
125 /* epilogue: frame size=0 */
126 002c 0895 ret
127 /* epilogue end (size=1) */
128 /* function uartDebug_txByte size 1 (0) */
132 .global uartDebug_txPacket
134 uartDebug_txPacket:
38:uartPacket.c **** /* if (UARTState == UART_IDLE) { // send byte if UART is idle
39:uartPacket.c **** UARTState = UART_BUSY;
40:uartPacket.c **** * (volatile unsigned char *)(0x0C + 0x20) = byte; // 将data写入数据寄存器UDR0
41:uartPacket.c **** * (volatile unsigned char *)(0x0B + 0x20) |= 1 << 6; // 向TXC位写逻辑1,从而清零该位
42:uartPacket.c **** }
43:uartPacket.c **** else
44:uartPacket.c **** {
45:uartPacket.c **** if (dbgBufCount < DBG_BUF_LEN) {
46:uartPacket.c **** dbgBuf[dbgTail] = byte;
47:uartPacket.c **** ADVANCE(dbgTail);
48:uartPacket.c **** dbgBufCount++;
49:uartPacket.c **** }
50:uartPacket.c **** }*/
51:uartPacket.c **** }
52:uartPacket.c ****
53:uartPacket.c **** void uartDebug_txPacket(OSMACMsgPtr pMsg)
54:uartPacket.c **** {
136 .LM12:
137 /* prologue: frame size=0 */
138 002e CF93 push r28
139 0030 DF93 push r29
140 /* prologue end (size=2) */
141 0032 EC01 movw r28,r24
55:uartPacket.c **** int i;
56:uartPacket.c **** if (UARTState == UART_IDLE)
143 .LM13:
144 0034 8091 0000 lds r24,UARTState
145 0038 8823 tst r24
146 003a 09F0 breq .+2
147 003c 52C0 rjmp .L3
57:uartPacket.c **** {
58:uartPacket.c **** UARTState = UART_BUSY;
149 .LM14:
150 003e 81E0 ldi r24,lo8(1)
151 0040 8093 0000 sts UARTState,r24
59:uartPacket.c **** dbgBuf[2] = pMsg->length;//
153 .LM15:
154 0044 8881 ld r24,Y
155 0046 8093 0000 sts dbgBuf+2,r24
60:uartPacket.c **** dbgBuf[3] = pMsg->type;
157 .LM16:
158 004a 8981 ldd r24,Y+1
159 004c 8093 0000 sts dbgBuf+3,r24
61:uartPacket.c **** dbgBuf[4] = pMsg->toAddr;
161 .LM17:
162 0050 8A81 ldd r24,Y+2
163 0052 8093 0000 sts dbgBuf+4,r24
62:uartPacket.c **** dbgBuf[5] = pMsg->fromAddr;
165 .LM18:
166 0056 8B81 ldd r24,Y+3
167 0058 8093 0000 sts dbgBuf+5,r24
63:uartPacket.c **** dbgBuf[6] = pMsg->group;
169 .LM19:
170 005c 8C81 ldd r24,Y+4
171 005e 8093 0000 sts dbgBuf+6,r24
64:uartPacket.c **** for (i = 0; i < pMsg->length-7; i++)
173 .LM20:
174 0062 20E0 ldi r18,lo8(0)
175 0064 30E0 ldi r19,hi8(0)
176 0066 8881 ld r24,Y
177 0068 9927 clr r25
178 006a 0797 sbiw r24,7
179 006c 2817 cp r18,r24
180 006e 3907 cpc r19,r25
181 0070 74F4 brge .L10
182 0072 A0E0 ldi r26,lo8(dbgBuf+7)
183 0074 B0E0 ldi r27,hi8(dbgBuf+7)
184 0076 FE01 movw r30,r28
185 0078 3596 adiw r30,5
186 .L8:
65:uartPacket.c **** dbgBuf[7+i] = pMsg->data[i];
188 .LM21:
189 007a 8191 ld r24,Z+
190 007c 8D93 st X+,r24
192 .LM22:
193 007e 2F5F subi r18,lo8(-(1))
194 0080 3F4F sbci r19,hi8(-(1))
195 0082 8881 ld r24,Y
196 0084 9927 clr r25
197 0086 0797 sbiw r24,7
198 0088 2817 cp r18,r24
199 008a 3907 cpc r19,r25
200 008c B4F3 brlt .L8
201 .L10:
66:uartPacket.c **** dbgBuf[pMsg->length] = pMsg->crc >> 8 & 0xFF;
203 .LM23:
204 008e 8881 ld r24,Y
205 0090 E82F mov r30,r24
206 0092 FF27 clr r31
207 0094 E050 subi r30,lo8(-(dbgBuf))
208 0096 F040 sbci r31,hi8(-(dbgBuf))
209 0098 DE01 movw r26,r28
210 009a AE59 subi r26,lo8(-(98))
211 009c BF4F sbci r27,hi8(-(98))
212 009e 8D91 ld r24,X+
213 00a0 9C91 ld r25,X
214 00a2 1197 sbiw r26,1
215 00a4 892F mov r24,r25
216 00a6 990F lsl r25
217 00a8 990B sbc r25,r25
218 00aa 8083 st Z,r24
67:uartPacket.c **** dbgBuf[1+pMsg->length] = pMsg->crc & 0xFF;
220 .LM24:
221 00ac 8881 ld r24,Y
222 00ae E82F mov r30,r24
223 00b0 FF27 clr r31
224 00b2 E050 subi r30,lo8(-(dbgBuf))
225 00b4 F040 sbci r31,hi8(-(dbgBuf))
226 00b6 8C91 ld r24,X
227 00b8 8183 std Z+1,r24
68:uartPacket.c **** dbgBuf[2+pMsg->length] = 0x7E;
229 .LM25:
230 00ba 8881 ld r24,Y
231 00bc E82F mov r30,r24
232 00be FF27 clr r31
233 00c0 E050 subi r30,lo8(-(dbgBuf))
234 00c2 F040 sbci r31,hi8(-(dbgBuf))
235 00c4 8EE7 ldi r24,lo8(126)
236 00c6 8283 std Z+2,r24
69:uartPacket.c **** * (volatile unsigned char *)(0x0C + 0x20) = dbgBuf[0]; // 将data写入数据寄存器UDR0
238 .LM26:
239 00c8 8091 0000 lds r24,dbgBuf
240 00cc 8CB9 out 44-0x20,r24
70:uartPacket.c **** * (volatile unsigned char *)(0x0B + 0x20) |= 1 << 6; // 向TXC位写逻辑1,从而清零该位
242 .LM27:
243 00ce 5E9A sbi 43-0x20,6
71:uartPacket.c **** dbgBufCount = 1;
245 .LM28:
246 00d0 81E0 ldi r24,lo8(1)
247 00d2 8093 0000 sts dbgBufCount,r24
72:uartPacket.c **** dbgTail = 2 + pMsg->length;
249 .LM29:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -