?? physical.lst
字號:
279 .LM32:
280 00d8 80E0 ldi r24,lo8(buffer2)
281 00da 90E0 ldi r25,hi8(buffer2)
282 00dc 9093 0000 sts (procBufPtr)+1,r25
283 00e0 8093 0000 sts procBufPtr,r24
124:physical.c **** procPtr = (char*)&buffer2;
285 .LM33:
286 00e4 9093 0000 sts (procPtr)+1,r25
287 00e8 8093 0000 sts procPtr,r24
125:physical.c **** recvBufState = FREE;
289 .LM34:
290 00ec 1092 0000 sts recvBufState,__zero_reg__
126:physical.c **** procBufState = FREE;
292 .LM35:
293 00f0 1092 0000 sts procBufState,__zero_reg__
127:physical.c **** RadiocontrolInit();
295 .LM36:
296 00f4 0E94 0000 call RadiocontrolInit
128:physical.c **** return SUCCESS;
129:physical.c **** }
298 .LM37:
299 00f8 81E0 ldi r24,lo8(1)
300 00fa 90E0 ldi r25,hi8(1)
301 /* epilogue: frame size=0 */
302 00fc 0895 ret
303 /* epilogue end (size=1) */
304 /* function PhysicalInit size 27 (26) */
309 .global PhysicalTxPkt
311 PhysicalTxPkt:
130:physical.c ****
131:physical.c **** /*************************************************************************
132:physical.c **** *功能描述:物理層進入空閑狀態
133:physical.c **** *參數說明:無
134:physical.c **** *返回值: 無
135:physical.c **** **************************************************************************/
136:physical.c **** /*
137:physical.c **** static result_t PhysicalIdle(void)
138:physical.c **** {
139:physical.c **** RadiocontrolIdle();
140:physical.c **** state = IDLE;
141:physical.c **** return SUCCESS;
142:physical.c **** }
143:physical.c **** */
144:physical.c **** /*************************************************************************
145:physical.c **** *功能描述:物理層進入睡眠狀態
146:physical.c **** *參數說明:無
147:physical.c **** *返回值: 無
148:physical.c **** **************************************************************************/
149:physical.c **** /*
150:physical.c **** static result_t PhysicalSleep(void)
151:physical.c **** {
152:physical.c **** RadiocontrolSleep();
153:physical.c **** state = IDLE;
154:physical.c **** return SUCCESS;
155:physical.c **** }
156:physical.c **** */
157:physical.c **** /*************************************************************************
158:physical.c **** *功能描述:物理層發送數據包接口函數,進入發送狀態,啟動整個發送流程
159:physical.c **** *參數說明:packet:數據包地址 length:物理層要發送的字節數
160:physical.c **** *返回值: 無
161:physical.c **** **************************************************************************/
162:physical.c **** result_t PhysicalTxPkt(void* packet, uint8_t length)
163:physical.c **** {
313 .LM38:
314 /* prologue: frame size=0 */
315 00fe 0F93 push r16
316 0100 1F93 push r17
317 0102 CF93 push r28
318 /* prologue end (size=3) */
319 0104 8C01 movw r16,r24
320 0106 C62F mov r28,r22
164:physical.c **** if (length > MAX_PKT_LEN || length < MIN_PKT_LEN)
322 .LM39:
323 0108 862F mov r24,r22
324 010a 8750 subi r24,lo8(-(-7))
325 010c 8633 cpi r24,lo8(54)
326 010e 20F4 brsh .L22
165:physical.c **** return FAIL;
166:physical.c **** if (state != IDLE && state != RECEIVING)
328 .LM40:
329 0110 8091 0000 lds r24,state
330 0114 8230 cpi r24,lo8(2)
331 0116 18F0 brlo .L21
332 .L22:
167:physical.c **** return FAIL;
334 .LM41:
335 0118 80E0 ldi r24,lo8(0)
336 011a 90E0 ldi r25,hi8(0)
337 011c 1EC0 rjmp .L19
338 .L21:
168:physical.c ****
169:physical.c **** state = TRANSMITTING;
340 .LM42:
341 011e 82E0 ldi r24,lo8(2)
342 0120 8093 0000 sts state,r24
170:physical.c **** RadiocontrolStartTx();
344 .LM43:
345 0124 0E94 0000 call RadiocontrolStartTx
171:physical.c **** sendPtr = (char*)packet;
347 .LM44:
348 0128 1093 0000 sts (sendPtr)+1,r17
349 012c 0093 0000 sts sendPtr,r16
172:physical.c **** ((OSMACMsgPtr)sendPtr)->length = length;
351 .LM45:
352 0130 F801 movw r30,r16
353 0132 C083 st Z,r28
173:physical.c **** pktLength = length;
355 .LM46:
356 0134 C093 0000 sts pktLength,r28
174:physical.c **** txCount = 0;
358 .LM47:
359 0138 1092 0000 sts txCount,__zero_reg__
175:physical.c ****
176:physical.c **** crcTx=update_crc(sendPtr[0], 0);
361 .LM48:
362 013c E091 0000 lds r30,sendPtr
363 0140 F091 0000 lds r31,(sendPtr)+1
364 0144 60E0 ldi r22,lo8(0)
365 0146 70E0 ldi r23,hi8(0)
366 0148 8081 ld r24,Z
367 014a 0E94 0000 call update_crc
368 014e 9093 0000 sts (crcTx)+1,r25
369 0152 8093 0000 sts crcTx,r24
177:physical.c ****
178:physical.c **** return SUCCESS;
371 .LM49:
372 0156 81E0 ldi r24,lo8(1)
373 0158 90E0 ldi r25,hi8(1)
374 .L19:
375 /* epilogue: frame size=0 */
376 015a CF91 pop r28
377 015c 1F91 pop r17
378 015e 0F91 pop r16
379 0160 0895 ret
380 /* epilogue end (size=4) */
381 /* function PhysicalTxPkt size 50 (43) */
384 .global PhysicalTxByteReady
386 PhysicalTxByteReady:
179:physical.c **** }
180:physical.c ****
181:physical.c **** /*************************************************************************
182:physical.c **** *功能描述:發送未完成時,準備下一個要發送的字節,發送完成時進入空閑狀態并通知上層
183:physical.c **** *參數說明:無
184:physical.c **** *返回值: 無
185:physical.c **** **************************************************************************/
186:physical.c **** result_t PhysicalTxByteReady(void)
187:physical.c **** { // 射頻控制模塊獲得數據包下一個字節
388 .LM50:
389 /* prologue: frame size=0 */
390 /* prologue end (size=0) */
188:physical.c **** if(state == TRANSMITTING) {
392 .LM51:
393 0162 8091 0000 lds r24,state
394 0166 8230 cpi r24,lo8(2)
395 0168 09F0 breq .+2
396 016a 4CC0 rjmp .L24
189:physical.c **** RadiocontrolTxNextByte(sendPtr[txCount]);
398 .LM52:
399 016c 8091 0000 lds r24,txCount
400 0170 E091 0000 lds r30,sendPtr
401 0174 F091 0000 lds r31,(sendPtr)+1
402 0178 E80F add r30,r24
403 017a F11D adc r31,__zero_reg__
404 017c 8081 ld r24,Z
405 017e 0E94 0000 call RadiocontrolTxNextByte
190:physical.c **** txCount++;
407 .LM53:
408 0182 8091 0000 lds r24,txCount
409 0186 8F5F subi r24,lo8(-(1))
410 0188 8093 0000 sts txCount,r24
191:physical.c **** if (txCount < pktLength) { // 不是最后一個字節
412 .LM54:
413 018c 9091 0000 lds r25,pktLength
414 0190 8917 cp r24,r25
415 0192 A0F5 brsh .L25
192:physical.c **** if(txCount < pktLength - 2){ // 是否要計算CRC
417 .LM55:
418 0194 E82F mov r30,r24
419 0196 FF27 clr r31
420 0198 892F mov r24,r25
421 019a 9927 clr r25
422 019c 0297 sbiw r24,2
423 019e E817 cp r30,r24
424 01a0 F907 cpc r31,r25
425 01a2 8CF4 brge .L26
193:physical.c **** crcTx=update_crc(sendPtr[txCount], crcTx);
427 .LM56:
428 01a4 8091 0000 lds r24,sendPtr
429 01a8 9091 0000 lds r25,(sendPtr)+1
430 01ac E80F add r30,r24
431 01ae F91F adc r31,r25
432 01b0 6091 0000 lds r22,crcTx
433 01b4 7091 0000 lds r23,(crcTx)+1
434 01b8 8081 ld r24,Z
435 01ba 0E94 0000 call update_crc
436 01be 9093 0000 sts (crcTx)+1,r25
437 01c2 8093 0000 sts crcTx,r24
438 .L26:
194:physical.c **** }
195:physical.c **** if(txCount == pktLength - 2){ // 存入CRC結果
440 .LM57:
441 01c6 8091 0000 lds r24,txCount
442 01ca 282F mov r18,r24
443 01cc 3327 clr r19
444 01ce 8091 0000 lds r24,pktLength
445 01d2 482F mov r20,r24
446 01d4 5527 clr r21
447 01d6 CA01 movw r24,r20
448 01d8 0297 sbiw r24,2
449 01da 2817 cp r18,r24
450 01dc 3907 cpc r19,r25
451 01de 01F5 brne .L30
196:physical.c **** *(int16_t *)(sendPtr + pktLength - 2) = crcTx;
453 .LM58:
454 01e0 E091 0000 lds r30,sendPtr
455 01e4 F091 0000 lds r31,(sendPtr)+1
456 01e8 E40F add r30,r20
457 01ea F51F adc r31,r21
458 01ec 3297 sbiw r30,2
459 01ee 8091 0000 lds r24,crcTx
460 01f2 9091 0000 lds r25,(crcTx)+1
461 01f6 8083 st Z,r24
462 01f8 9183 std Z+1,r25
463 01fa 12C0 rjmp .L30
464 .L25:
197:physical.c **** }
198:physical.c **** } else {
199:physical.c **** if (txCount == pktLength) { // 發送最后字節
466 .LM59:
467 01fc 8917 cp r24,r25
468 01fe 81F4 brne .L30
200:physical.c **** state = TRANSMITTING_LAST;
470 .LM60:
471 0200 83E0 ldi r24,lo8(3)
472 0202 03C0 rjmp .L34
473 .L24:
201:physical.c **** }
202:physical.c **** }
203:physical.c **** } else if (state == TRANSMITTING_LAST) {
475 .LM61:
476 0204 8330 cpi r24,lo8(3)
477 0206 21F4 brne .L31
204:physical.c **** state = TRANSMITTING_DONE;
479 .LM62:
480 0208 84E0 ldi r24,lo8(4)
481 .L34:
482 020a 8093 0000 sts state,r24
483 020e 08C0 rjmp .L30
484 .L31:
205:physical.c **** } else if (state == TRANSMITTING_DONE) {
486 .LM63:
487 0210 8430 cpi r24,lo8(4)
488 0212 31F4 brne .L30
206:physical.c **** RadiocontrolIdle(); // 射頻控制轉入空閑
490 .LM64:
491 0214 0E94 0000 call RadiocontrolIdle
207:physical.c **** state = IDLE;
493 .LM65:
494 0218 1092 0000 sts state,__zero_reg__
208:physical.c **** // 通知上層發送完成
209:physical.c **** packet_sent();
496 .LM66:
497 021c 0E94 0000 call packet_sent
498 .L30:
210:physical.c **** }
211:physical.c **** return SUCCESS;
212:physical.c **** }
500 .LM67:
501 0220 81E0 ldi r24,lo8(1)
502 0222 90E0 ldi r25,hi8(1)
503 /* epilogue: frame size=0 */
504 0224 0895 ret
505 /* epilogue end (size=1) */
506 /* function PhysicalTxByteReady size 98 (97) */
509 .global PhysicalStartSymDetected
511 PhysicalStartSymDetected:
213:physical.c ****
214:physical.c **** /*************************************************************************
215:physical.c **** *功能描述:檢測到起始符號,通知MAC,準備接收數據,將緩存地址傳給MAC
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -