📄 mac.lst
字号:
168:mac.c **** result_t MACBroadcastMsg(void* data, uint8_t length)
169:mac.c **** {
222 .LM24:
223 /* prologue: frame size=0 */
224 /* prologue end (size=0) */
225 0088 FC01 movw r30,r24
170:mac.c **** char intEnabled;
171:mac.c ****
172:mac.c **** // 错误的发送方式
173:mac.c **** if (data == 0 || length == 0 || length > MAX_PKT_LEN - - MAC_HEADER_LEN) {
227 .LM25:
228 008a 892B or r24,r25
229 008c A9F0 breq .L12
231 .LM26:
232 008e 6623 tst r22
233 0090 99F0 breq .L12
234 0092 6C36 cpi r22,lo8(108)
235 0094 88F4 brsh .L12
174:mac.c **** return FAIL;
175:mac.c **** }
176:mac.c ****
177:mac.c **** // 设置发送请求标识
178:mac.c **** intEnabled = inp(SREG) & 0x80;
237 .LM27:
238 0096 9FB7 in r25,95-0x20
239 0098 9078 andi r25,lo8(-128)
179:mac.c **** cli();
241 .LM28:
242 /* #APP */
243 009a F894 cli
180:mac.c ****
181:mac.c **** if (txRequest == 0) {
245 .LM29:
246 /* #NOAPP */
247 009c 8091 0000 lds r24,txRequest
248 00a0 8823 tst r24
249 00a2 39F4 brne .L9
182:mac.c **** txRequest = 1;
251 .LM30:
252 00a4 81E0 ldi r24,lo8(1)
253 00a6 8093 0000 sts txRequest,r24
183:mac.c **** if (intEnabled) sei();
255 .LM31:
256 00aa 9923 tst r25
257 00ac 41F0 breq .L11
258 /* #APP */
259 00ae 7894 sei
260 /* #NOAPP */
261 00b0 06C0 rjmp .L11
262 .L9:
184:mac.c **** } else {
185:mac.c **** if (intEnabled) sei();
264 .LM32:
265 00b2 9923 tst r25
266 00b4 09F0 breq .L12
267 /* #APP */
268 00b6 7894 sei
269 /* #NOAPP */
270 .L12:
186:mac.c **** return FAIL;
272 .LM33:
273 00b8 80E0 ldi r24,lo8(0)
274 00ba 90E0 ldi r25,hi8(0)
275 00bc 0895 ret
276 .L11:
187:mac.c **** }
188:mac.c ****
189:mac.c **** dataPkt = (OSMACMsgPtr)data;
278 .LM34:
279 00be F093 0000 sts (dataPkt)+1,r31
280 00c2 E093 0000 sts dataPkt,r30
190:mac.c **** txPktLen = length + MAC_HEADER_LEN;
282 .LM35:
283 00c6 695F subi r22,lo8(-(7))
284 00c8 6093 0000 sts txPktLen,r22
191:mac.c **** sendAddr = OS_BCAST_ADDR;
286 .LM36:
287 00cc 8091 0000 lds r24,OS_BCAST_ADDR
288 00d0 9927 clr r25
289 00d2 9093 0000 sts (sendAddr)+1,r25
290 00d6 8093 0000 sts sendAddr,r24
192:mac.c **** // 数据包包头设置
193:mac.c **** dataPkt->type = DATA_PKT;
292 .LM37:
293 00da 82E0 ldi r24,lo8(2)
294 00dc 8183 std Z+1,r24
194:mac.c **** dataPkt->toAddr = OS_BCAST_ADDR;
296 .LM38:
297 00de E091 0000 lds r30,dataPkt
298 00e2 F091 0000 lds r31,(dataPkt)+1
299 00e6 8091 0000 lds r24,OS_BCAST_ADDR
300 00ea 8283 std Z+2,r24
195:mac.c **** dataPkt->fromAddr = OS_LOCAL_ADDRESS;
302 .LM39:
303 00ec E091 0000 lds r30,dataPkt
304 00f0 F091 0000 lds r31,(dataPkt)+1
305 00f4 8091 0000 lds r24,OS_LOCAL_ADDRESS
306 00f8 8383 std Z+3,r24
196:mac.c **** dataPkt->group = 0x01;
308 .LM40:
309 00fa E091 0000 lds r30,dataPkt
310 00fe F091 0000 lds r31,(dataPkt)+1
311 0102 81E0 ldi r24,lo8(1)
312 0104 8483 std Z+4,r24
197:mac.c ****
198:mac.c **** tryToSend();
314 .LM41:
315 0106 0E94 0000 call tryToSend
199:mac.c ****
200:mac.c **** return SUCCESS;
317 .LM42:
318 010a 81E0 ldi r24,lo8(1)
319 010c 90E0 ldi r25,hi8(1)
201:mac.c **** }
321 .LM43:
322 010e 0895 ret
323 /* epilogue: frame size=0 */
324 0110 0895 ret
325 /* epilogue end (size=1) */
326 /* function MACBroadcastMsg size 72 (71) */
333 .global MACUnicastMsg
335 MACUnicastMsg:
202:mac.c ****
203:mac.c **** /*************************************************************************
204:mac.c **** *功能描述:发送单播数据包的接口函数
205:mac.c **** *参数说明:包地址,包长度(包括包头),目的地址
206:mac.c **** *返回值:
207:mac.c **** **************************************************************************/
208:mac.c **** result_t MACUnicastMsg(void* data, uint8_t length, uint16_t toAddr)
209:mac.c **** {
337 .LM44:
338 /* prologue: frame size=0 */
339 /* prologue end (size=0) */
210:mac.c **** return SUCCESS;
211:mac.c **** }
341 .LM45:
342 0112 81E0 ldi r24,lo8(1)
343 0114 90E0 ldi r25,hi8(1)
344 /* epilogue: frame size=0 */
345 0116 0895 ret
346 /* epilogue end (size=1) */
347 /* function MACUnicastMsg size 3 (2) */
350 .global MACTxReset
352 MACTxReset:
212:mac.c ****
213:mac.c **** /*************************************************************************
214:mac.c **** *功能描述:强行取消所有正在发送的任务
215:mac.c **** *参数说明:无
216:mac.c **** *返回值:
217:mac.c **** **************************************************************************/
218:mac.c **** result_t MACTxReset()
219:mac.c **** {
354 .LM46:
355 /* prologue: frame size=0 */
356 /* prologue end (size=0) */
220:mac.c **** txRequest = 0;
358 .LM47:
359 0118 1092 0000 sts txRequest,__zero_reg__
221:mac.c **** state = IDLE;
361 .LM48:
362 011c 81E0 ldi r24,lo8(1)
363 011e 8093 0000 sts state,r24
222:mac.c **** return SUCCESS;
223:mac.c **** }
365 .LM49:
366 0122 81E0 ldi r24,lo8(1)
367 0124 90E0 ldi r25,hi8(1)
368 /* epilogue: frame size=0 */
369 0126 0895 ret
370 /* epilogue end (size=1) */
371 /* function MACTxReset size 8 (7) */
375 .global MACPhysicalTxPktDone
377 MACPhysicalTxPktDone:
224:mac.c ****
225:mac.c **** /*************************************************************************
226:mac.c **** *功能描述:发送广播包
227:mac.c **** *参数说明:无
228:mac.c **** *返回值:
229:mac.c **** **************************************************************************/
230:mac.c **** static void startBcast()
231:mac.c **** {
232:mac.c **** PhysicalTxPkt(dataPkt, txPktLen); // 调用物理层发送接口发送数据包
233:mac.c ****
234:mac.c **** radioState = RADIO_TX;
235:mac.c **** state = TX_PKT;
236:mac.c **** geneTime = TX_PKT_DONE_TIME; // 设置超时计时
237:mac.c **** }
238:mac.c ****
239:mac.c **** /*************************************************************************
240:mac.c **** *功能描述:单播包分段发送完成,通知上层
241:mac.c **** *参数说明:无
242:mac.c **** *返回值:
243:mac.c **** **************************************************************************/
244:mac.c **** static void txMsgDone()
245:mac.c **** {
246:mac.c **** // 发送下一个分段
247:mac.c **** txRequest = 0;
248:mac.c **** state = IDLE;
249:mac.c ****
250:mac.c **** testBaseUnicastDone(dataPkt);
251:mac.c **** }
252:mac.c ****
253:mac.c **** /*************************************************************************
254:mac.c **** *功能描述:物理层发送完成,通知MAC
255:mac.c **** *参数说明:包地址
256:mac.c **** *返回值:
257:mac.c **** **************************************************************************/
258:mac.c **** result_t MACPhysicalTxPktDone(void* packet)
259:mac.c **** {
379 .LM50:
380 /* prologue: frame size=0 */
381 /* prologue end (size=0) */
382 0128 FC01 movw r30,r24
260:mac.c **** char pktType;
261:mac.c **** geneTime = 0;
384 .LM51:
385 012a 1092 0000 sts (geneTime)+1,__zero_reg__
386 012e 1092 0000 sts geneTime,__zero_reg__
262:mac.c **** radioState = RADIO_IDLE;
388 .LM52:
389 0132 21E0 ldi r18,lo8(1)
390 0134 2093 0000 sts radioState,r18
263:mac.c **** if (packet == 0 || state != TX_PKT)
392 .LM53:
393 0138 892B or r24,r25
394 013a 21F0 breq .L17
396 .LM54:
397 013c 8091 0000 lds r24,state
398 0140 8330 cpi r24,lo8(3)
399 0142 19F0 breq .L16
400 .L17:
264:mac.c **** return FAIL;
402 .LM55:
403 0144 80E0 ldi r24,lo8(0)
404 0146 90E0 ldi r25,hi8(0)
405 0148 0895 ret
406 .L16:
265:mac.c **** pktType = *((char*)packet + 1);
408 .LM56:
409 014a 8181 ldd r24,Z+1
266:mac.c **** switch (pktType) {
411 .LM57:
412 014c 8230 cpi r24,lo8(2)
413 014e 79F4 brne .L18
267:mac.c **** case RTS_PKT:
268:mac.c **** break;
269:mac.c **** case CTS_PKT:
270:mac.c **** break;
271:mac.c **** case DATA_PKT:
272:mac.c **** if (((OSMACMsgPtr)packet)->toAddr == OS_BCAST_ADDR) {
415 .LM58:
416 0150 9281 ldd r25,Z+2
417 0152 8091 0000 lds r24,OS_BCAST_ADDR
418 0156 9817 cp r25,r24
419 0158 51F4 brne .L18
273:mac.c **** state = IDLE;
421 .LM59:
422 015a 2093 0000 sts state,r18
274:mac.c **** txRequest = 0;
424 .LM60:
425 015e 1092 0000 sts txRequest,__zero_reg__
275:mac.c **** testBaseBroadcastDone(dataPkt);
427 .LM61:
428 0162 8091 0000 lds r24,dataPkt
429 0166 9091 0000 lds r25,(dataPkt)+1
430 016a 0E94 0000 call testBaseBroadcastDone
431 .L18:
276:mac.c **** }
277:mac.c **** break;
278:mac.c **** case ACK_PKT: // ACK发送完成,进入空闲
279:mac.c **** break;
280:mac.c **** }
281:mac.c **** return SUCCESS;
433 .LM62:
434 016e 81E0 ldi r24,lo8(1)
435 0170 90E0 ldi r25,hi8(1)
282:mac.c **** }
437 .LM63:
438 0172 0895 ret
439 /* epilogue: frame size=0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -